DTD (англ. Document Type Definition — определение типа документа) — включает в себя два понятия:
Из-за определённых различий между XML и SGML применение DTD также имеет некоторые особенности в зависимости от целевого документа.
Сейчас идёт отказ от использования DTD в XML-технологии по ряду причин:
На смену DTD пришёл стандарт консорциума W3C XML Schema.
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>
В этом примере определен атрибут name для элемента MAP. Он является обязательным.
Существуют такие типы атрибутов:
CDATA (Character set of data) — значением атрибута могут быть любые символьные данныеID — значением атрибута должен быть уникальный идентификатор элементаIDREF — значением элемента является ссылка на элемент по его IDIDREFS — тоже что и IDREF, но с возможностью ссылок не по одному идентификатору, а по несколькимNMTOKEN — значением атрибута может быть последовательность символов, в чём-то схожая с именем (отсюда и названием — name token). Это строка, которая содержит любую комбинацию тех символов, которые разрешено использовать для имен XML.NMTOKENS — значением атрибута является список значенийENTITY — значение используется для ссылки на внешнюю сущность.ENTITIES — позволяет задать список внешних сущностей, разделённых пробелами.NOTATION — значением атрибута может быть одна из ранее определённых нотацийNOTATIONS — позволяет задать список нотаций.Listings и NOTATION-listingsENUMERATION — задаёт список возможных альтернатив значений.Существуют такие свойства по умолчанию:
IMPLIED — значение атрибута указывать не обязательно;REQUIRED — значение атрибута обязательно должно быть указано;FIXED — значение этого атрибута задано как константа в DTD и в документе не может быть изменено;Чтобы связать документ с определённым DTD, необходимо в начале текста документа указать элемент Объявление Типа Документа.
В зависимости от места расположения DTD, Объявление Типа Документа может быть двух видов:
Набор объявлений DTD содержится в самом тексте документа. Например:
<!DOCTYPE foo [ <!ENTITY greeting "helloworld"> ]>
<!DOCTYPE bar [ <!ENTITY greeting "helloworld"> ]>
Набор объявлений 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>
Для улучшения этой статьи желательно: |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .