Document Type Definition

Document Type Definition
Дата появи 1996 (1998) рік
Творці World Wide Web (W3C)
Розробник Tim Berners-Lee
Основні реалізації Допомога у відображені вебсторінок і вебдодатків
Операційна система Windows, IOS, Android

Визначення Типу Документа (англ. Document Type Definition, DTD) включає два поняття:

  • Термін, що застосовується для опису схеми документу чи його частини мовою схем DTD.
  • Мова схем DTD (DTD schema language) — штучна мова, яку використовують для запису фактичних синтаксичних правил метамови розмітки тексту SGML та XML. З моменту її впровадження інші мови схем для специфікацій, такі як XML Schema та RELAX NG, випускаються з додатковою функціональністю.

Задає можливу структуру для XML-документів:

  1. як можуть називатися елементи
  2. як вони можуть один в одного входити
  3. які у кожного елемента можуть бути атрибути

Через певні відмінності між XML та SGML, застосування DTD також має певні особливості в залежності від мови цільового документа.

Зараз йде відмова від використання DTD в XML-технології по ряду причин:

  1. Відсутня підтримка просторів імен.
  2. Використовується відмінний від XML синтаксис
  3. Відсутня типізація вузлів.

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 — значенням елемента є посилання на елемент по його ID
  • IDREFS — теж що і IDREF, але з можливістю посилань не по одному ідентифікатору, а за кількома
  • NMTOKEN — значенням атрибута може бути послідовність символів, в чомусь схожа з ім'ям (звідси і назвою — name token). Це рядок, яка містить будь-яку комбінацію тих символів, які дозволено використовувати для імен XML.
  • NMTOKENS — значенням атрибута є список значень
  • ENTITY — значення використовується для посилання на зовнішню сутність.
  • ENTITIES — дозволяє задати список зовнішніх сутностей, розділених пробілами.
  • NOTATION — значенням атрибута може бути одна з раніше визначених нотацій
  • NOTATIONS — дозволяє задати список нотацій.
  • Listings і NOTATION-listings
  • ENUMERATION — задає список можливих альтернатив значень.

Існують такі властивості за умовчуванням:

  1. IMPLIED — значення атрибута вказувати не обов'язково;
  2. REQUIRED — значення атрибута обов'язково повинно бути зазначено;
  3. FIXED — значення цього атрибута задано як константа в DTD і в документі не може бути змінено;
  4. деяке конкретне значення, яке використовується за умовчанням.

Визначення сутності

Визначення типів документа (DTD) також можна використовувати для декларації спеціальних символів і символьних рядків, які використовуються в XML документі.Сутність складається з трьох частин: амперсанда (), імені сутності і крапки з комою (;).

<! ENTITY імя_сутності "сутність">

Приклад:

<!ENTITY myname "Дмитро Денисов">

Програма-аналізатор, переглядаючи в першу чергу вміст області DTD- визначень, опрацює цю інструкцію і при подальшому розборі документа буде використовувати вміст DTD- компонента в тому місці, де буде зустрічатися його назва. Тобто тепер в документі ми можемо використовувати вираз &myname; , Яке буде замінено на рядок «Дмитро Денисов».

Приклад:

<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">

В XML-документі:

<author>&writer;&copyright;</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)>

Починаючи з першого рядка:

  1. Елемент <people_list> містить будь-яке число елементів <person>. Знак <*> означає що можливо 0, 1 або більше елементів <person> всередині елемента <people_list>.
  2. Елемент <person> містить елементи <name>, <birthdate >,<gender >і< socialsecuritynumber>. Знак <?> Означає що елемент необов'язковий. Елемент <name> не містить <?>, Що означає що елемент <person> обов'язково повинен містити елемент <name>.
  3. Елемент <name> містить дані.
  4. Елемент <birthdate> містить дані.
  5. Елемент <gender> містить дані.
  6. Елемент <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 [Архівовано 10 січня 2020 у Wayback Machine.](англ.)
  • Довідник XML DTD [Архівовано 20 січня 2008 у Wayback Machine.](англ.)
  • Книги по XML(рос.)


Мова програмування Це незавершена стаття про мови програмування.
Ви можете допомогти проєкту, виправивши або дописавши її.
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. Будь ласка, допоможіть удосконалити цю статтю, додавши посилання на надійні (авторитетні) джерела. Зверніться на сторінку обговорення за поясненнями та допоможіть виправити недоліки.
Матеріал без джерел може бути піддано сумніву та вилучено.
(лютий 2016)

П:  Портал «Програмування»