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-документів:

  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> 

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]


  1. https://pygments.org/docs/lexers/#pygments.lexers.html.DtdLexer