Document Type Definition
Визначення Типу Документу (англ. Document Type Definition, DTD) включає в себе два поняття:
- Термін, що застосовується для опису схеми документу чи його частини мовою схем DTD.
- Мова схем DTD (DTD schema language) — штучна мова, яку використовують для запису фактичних синтаксичних правил метамови розмітки тексту SGML та XML. З моменту її впровадження інші мови схем для специфікацій, такі як XML Schema та RELAX NG, випускаються з додатковою функціональністю.
Document Type Definition | |
---|---|
Файл:DTD | |
Дата появи | 1996(1998) рік |
Творці | World Wide Web (W3C) |
Розробник | Tim Berners-Lee |
Основні реалізації | Допомога у відображені Вебсторінок і веб-додатків |
Операційна система | Windows,IOS,Android |
Задає можливу структуру для XML-документів:
- як можуть називатися елементи
- як вони можуть один в одного входити
- які у кожного елемента можуть бути атрибути
Через певні відмінності між XML та SGML, застосування DTD також має певні особливості в залежності від мови цільового документа.
Зараз йде відмова від використання DTD в XML-технології по ряду причин:
- Відсутня підтримка просторів імен.
- Використовується відмінний від XML синтаксис
- Відсутня типізація вузлів.
DTD визначає дійсні будівельні блоки XML-документа. Вона визначає структуру документа зі списком перевірених елементів та атрибутів. DTD може бути оголошено у XML-документі або як зовнішнє посилання.
На зміну DTD прийшов стандарт консорціуму W3C XML Schema.
Підключення DTD в XML-документ
Перший спосіб(в самому XML-документі)
<?xml version="1.0"?>
<!DOCTYPE configuration [
<!ELEMENT configuration …>
…
]>
< configuration > … </ configuration>
Другий спосіб(окремий файл)
<!DOCTYPE configuration SYSTEM "config.dtd">
Третій спосіб(вказання простору імен)
<!DOCTYPE configuration SYSTEM "http://myserver.com/config.dtd">
Опис схеми документу
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
містить в собі текстові дані та ще три об’єкта-параметра phrase
, special
та formctrl
.
Оголошення елементів
<!ELEMENT імя_елемента вміст >
Оголошення елементів утворюють перелік дозволених назв елементів в документі, а також зазначає інформацію щодо тегів (чи є вони обов’язковими) та моделі вмісту для кожного елемента.
Різні ключові слова та символи визначають вміст елемента:
Правило | Опис |
E* | будь-яку кількість елементів (0 і більше елементів E) |
E+ | принаймні один елемент (1 і більше елементів E) |
E? | необов'язкова наявність елемента (0 або 1) |
E1|E2|…|En | Один з елементів Е1, Е2, ..., Еn |
E1, E2, …, En | Елемент E1, за яким слідують E2, ..., En |
#PCDATA | Текст |
(#PCDATA|E1|…|En)* | 0 або більше текстових елементів і елементи Е1, Е2, ..., ЕN, розташовані в довільному порядку (змішане утримання) |
ANY | Будь-який дочірній вузол( будь-який вміст) |
EMPTY | Немає дочірних вузлів(пустий вміст) |
- Якщо немає
*
,+
або?
— елемент повинен бути тільки один
Приклади:
<!ELEMENT title (#PCDATA)>
<!ELEMENT DL - - (DT|DD)+>
Елемент DL
має містити один або більше елементів DT
чи DD
в будь-якому порядку.
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>
Елемент FORM
має містити в собі один або більше елементів з об’єкта-параметра block
чи елементи SCRIPT
в будь-якому порядку, проте виключена можливість містити ще один елемент FORM
.
Оголошення атрибутів
<!ATTLIST елемент атрибут тип атрибуту властивості >
З кожним елементом DTD-документа можна зіставити список атрибутів. Для цього використовується директива!ATTLIST
, в якій зазначаються ім'я елемента, з яким може бути зіставлений список атрибутів і параметри кожного атрибута: його ім'я, тип і властивості за умовчуванням.
Оголошення атрибутів являє собою дозволений набір атрибутів для кожного визначеного елемента, а також зазначає інформацію щодо типу значень атрибутів (чи одразу вказаний список можливих значень) та інформацію щодо потреби встановлювати значення атрибутів за умовчанням.
Наприклад:
<!ATTLIST MAP name CDATA #IMPLIED >
<!ATTLIST person number CDATA #REQUIRED>
В цьому прикладі визначений атрибут name
для елемента MAP
. Він не є необхідним.
Існують такі типи атрибутів:
CDATA
(Character set of data) - значенням атрибута можуть бути будь-які символьні даніID
- значенням атрибута повинен бути унікальний ідентифікатор елементаIDREF
- значенням елемента є посилання на елемент по його IDIDREFS
- теж що і IDREF, але з можливістю посилань не по одному ідентифікатору, а за кількомаNMTOKEN
- значенням атрибута може бути послідовність символів, в чомусь схожа з ім'ям (звідси і назвою - name token). Це рядок, яка містить будь-яку комбінацію тих символів, які дозволено використовувати для імен XML.NMTOKENS
- значенням атрибута є список значеньENTITY
- значення використовується для посилання на зовнішню сутність.ENTITIES
- дозволяє задати список зовнішніх сутностей, розділених пробілами.NOTATION
- значенням атрибута може бути одна з раніше визначених нотаційNOTATIONS
- дозволяє задати список нотацій.Listings
іNOTATION-listings
ENUMERATION
- задає список можливих альтернатив значень.
Існують такі властивості за умовчуванням:
IMPLIED
- значення атрибута вказувати не обов'язково;REQUIRED
- значення атрибута обов'язково повинно бути зазначено;FIXED
- значення цього атрибута задано як константа в DTD і в документі не може бути змінено;- деяке конкретне значення, яке використовується за умовчанням.
Визначення сутності
Визначення типів документа (DTD) також можна використовувати для декларації спеціальних символів і символьних рядків, які використовуються в XML документі.Сутність складається з трьох частин: амперсанда (), імені сутності і крапки з комою (;).
<! ENTITY імя_сутності "сутність">
Приклад:
<!ENTITY myname "Дмитро Денисов">
Програма-аналізатор, переглядаючи в першу чергу вміст області DTD- визначень, опрацює цю інструкцію і при подальшому розборі документа буде використовувати вміст DTD- компонента в тому місці, де буде зустрічатися його назва. Тобто тепер в документі ми можемо використовувати вираз &myname;
, Яке буде замінено на рядок "Дмитро Денисов".
Приклад:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
В XML-документі:
<author>&writer;©right;</author>
у браузері відображатись XML-документ буде так:
Donald Duck.Copyright W3Schools.
Зв'язок документа з певним DTD
Щоб пов'язати документ з певним DTD, треба на початку тексту документу зазначити елемент DTD.
В залежності від місцезнаходження DTD, DTD можуть бути двох видів:
- Внутрішня підмножина DTD
Набір оголошень DTD міститься в самому тексті документу. Наприклад:
<!DOCTYPE foo [ <!ENTITY greeting "helloworld"> ]>
<!DOCTYPE bar [ <!ENTITY greeting "helloworld"> ]>
- Зовнішня підмножина DTD
Набір оголошень DTD міститься в окремому текстовому файлі з розширенням .dtd В такому разі посилання на файл можна робити через публічний ідентифікатор та (або) через системний ідентифікатор. Наприклад:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Приклад
Приклад дуже простого XML DTD, що описує список людей:
<! ELEMENT people_list (person *)>
<! ELEMENT person (name, birthdate ?, gender, social security number?)>
<! 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>
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
Див. також
Посилання
- Визначення декларації типу XML документа в специфікації Extensible Markup Language (XML) 1.0 (четверта редакція) на W3.org(англ.)
- Довідник XML DTD(англ.)
- Книги по XML(рос.)