DTD | это... Что такое DTD? (original) (raw)
DTD (англ. Document Type Definition определение типа документа) — включает в себя два понятия:
- Термин, который используется для описания схемы документа или его части языком схем DTD.
- Язык схем DTD (DTD schema language) — искусственный язык, который используется для записи фактических синтаксических правил метаязыков разметки текста SGML и XML. С момента его внедрения другие языки схем для спецификаций, такие как XML Schema и RELAX NG, выпускаются с дополнительной функциональностью.
Из-за определённых отличий между XML и SGML, применение DTD также имеет некоторые особенности в зависимости от целевого документа
Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин:
- Используется отличный от XML синтаксис.
- Отсутствует типизация узлов.
- Отсутствует поддержка пространств имён.
На смену DTD пришёл стандарт консорциума W3C XML Schema.
Содержание
Описание схемы документа
DTD описывает схему документа для конкретного языка разметки посредством набора объявлений (объектов-параметров, элементов и атрибутов), которые описывают его класс (или тип) с точки зрения синтаксических ограничений этого документа. Также DTD может объявлять конструкции, которые всегда необходимы для определения структуры документа, но, зато, могут влиять на интерпретацию определённых документов.
Объявление объектов-параметров
Объявление объекта-параметра определяет макрос определённого типа, на который можно ссылаться и который может быть развернут где-нибудь в DTD. Эти макросы могут не появляться в самом документе, а быть только в DTD. Если на объект-параметр ссылаются по имени их DTD, то он разворачивается в строку, в которой указано содержимое этого объекта.
Примеры:
Объект-параметр fontstyle
содержит в себе группу тегов TT | I | B | BIG | SMALL
.
Объект-параметр inline
содержит в себе текстовые данные и ещё четыре объекта-параметра fontstyle
, phrase
, special
и formctrl
.
Объявление элементов
Объявления элементов образовывают перечень разрешенных названий элементов в документе, а также определяют информацию относительно тегов (являются ли они обязательными) и модели содержимого для каждого элемента.
Различные ключевые слова и символы определяют содержимое элемента:
- EMPTY — пустое содержимое
- ANY — любое содержимое
- , — указывает порядок
- | — разделение альтернатив
- () — группировка
- * — любое количество элементов (ноль и более)
- + — по крайней мере один элемент (один и более)
- ? — необязательное наличие элемента (ноль или один)
- Если нет *, + или ? — элемент должен быть только один
Примеры:
Элемент DL
должен содержать один и более элементов DT
или DD
в произвольном порядке.
Элемент FORM
должен содержать в себе один или более элементов с объектом-параметром block
или элементы SCRIPT
в произвольном порядке, однако исключена возможность содержать ещё один элемент FORM
.
Определение атрибутов
С каждым элементом DTD-документа можно сопоставить список атрибутов. Для этого используется директива !ATTLIST, в которой указываются имя элемента, с которым может быть сопоставлен список атрибутов и параметры каждого атрибута: его имя, тип и свойства по умолчанию.
Например:
В этом примере определен атрибут name
для элемента MAP
. Он является обязательным.
Существуют такие типы атрибутов:
- CDATA (Character set of data) — значением атрибута могут быть любые символьные данные
- ID — значением атрибута должен быть уникальный идентификатор элемента
- IDREF — значением элемента является ссылка на элемент по его ID
- IDREFS — тоже что и IDREF, но с возможностью ссылок не по одному идентификатору, а по нескольким
- NMTOKEN — значением атрибута может быть последовательность символов, в чём-то схожая с именем (отсюда и названием — name token). Это строка, которая содержит любую комбинацию тех символов, которые разрешено использовать для имен XML.
- NMTOKENS — значением атрибута является список значений
- ENTITY — значение используется для ссылки на внешнюю сущность.
- ENTITIES — позволяет задать список внешних сущностей, разделённых пробелами.
- NOTATION — значением атрибута может быть одна из ранее определённых нотаций
- NOTATIONS — позволяет задать список нотаций.
- Listings и NOTATION-listings
- ENUMERATION — задаёт список возможных альтернатив значений.
Существуют такие свойства по умолчанию:
- IMPLIED — значение атрибута указывать не обязательно;
- REQUIRED — значение атрибута обязательно должно быть указано;
- FIXED — значение этого атрибута задано как константа в DTD и в документе не может быть изменено;
- некоторое конкретное значение, которое используется по умолчанию.
Связь документа с определённым DTD
Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.
В зависимости от места расположения DTD, Объявление Типа Документа может быть двух видов:
- Внутреннее подмножество DTD
Набор объявлений DTD содержится в самом тексте документа. Например:
]>
]>
- Внешнее подмножество DTD
Набор объявлений DTD располагается в отдельном текстовом файле с расширением .dtd В этом случае ссылку на файл можно сделать через публичный идентификатор и (или) через системный идентификатор. Например:
Пример
Пример очень простого XML DTD, описывающего список людей:
Начиная с первой строки:
- Элемент
<people_list>
содержит любое число элементов<person>
. Знак<*>
означает что возможно 0, 1 или более элементов<person>
внутри элемента<people_list>
. - Элемент
<person>
содержит элементы<name>
,<birthdate>
,<gender>
и<socialsecuritynumber>
. Знак<?>
означает что элемент необязателен. Элемент<name>
не содержит<?>
, что означает что элемент<person>
обязательно должен содержать элемент<name>
. - Элемент
<name>
содержит данные. - Элемент
<birthdate>
содержит данные. - Элемент
<gender>
содержит данные. - Элемент
<socialsecuritynumber>
содержит данные.
Пример XML-документа, использующего этот DTD:
Fred Bloggs 27/11/2008 Male 1234567890