DTD (Document Type Definition) определяет допустимые строительные блоки XML документа, путем указания списка допустимых элементотв и атрибутов.
DTD может описываться как внутри XML документа, так и с помощью внешней ссылки.
Пример внутреннего описания:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT mail (to,from,subject,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>user1@domain.ru</to>
<from>user2@domain.ru</from>
<heading>Встреча</heading>
<body> Позвони мне завтра утром </body>
</note>
В данном примере:
!DOCTYPE mail определяет корневой элемент документа mail.
!ELEMENT note определяет элемент note, который содержит четыре элемента:
"to, from, subject, body".
!ELEMENT to определяет элемент to типа "#PCDATA".
!ELEMENT from определяет элемент from типа "#PCDATA".
!ELEMENT subject определяет элемент subject типа "#PCDATA".
!ELEMENT body определяет элемент body типа "#PCDATA".
Пример внешнего описания:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "mail.dtd">
<note>
<to>user1@domain.ru</to>
<from>user2@domain.ru</from>
<heading>Встреча</heading>
<body> Позвони мне завтра утром </body>
</note>
Для чего необходимо использование DTD?
- С помощью DTD XML файлы могут содержать описание собственного формата.
- Независимые группы людей могут обмениваться данными.
- DTD-схема может быть использована для проверки действительности, как документов получаемых извне, так и собственных документов.
С точки зрения DTD все XML документы (HTML документы) строятся из следующих строительных блоков:
- Элементы (Elements). Элементы могут содержать текст, другие элементы или быть пустыми.
- Атрибуты Attributes). Атрибуты всегда размещаются внутри открывающего тэга элемента. Атрибуты всегда записываются в виде пары имя/значение.
- Entities.
- PCDATA. Означает структурированные символьные данные. Подлежит анализу с помощью парсера на наличие специальных символов (entities) и элементов разметки.
- CDATA. Означает текст, содержимое которого не рассматривается анализатором.
При описании структуры элементов, содержащих вложенные элементы можно использовать специальные операторы, задающие множественность их вхождения:
- '+': один и более раз, например, <!ELEMENT note (message+)>
- '*': ноль и более раз, например, <!ELEMENT note (message*)>
- '?': ноль и один раз, например, <!ELEMENT note (message?)>
Объявление вида <!ELEMENT note (message|body)> указывает на возможность вхождения в элемент note другого элемента: message ИЛИ body.
Атрибуты элементов описываются в форме:
<!ATTLIST element-name attribute-name attribute-type default-value>
например:
<!ATTLIST payment type CDATA "check">
Соответствует XML коду:
<payment type="check" />.
Тип атрибута может принимать одно из значений:
Тип | Описание |
CDATA | Символьные данные |
(en1 | en2 |..) | Значение из списка |
ID | Уникальный id |
IDREF | id другого элемента |
IDREFS | Список других id |
NMTOKEN | Допустимое XML имя |
NMTOKENS | Список допустимых XML имен |
ENTITY | Специальные символы |
ENTITIES | Список специальных символов |
NOTATION | Имя нотации |
xml: | Предопределенное XML имя |
Значение по умолчанию может быть одним из следующих:
Значение | Интерпретация |
#REQUIRED | Обязательно |
#IMPLIED | Не обязательно |
#FIXED value | Значение фиксировано |