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/).
Для проверки схем также существуют специальные валидаторы, например XMLSchema валидатор (http://www.w3.org/2001/03/webdata/xsv).
Согласно спецификации W3C XML программа должна прекратить обработку XML документа, как только будет обнаружена ошибка в этом документе.