- 30 августа 2000 г.
Руководство по XML: Разработка XML Schema
Эта статья, являющаяся фрагментом руководства по языку XML, дает краткий
обзор основных понятий и механизмов работы с XML Schema и приводит аргументы в
пользу использования XML Schema, как более прогрессивного решения в области
описания документов и данных, чем, например, DTD. Приводится пример
XML-документа, разбирается его полная схема и предлагается создание
собственного варианта для данного документа. Кроме того, статья содержит ряд
полезных ссылок, с помощью которых читатель может более детально ознакомиться
со спецификациями DTD, проверить синтаксис самостоятельно созданной схемы
XML-документа, потренироваться на готовых образцах XML-документов с
приложенными к ним схемами, а также обратиться к полному руководству по XML
ресурса Msdn Online.
Что такое XML Schema?
XML Schema- это описание разметки XML-документа сделанное в соответствии с синтаксисом XML. XML Schema - это спецификация, поддержанная фирмой Microsoft и имеющая множество преимуществ перед Document Type Definition (DTD), являющимся первоначальной спецификацией описания XML-модели. Спецификации DTD имеют множество недостатков, включая использование специального, отличного отXML синтаксиса, невозможность типизации данных и нерасширяемость. Например, спецификации DTD не позволяют вам определять содержание элемента как что-либо отличное от другого такого же элемента или строки. Чтобы лучше разобраться в спецификациях DTD, вы можете обратиться к Рекомендациям W3C XML. XML Schema превосходит DTD по всем параметрам, включая поддержку пространств имен (namespaces). Например, XML Schema позволяет вам определять элемент как integer, float, boolean, URL и др.
XML-парсер в Internet Explorer 5 может проверять XML-документ на допустимость как согласно DTD, так и XML-Schema. Как создать XML Schema?
Проведите мышкой по следующему XML-документу, чтобы увидеть описания схемы для каждого узла дерева.
<class xmlns="x-schema:classSchema.xml">
<student studentID="13429">
<name>James Smith</name>
<GPA>3.8</GPA>
</student>
</class>
Вы заметите в этом документе, что определено пространство имен по умолчанию "x-schema:classSchema.xml"
. Это помогает при проверке синтаксиса сравнить весь документ со схемой (x-schema
) по следующему URL ("classSchema.xml
").
Ниже приведена полная схема для данного документа. Она начинается с элемента Schema, содержащего описание пространства имен указанной схемы и, кроме того, в данном случае - еще и описание пространства имен типов данных. Первое, xmlns="urn:schemas-microsoft-com:xml-data"
, говорит о том, что данный XML-документ является схемой XML. Второе, xmlns:dt="urn:schemas-microsoft-com:datatypes"
, позволяет вам определять тип элемента и содержание атрибута с использованием префикса dt в атрибуте type в составе их определений ElementType
и AttributeType
.
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<AttributeType name='studentID' dt:type='string' required='yes'/>
<ElementType name='name' content='textOnly'/>
<ElementType name='GPA' content='textOnly' dt:type='float'/>
<ElementType name='student' content='mixed'>
<attribute type='studentID'/>
<element type='name'/>
<element type='GPA'/>
</ElementType>
<ElementType name='class' content='eltOnly'>
<element type='student'/>
</ElementType>
</Schema>
Элементы описания, используемые вами для определения элементов и атрибутов, выглядят следующим образом:
ElementType
: Присваивает тип и ограничивает значения элемента, а также определяет, какие дочерние элементы он может содержать, если таковые имеются.AttributeType
: Присваивает тип и ограничивает значения атрибута.attribute
: Определяет что ранее описанный тип атрибута может появиться в составе данного элементаElementType
.element
: Определяет, что ранее описанный тип элемента может появиться в составе данного элементаElementType
.
Содержание схемы начинается с объявления AttributeType
и ElementType
для элементов, имеющих наибольшую степень вложенности.
<AttributeType name='studentID' dt:type='string' required='yes'/>
<ElementType name='name' content='textOnly'>
<ElementType name='GPA' content='textOnly' dt:type='float'/>
Следующее объявление ElementType
сопровождается его атрибутом и дочерними элементами. Когда элемент имеет атрибуты или дочерние элементы, все они должны быть включены в объявление ElementType
. Кроме того, они должны быть заранее описаны в своих собственных объявлениях ElementType
и AttributeType
.
<ElementType name='student' content='mixed'>
<attribute type='studentID'/>
<element type='name'/>
<element type='GPA'/>
</ElementType>
Этот процесс выполняется для всей схемы, пока каждый элемент и атрибут не будут объявлены.
В противовес DTD, XML Schemas дают вам возможность иметь модель с открытым содержанием, позволяющую вам, например, задавать тип элементов или использовать значения по умолчанию без обязательных ограничений содержания.
В следующей схеме определен тип элемента GPA и ему присвоен атрибут со значением, заданным по умолчанию, но кроме этого никакие другие узлы элемента student не объявлены.
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<AttributeType name="scale" default="4.0"/>
<ElementType name="GPA" content="textOnly" dt:type="float">
<attribute type="scale"/>
</ElementType>
<AttributeType name="studentID"/>
<ElementType name="student" content="eltOnly" model="open" order="many">
<attribute type="studentID"/>
<element type="GPA"/>
</ElementType>
</Schema>
Вышеприведенная схема позволяет вам проверить только область, с которой вы работаете. Такой подход предоставляет вам больше возможностей для контроля над уровнем проверки вашего документа и позволяет вам использовать некоторые свойства, обеспечиваемые схемой, без обращения к строгой проверке.
Попробуйте!
Попробуйте создать схему следующего документа.
<order>
<customer>
<name>Fidelma McGinn</name>
<phone_number>425-655-3393</phone_number>
</customer>
<item>
<number>5523918</number>
<description>shovel</description>
<price>39.99<price>
</item>
<date_of_purchase>1998-10-23</date_of_purchase>
<date_of_delivery>1998-11-03</date_of_delivery>
</order>
Как только вы закончите эту схему, проверьте ее через XML validator.
Download MSDN Online обеспечивает набор примеров XML-файлов, включая документ XML с приложенной схемой. Загрузите эти примеры и попробуйте манипулировать документом и схемой. Для проверки правильности вашего XML относительно схемы, вы можете загрузить документ через XML Validator или просто просмотреть XML-файл в Mime Type Viewer.
Некоторые соображения:
- Объявления
ElementType
иAttributeType
должны предшествовать определениям содержанияattribute
иelement
, относящихся к этим типам. Например, вышеприведенная схема, определениеElementType
для элемента GPA должна предшествовать определениюElementType
для элементаstudent
. - Значение по умолчанию атрибута
order
зависит от значение атрибутаcontent
. Когда содержание установлено как "eltOnly
," порядок имеет значение по умолчаниюseq
. Когда содержание определено как mixed, порядок имеет значение по умолчаниюmany
. За дополнительной информацией по данным значениям, задаваемым по умолчанию, см. Руководство по XML Schema.
Автор: Msdn Online