Основы работы с DTD и XSD
| Щербак Сергей Сергеевич | |
| Shcherbak Sergey | |
| |
| Род деятельности: |
R&D |
|---|---|
| Роль участника: | |
| Основной раздел: | |
| Круг интересов: | |
| Дата рождения: |
15.12.1979 |
| Место рождения: | |
| Гражданство: | |
| Сайт: | |
| Nickname | |
| Подробнее: | |
Для описания данных 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 (product)+ > <!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 (product)+ > <!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 можно почитать [здесь]!
