Основы работы с DTD и XSD

Основы работы с DTD и XSD.

Для описания данных XML можно использовать DTD (Document Type Definition) или схемы XML.

Схемы XML создаются на одном из языков описания схем XML, например, XSD или XDR.

XSD – XML Schema Definition – схемы XML от W3C.
XDR — XML-Data Reduced – схемы XML от Microsoft.

DTD (Document Type Definition) задает правила формирования теговой разметки.

Например, для описания набора компьютеров можно использовать следующее DTD:

<!ELEMENT productList (computer)+ >
<!ELEMENT computer (hdd?, processor*, morherboard) >
<!ELEMENT hdd (#PCDATA) >
<!ELEMENT processor (#PCDATA) >
<!ELEMENT motherboard (#PCDATA) >

Использование знаков ? + * накладывает на элементы ограничения:

«+» — используется для определения одного или большего количества дочерних элементов
«*» — используется для определения нуля и большего количества дочерних элементов
«?» — используется для определения нуля или одного дочернего элемента (элемент обязателен или нет)

Последовательность использования элементов (порядок определения дочерних элементов) в теговой разметке XML определяется так:

<!ELEMENT computer (hdd?, processor*, motherboard) >.

Сначала должен быть определён элемент hdd, processor, и только потом motherboard.

Помимо последовательностей можно использовать альтернативы.

Альтернатива позволяет показать, что в конкретном месте должен появится один из множества элементов. При использовании альтернатив синтаксический анализатор знает, что в документе может применятся только один элемент из перечисления.

Определяются альтернативы так — (P4|AMD|Celeron) — <!ELEMENT computer (hdd?, (P4|AMD| Celeron) , motherboard) >

Для определения смешанного типа содержимого элементов (текст или дочерние элементы), можно воспользоваться альтернативами такого вида (добавлено #PCDATA):

<!ELEMENT computer (hdd?, (#PCDATA|P4|AMD| Celeron) , morherboard) >

Атрибуты элементов определяются с помощью конструкции XML <!ATTLIST>

<!ATTLIST имя_элемента имя_атрибута тип_атрибута значение_по_умолчанию >

В DTD все типы атрибутов основаны на строковом типе данных.

Наиболее распространенные типы атрибута:

CDATA – символьные данные;
ID — уникальный идентификатор;
(value1|value2|value3) – перечисление возможных значений атрибутов, т.е. возможным значением атрибута будет одно из перечисляемых.

Например, можно определить атрибут «model» элемента «computer» так:

<!ATTLIST computer model CDATA>

DTD к XML можно подключить так:

<!DOCTYPE productList SYSTEM «products.dtd»>

или можно определить конструкции DTD внутри XML документа, например, так:

<!DOCTYPE productList
[
<!ELEMENT productList (computer)+ >
<!ELEMENT computer (hdd, processor, morherboard) >
<!ELEMENT hdd (#PCDATA) >
<!ELEMENT processor (#PCDATA) >
<!ELEMENT motherboard (#PCDATA) >
]>

Схемы XML – это альтернативный способ определения типа документа. Наиболее часто используемые языки схем XML – это XSD от W3C и XDR от Microsoft.

В схеме XML определяются элементы и их атрибуты. Кроме того, в схеме XML задаются правила порождения элементов (порядок вложенности элементов, последовательность их появления), и, конечно, типизация элементов и атрибутов с возможностью установления ограничений на значения элементов и их атрибутов.

Элементы обладают обязательными атрибутами name и type, определяющими имя элемента и его тип. Например:

<xs:element name=»computer» type=»xs:string»>

В схемах XML поддерживаются все наиболее распространенные в языках программирования типы данных, а именно:

xs:string — строковый тип
xs:decimal — десятичное число
xs:boolean – true/false
xs:float – число с плавающей точки
xs:date (1950-03-26) — дата
xs:time (15:30:01) — время
и др.

Кроме того, атрибут элемента minOccurs=”0” определяет минимальное число вхождений элемента, а maxOccurs=”число” — максимальное число вхождений элементов.

Элементы бывают простыми и сложными.

Простые элементы не могут иметь атрибуты и содержимое смешанного типа, а сложные – могут.

Содержимое смешанного типа – это возможность использовать внутри элемента дочерние элементы и текст (смешанное содержимое) .

Простые определяются с помощью вложенного элемента <xs:simpleType>, сложные — <xs:complexType>

Ограничения на значение элемента можно устанавливать с помощью конструкции <xs:restriction>. Например:

<xs:element name=”возраст”>
<xs:simpleType>
<xs:restriction base=”xs:integer”> <!— ограничения:—>
<xs:minInclusive value=”25”> <!—мин. значение—>
<xs:maxInclusive=”41” ><!—макс. значение>
</xs:restriction>
</xs:simpleType>
</xs:element>

Ограничения на значения элемента (используются множества допустимых значений) устанавливаются с помощью <xs:restriction> и <xs:enumeration>

Например:

<xs:element name=”Processor”>
<xs:simpleType>
<xs:restriction base=”xs:string”>
<xs:enumeration value=”P4”/>
<xs:enumeration value=”AMD”/>
<xs:enumeration value=”CoreDuo”/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Для того, чтобы можно было использовать ограничение вне определения элемента Processor (например, еще в элементе «Platform» ), нужно следующим образом модифицировать определение элемента Processor:

<xs:element name=”Processor” type=”processorType”>
<xs:simpleType name=”processorType”>
<xs:restriction base=”xs:string”>
<xs:enumeration value=”P4”/>
<xs:enumeration value=”AMD”/>
<xs:enumeration value=”CoreDuo”/>
</xs:restriction>
</xs:simpleType>
</xs:element>

В отличие от простых элементов сложные элементы могут иметь атрибуты и содержимое смешанного типа.

Последовательность появления дочерних элементов определяется с помощью конструкции <xs:sequence>

Например, сложный элемент Computer с установленной последовательностью появления элементов (сначала HDD, потом Motherboard) можно определить так:

<xs:complexType name=”Computer”>
<xs:sequence>
<xs:element name=”HDD” type=”xs:string”/>
<xs:element name=”Motherboard” type=”xs:string”/>
</xs:sequence>
<xs:attribute name=”model” type=”xs:string” fixed=”NewModel”/>
<xsd:complexType>

Подключить XMLSchema к XML документу можно так:

<ProductList xmlns:xs=»http://www.w3.org/2001/XMLSchema-instance» xs:noNamespaceSchemaLocation=»products.xsd»>

</ProductList>

Вместо «products.xsd» может быть любой допустимый URL, а вместо ProductList любой ваш корневой элемент XML документа.

Более подробно об XML DTD и XSD можно почитать здесь Школы XML.

А введение в XML можно почитать здесь !

P.S. При использовании примеров с этой странички — может быть — придётся изменить кавычки ❗

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Ответить с помощью ВКонтакте: