DTD

DTD (англ. Document Type Definition — определение типа документа) — используется для обозначения следующих двух понятий:
- Термин, который используется для обозначения схемы всего документа или его части (в контекстке языка схем DTD).
- Язык схем DTD (DTD schema language) — компьютерный язык, который используется для записи фактических синтаксических правил метаязыка SGML и расширяемого языка разметки XML. С момента его внедрения другие языки схем для языков разметки, такие как XML Schema и RELAX NG, обзавелись дополнительной функциональностью.
Из-за определённых различий между XML и SGML применение DTD также имеет некоторые особенности в зависимости от целевого документа.
Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин:
На смену DTD пришёл стандарт XML Schema консорциума W3C.
Описание схемы документа
DTD описывает схему документа для конкретного языка разметки посредством набора объявлений [объектов-параметров, элементов и атрибутов элементов], которые описывают его класс (или тип) с точки зрения синтаксических ограничений этого документа. Также DTD может объявлять конструкции, которые всегда необходимы для определения структуры документа, но, зато, могут влиять на интерпретацию определённых документов.
Объявление объектов-параметров
Объявление объекта-параметра определяет макрос определённого типа, на который можно ссылаться и который может быть развернут где-нибудь в DTD. Эти макросы могут не появляться в самом документе, а быть только в DTD. Если на объект-параметр ссылаются по имени их DTD, то он разворачивается в строку, в которой указано содержимое этого объекта.
Примеры:
<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">Объект-параметр fontstyle содержит в себе группу тегов TT | I | B | BIG | SMALL.
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">Объект-параметр inline содержит в себе текстовые данные и ещё четыре объекта-параметра fontstyle, phrase, special и formctrl.
Объявление элементов
Объявления элементов определяют(задают) набор разрешённых названий элементов в документе, тип содержимого для каждого элемента и обязательность/необязательность тегов.
Различные ключевые слова и символы определяют содержимое элемента:
- EMPTY — пустое содержимое
- ANY — любое содержимое
- , — указывает порядок
- | — разделение альтернатив
- () — группировка
- * — любое количество элементов (ноль и более)
- + — по крайней мере один элемент (один и более)
- ? — необязательное наличие элемента (ноль или один)
- Если нет *, + или ? — элемент должен быть только один
Примеры:
<!ELEMENT DL - - (DT|DD)+>Элемент DL должен содержать один и более элементов DT или DD в произвольном порядке.
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>Элемент FORM должен содержать в себе один или более элементов в виде объекта-параметра block или элемента SCRIPT в произвольном порядке, однако исключена возможность содержать ещё один элемент FORM.
Объявление атрибутов элементов
Каждому элементу DTD-документа можно назначить список атрибутов. Для этого используется директива !ATTLIST, в которой указывается имя элемента, которому назначается список атрибутов и параметры каждого атрибута: имя, тип и значение по умолчанию.
Например:
<!ATTLIST MAP name CDATA #REQUIRED>В этом примере для элемента MAP определен атрибут name. Он является обязательным.
Существующие типы атрибутов:
- CDATA (Character set of data) — значением атрибута могут быть любые символьные данные
- ID — значением атрибута должен быть уникальный идентификатор элемента
- IDREF — значением элемента является ссылка на элемент по его ID
- IDREFS — тоже что и IDREF, но с возможностью ссылок не по одному идентификатору, а по нескольким
- NMTOKEN — значением атрибута может быть последовательность символов, в чём-то схожая с именем (отсюда и названием — name token). Это строка, которая содержит любую комбинацию тех символов, которые разрешено использовать для имен XML.
- NMTOKENS — значением атрибута является список значений
- ENTITY — значение используется для ссылки на внешнюю сущность.
- ENTITIES — позволяет задать список внешних сущностей, разделённых пробелами.
- NOTATION — значением атрибута может быть одна из ранее определённых нотаций
- NOTATIONS — позволяет задать список нотаций.
- Listings и NOTATION-listings
- ENUMERATION — задаёт список возможных альтернатив значений.
Существуют такие свойства по умолчанию:
Связь документа с определённым DTD
Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.
В зависимости от места расположения DTD Объявление Типа Документа может быть двух видов:
- Внутреннее подмножество DTD
Набор объявлений DTD содержится в самом тексте документа. Например:
<!DOCTYPE foo [ <!ENTITY greeting "helloworld"> ]> <!DOCTYPE bar [ <!ENTITY greeting "helloworld"> ]>- Внешнее подмножество DTD
Набор объявлений DTD располагается в отдельном текстовом файле с расширением .dtd В этом случае ссылку на файл можно сделать через публичный идентификатор и (или) через системный идентификатор. Например:
<!-- Валидация простого HTML 4.01 --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">Пример
Пример очень простого XML DTD, описывающего список людей:
<!ELEMENT people_list (person*)> <!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)> <!ELEMENT name (#PCDATA) > <!ELEMENT birthdate (#PCDATA) > <!ELEMENT gender (#PCDATA) > <!ELEMENT socialsecuritynumber (#PCDATA) >Начиная с первой строки:
Пример XML-документа, использующего этот DTD:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE people_list SYSTEM "example.dtd"> <people_list> <person> <name> Fred Bloggs </name> <birthdate> 27/11/2008 </birthdate> <gender> Male </gender> <socialsecuritynumber> 1234567890 </socialsecuritynumber> </person> </people_list>