XML DTD

XML документ с корректной синтаксической структурой является "синтаксически верным".

XML документ, прошедший проверку по DTD, является "синтаксически верным" и "валидным".

Что такое DTD?

DTD это аббревиатура обозначающая Определение типов документа (англ. Document Type Definition).

DTD определяет структуру XML документа, а также допустимые элементы и атрибуты.

Валидные XML документы

"Валидный" XML документ - это "синтаксически верный" XML документ, который также соответствует правилам DTD (определениям типов документов):


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>

В приведенном примере, декларация DOCTYPE является ссылкой на внешний файл определений типов документа (DTD). Содержимое этого файла показано ниже.

XML DTD

Цель DTD состоит в том, чтобы определить структуру XML документа. Это делается путем определения списка допустимых элементов:

Note.dtd


<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

Приведенное выше DTD интерпретируется следующим образом:

  • !DOCTYPE note определяет, что корневым элементом документа является note
  • !ELEMENT note определяет, что элемент note содержит четыре элемента: to, from, heading, body
  • !ELEMENT to определяет, что элемент to должен быть типа "#PCDATA"
  • !ELEMENT from определяет, что элемент from должен быть типа "#PCDATA"
  • !ELEMENT heading определяет, что элемент heading должен быть типа "#PCDATA"
  • !ELEMENT body определяет, что элемент body должен быть типа "#PCDATA"
Примечание: #PCDATA означает разбираемые текстовые данные.

Использование DTD для определения сущностей

Определения типов документа (DTD) также можно использовать для декларации специальных символов и символьных строк, используемых в XML документе:


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE note [
<!ENTITY nbsp "&#xA0;">
<!ENTITY writer "Writer: Donald Duck.">
<!ENTITY copyright "Copyright: MSiter.RU.">
]>

<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
   <footer>&writer;&nbsp;&copyright;</footer>
</note>

Сущность состоит из трех частей: амперсанда (&), имени сущности и точки с запятой (;).

Зачем нужно использовать DTD?

С DTD ваш XML файл может нести собственный формат.

С DTD различные, не связанные друг с другом группы людей могут приходить к соглашению о стандартах пересекающихся данных.

С DTD вы можете быть уверены, что получаемые из внешних источников данные будут корректными.

Когда не стоит использовать DTD?

Вообще-то для работы XML не требуется DTD.

Когда вы экспериментируете с XML или работаете с небольшими XML файлами, то создание DTD может оказаться излишней тратой времени.

Если вы разрабатываете приложения, то стоит подождать, пока спецификации не станут стабильными, и только тогда добавлять определения. В обратном случае ваше приложение может перестать работать из-за ошибок валидации.