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"
Использование DTD для определения сущностей
Определения типов документа (DTD) также можно использовать для декларации специальных символов и символьных строк, используемых в XML документе:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY nbsp " ">
<!ENTITY writer "Writer: Donald Duck.">
<!ENTITY copyright "Copyright: MSiter.RU.">
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
<footer>&writer; ©right;</footer>
</note>
Сущность состоит из трех частей: амперсанда (&), имени сущности и точки с запятой (;).
Зачем нужно использовать DTD?
С DTD ваш XML файл может нести собственный формат.
С DTD различные, не связанные друг с другом группы людей могут приходить к соглашению о стандартах пересекающихся данных.
С DTD вы можете быть уверены, что получаемые из внешних источников данные будут корректными.
Когда не стоит использовать DTD?
Вообще-то для работы XML не требуется DTD.
Когда вы экспериментируете с XML или работаете с небольшими XML файлами, то создание DTD может оказаться излишней тратой времени.
Если вы разрабатываете приложения, то стоит подождать, пока спецификации не станут стабильными, и только тогда добавлять определения. В обратном случае ваше приложение может перестать работать из-за ошибок валидации.