Спонсор: Microsoft
Воронежский государственный университет
Опубликован: 04.02.2009 | Доступ: свободный | Студентов: 8216 / 665 | Оценка: 4.14 / 3.78 | Длительность: 19:54:00
Лекция 10:

Языки описания cхем XML

XDR схема

XML-Data – полное имя языка описания схем, предложенного Майкрософт, а XML-DataReduced – это "часть" полной рекомендации. Схема XDR - это экземпляр XML, т.е. соответствует всем синтаксическим правилам и стандартам XML.

Реализуя проверки данных на уровне документа с помощью схемы, приложения, генерирующие и принимающие транзакции, можно оптимизировать для обеспечения максимального быстродействия. Соответствие полей и правильность записей проверяются на уровне экземпляров XML.

Корневым элементом в схеме XDR всегда является элемент Schema:

<Schema
    name="имя_схемы" xmlns="urn:schemas-microsoft-com:xml-data" 
    xmlns:dt="urn:schemas-microsoft-com:datatypes">
    <-- Объявления других элементов -->
</Schema>

Элемент ElementType имеет синтаксис:

<ElementType 
    content="{empty | texOnly | eltOnly | mixed}">
    dt:type "datatype"
    model="{open | closed}"
    name = "idref"
    order="{one | seq | many}"
>

Элемент ElementType может иметь следующие атрибуты:

Имя атрибута Описание
name Имя элемента
content Содержание элемента. Допустимые значения: empty (пустой элемент), eltOnly (может быть только контейнером для других элементов), textOnly (только текстовые данные), mixed (смешанные данные).
dt:type Тип данных элемента
model Может принимать значения:
Open – разрешено использовать элементы, не определенные в схеме
Closed – запрещено использовать элементы, не определенные в схеме
order Порядок следования дочерних элементов в экземпляре XML. Допустимые значения:
one – предполагается наличие одного документа
many – любое количество элементов в любом порядке
seq – элементы указываются в строго заданном порядке.

В качестве дочерних элементов для ElementType можно использовать следующие:

Имя элемента Описание
element Объявляет дочерний элемент
description Обеспечивает описание элемента ElementType
datatype Обеспечивает тип данных элемента ElementType
group Определяет порядок следования элементов
AttributeType Определяет атрибут
attribute Определяет сведения о дочернем элементе AttributeType

Для объявления атрибутов используется синтаксис:

<AttributeType 
        default="default-value"
        dt:type="primitive-type"
        dt:values="enumerated-values"
        name="idref"
        required="{yes|no}"
>

В свою очередь элемент AttributeType может иметь атрибуты:

Значение Описание
default Значение по умолчанию
dt:type Один из следующих типов:
entity, entities, enumeration, id, idref, nmtoken, nmtokens, notation, string
dt:values Допустимые значения
name Имя атрибута
required Указывает на обязательное наличие атрибута в описании

Синтаксис для описания элемента attribute выглядит следующим образом:

<attribute
        default="default-value"
        type="attribute-type"
        [required="{yes|no}"]
>

а его возможные значения могут быть такими:

Значение Комментарий
default Значение по умолчанию
type Имя элемента AttributeType, определенного в данной схеме. Должно соответствовать атрибуту name элемента AttributeType
required Указывает на обязательное наличие атрибута в описании

В отличие от DTD схем XDR поддерживает типы данных. Элемент Schema имеет следующий атрибут:

Xmlns:dt="urn=schemas-microsoft-com:datatypes"

С полным списком типов данных можно ознакомится на странице по адресу: http://msdn.microsoft.com/en-us/library/ms256121(VS.85).aspx

Индикаторы вхождения в схемах XDR имеют синтаксис:

<element
        type="element-type"
        [minOccur="{0|1}"]
        [maxOccur="{1|*}"]
>

XDR схема позволяет определять группы содержания. Так, в элементе ElementType может содержаться элемент group, имеющий синтаксис:

<group order="(one|seq|many)" minOccur="(0|1)" 	maxOccur="(1|*)">
    <element type="ElementType/">
    <element type="ElementType/"> 
    <element type="ElementType/"> 
    <element type="ElementType/"> 
</group>

В заключение приведем пример XSD схемы, описывающей структуру XML документа, содержащего письма электронной почты:

<?xml version = "1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">

    <xsd:element name="m_box">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="message" minOccurs="0" 
                        maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="message">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="head" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="body" minOccurs="1" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute name="uid" use="required" type="xsd:string"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="head">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="to" minOccurs="1" maxOccurs="unbounded"/>
                <xsd:element ref="from" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="date" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="subject" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="cc" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="to" type="xsd:string"/>
    <xsd:element name="from" type="xsd:string"/>
    <xsd:element name="date" type="xsd:string"/>
    <xsd:element name="subject" type="xsd:string"/>
    <xsd:elememt name="cc" type="xsd:string"/>

</xsd:schema>

Для проверки действительности XML документа можно использовать специальные валидаторы, например W3C валидатор (http://validator.w3.org/).

Для проверки схем также существуют специальные валидаторы, например XML Schema валидатор (http://www.w3.org/2001/03/webdata/xsv).

Согласно спецификации W3C XML программа должна прекратить обработку XML документа, как только будет обнаружена ошибка в этом документе.

Михаил Олифиренко
Михаил Олифиренко
Александр Табачук
Александр Табачук

Это только у меня не работает кнопочка "Получить код DreamSpark"? Пишет "временно не доступно..." А когда заработает?