Описание схемы документа на языке XSD
Связать XML документ с его XSD схемой можно разными способами:
- подать файлы со схемой на вход анализатора.
- задать файлы со схемой как свойство анализатора.
- указать прямо в документе XML.
Рассмотрим 3 способ более подробно.
Если элементы документа не принадлежат никакому пространству имен и записаны без префикса, то в корневом элементе документа записывается атрибут noNamespaceSchemaLocation, указывающий расположение файла со схемой в форме URI:
< root_element_name xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation="file_name.xsd">
В этом случае в схеме не должно быть целевого пространства имен.
Если же элементы документа относятся к некоторому пространству имен, то применяется атрибут schemaLocation, в котором через пробел перечисляются пространство имен и расположение файла со схемой, описывающей это пространство имен.
Элементы, из которых будет состоять документ XML, объявляются в схеме компонентом element:
<xsd:element_name="имя элемента" tуре="тип элемента" minOccurs="Haменьшее число появлений элемента в документе" maxOccurs="наибольшее число появлений" />
Значение по умолчанию необязательных атрибутов minOccurs и maxOccurs равно 1. Это означает, что если эти атрибуты отсутствуют, то элемент должен появиться в документе XML ровно один раз.
Указание типа элемента в атрибуте type удобно, если это встроенный простой тип или тип, определенный заранее. Тогда в атрибуте type можно записать только имя типа.
Если же тип элемента определяется здесь же, то определение типа элемента лучше вынести:
<xsd:element name="имя элемента">
Определение типа элемента
</xsd:element>
Объявление атрибута элемента тоже несложно:
<xsd:attribute name=" имя атрибута" type="тип атрибута" use="обязательность атрибута" default="значение по умолчанию" />
Необязательный атрибут use принимает три значения:
- optional - описываемый атрибут необязателен (это значение по умолчанию);
- required - описываемый атрибут обязателен;
- prohibited - описываемый атрибут неприменим. Это значение полезно при определении подтипа, чтобы отменить некоторые атрибуты базового типа.
Определение типа атрибута, - а это должен быть простой тип, - можно вынести в содержимое элемента attribute:
<xsd:attribute name="имя атрибута">
Тип атрибута
</xsd:attribute>