Языки описания 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 может иметь атрибуты:
Синтаксис для описания элемента 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 документа, как только будет обнаружена ошибка в этом документе.