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/).

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: