Введение в XML DTD

Определение типов документа (DTD) декларирует допустимые строительные блоки XML документа. Оно задает структуру документа со списком допустимых элементов и атрибутов.

DTD может декларироваться как в коде самого XML документа, так и во внешнем файле с подключением его к XML документу.

Внутренняя декларация DTD

Если DTD декларируется внутри XML файла, то она должны быть заключена в специальный тег декларации DOCTYPE, который имеет следующий синтаксис:


<!DOCTYPE корневой-элемент [декларации-элементов]>

Пример XML документа с внутренним DTD:


<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

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

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"

Внешняя декларация DTD

Если DTD декларируется во внешнем файле, то подключение осуществляется следующим образом:


<!DOCTYPE корневой-элемент SYSTEM "имя файла">

Ниже приводится тот же XML документ, что и ранее, но с внешней декларацией DTD:


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

А вот что содержится в файле "note.dtd", который декларирует DTD:


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

Для чего используют DTD?

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

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

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

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