Лучшие вопросы
Таймлайн
Чат
Перспективы
DTD
Из Википедии, свободной энциклопедии
Remove ads
DTD (англ. Document Type Definition — определение типа документа) — аббревиатура для обозначения следующих двух понятий:
- Схема всего документа или его части (в контексте языка схем DTD).
- Язык схем DTD (DTD schema language) — компьютерный язык, который используется для записи фактических синтаксических правил метаязыка SGML и расширяемого языка разметки XML. С момента его внедрения другие языки схем для языков разметки, такие как XML Schema и RELAX NG, обзавелись дополнительной функциональностью.
Из-за определённых различий между XML и SGML применение DTD также имеет некоторые особенности в зависимости от целевого документа.
Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин[1]:
- Используется отличный от XML синтаксис.
- Отсутствует типизация узлов (в DTD).
- Отсутствует поддержка пространств имён (в DTD).
На смену DTD пришёл стандарт XML Schema консорциума W3C.
Remove ads
Описание схемы документа
Суммиров вкратце
Перспектива
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 и в документе не может быть изменено;- некоторое конкретное значение, которое используется по умолчанию.
Remove ads
Связь документа с определённым 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">
Remove ads
Пример
Суммиров вкратце
Перспектива
Пример очень простого 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>
См. также
Примечания
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads