Interested Article - DTD
- 2020-12-07
- 1
DTD ( англ . Document Type Definition — определение типа документа) — аббревиатура для обозначения следующих двух понятий:
- Схема всего документа или его части (в контексте языка схем DTD ).
- Язык схем DTD (DTD schema language) — компьютерный язык , который используется для записи фактических синтаксических правил метаязыка SGML и расширяемого языка разметки XML . С момента его внедрения другие языки схем для языков разметки , такие как XML Schema и RELAX NG , обзавелись дополнительной функциональностью.
Из-за определённых различий между XML и SGML применение DTD также имеет некоторые особенности в зависимости от целевого документа.
Сейчас идёт отказ от использования DTD в XML -технологии по ряду причин :
- Используется отличный от XML синтаксис.
- Отсутствует типизация узлов (в DTD).
- Отсутствует поддержка пространств имён (в DTD).
На смену 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
— задаёт список возможных альтернатив значений.
Существуют такие свойства по умолчанию:
-
IMPLIED
— значение атрибута указывать не обязательно; -
REQUIRED
— значение атрибута обязательно должно быть указано; -
FIXED
— значение этого атрибута задано как константа в DTD и в документе не может быть изменено; - некоторое конкретное значение, которое используется по умолчанию.
Связь документа с определённым 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) >
Начиная с первой строки:
-
Элемент
<people_list>
содержит любое число элементов<person>
. Знак<*>
означает, что возможно 0, 1 или более элементов<person>
внутри элемента<people_list>
. -
Элемент
<person>
содержит элементы<name>
,<birthdate>
,<gender>
и<socialsecuritynumber>
. Знак<?>
означает, что элемент необязателен. Элемент<name>
не содержит<?>
, что означает, что элемент<person>
обязательно должен содержать элемент<name>
. -
Элемент
<name>
содержит данные. -
Элемент
<birthdate>
содержит данные. -
Элемент
<gender>
содержит данные. -
Элемент
<socialsecuritynumber>
содержит данные.
Пример 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>
См. также
Примечания
- Редакторы Ashok Malhotra, Murray Maloney. . W3C (15 февраля 1999). Дата обращения: 26 июля 2021. 19 июля 2021 года.
- 2020-12-07
- 1