Document Type Definition
Document Type Definition | |
---|---|
Дата появи | 1996 (1998) рік |
Творці | World Wide Web (W3C) |
Розробник | Tim Berners-Lee |
Основні реалізації | Допомога у відображені вебсторінок і вебдодатків |
Операційна система | Windows, IOS, Android |
Звичайні розширення файлів | .dtd [1] |
Визначення Типу Документа (англ. Document Type Definition, DTD) включає два поняття:
- Термін, що застосовується для опису схеми документу чи його частини мовою схем DTD.
- Мова схем DTD (DTD schema language) — штучна мова, яку використовують для запису фактичних синтаксичних правил метамови розмітки тексту SGML та XML. З моменту її впровадження інші мови схем для специфікацій, такі як XML Schema та RELAX NG, випускаються з додатковою функціональністю.
Задає можливу структуру для 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, …, EN, розташовані в довільному порядку (змішане утримання) |
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>
Див. також
- DITA
- XML schema
- XML Schema (W3C)
- RELAX NG
- Формальна граматика
- Варианты DOCTYPE для HTML 4.01
Посилання
- Визначення декларації типу XML документа в специфікації Extensible Markup Language (XML) 1.0 (четверта редакція) на W3.org [Архівовано 10 січня 2020 у Wayback Machine.](англ.)
- Довідник XML DTD [Архівовано 20 січня 2008 у Wayback Machine.](англ.)
- Книги по XML(рос.)
![]() | Це незавершена стаття про мови програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. Будь ласка, допоможіть удосконалити цю статтю, додавши посилання на надійні (авторитетні) джерела. Зверніться на сторінку обговорення за поясненнями та допоможіть виправити недоліки. Матеріал без джерел може бути піддано сумніву та вилучено. (лютий 2016) |
|
- ↑ https://pygments.org/docs/lexers/#pygments.lexers.html.DtdLexer