DTD

DTD ( англ. Document Type Definition визначення типу документа) - включає в себе два поняття:

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

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

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

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

На зміну DTD прийшов стандарт консорціуму W3C XML Schema.


1. Опис схеми документа

DTD описує схему документа для конкретного мови розмітки за допомогою набору оголошень (об'єктів-параметрів, елементів і атрибутів), які описують його клас (або тип) з точки зору синтаксичних обмежень цього документа. Також DTD може оголошувати конструкції, які завжди необхідні для визначення структури документа, але, зате, можуть впливати на інтерпретацію певних документів.

1.1. Оголошення об'єктів-параметрів

Оголошення об'єкта-параметра визначає макрос певного типу, на який можна посилатися і який може бути розгорнутий де-небудь в DTD. Ці макроси можуть не з'являтися в самому документі, а бути тільки в DTD. Якщо на об'єкт-параметр посилаються на ім'я їх DTD, то він розгортається в рядок, в якій зазначено вміст цього об'єкта.

Приклади:

  "TT | I | B | BIG | SMALL"  > 

Об'єкт-параметр fontstyle містить у собі групу тегів TT | I | B | BIG | SMALL.

  "# PCDATA |% fontstyle; |% phrase; |% special; |% formctrl;"  > 

Об'єкт-параметр inline містить в собі текстові дані і ще чотири об'єкти-параметра fontstyle, phrase, special і formctrl.


1.2. Оголошення елементів

Оголошення елементів утворюють перелік дозволених назв елементів в документі, а також визначають інформацію щодо тегів (чи є вони обов'язковими) і моделі вмісту для кожного елемента.

Різні ключові слова та символи визначають вміст елемента:

  • EMPTY - пусте вміст
  • ANY - будь-який вміст
  • , - Вказує порядок
  • | - Поділ альтернатив
  • () - Угрупування
  • * - Будь-яку кількість елементів (нуль і більше)
  • + - Принаймні один елемент (один і більше)
  • ? - Необов'язкове наявність елемента (нуль або один)
  • Якщо немає *, + або? - Елемент повинен бути тільки один

Приклади:

  (  DT | DD  )  +> 

Елемент DL повинен містити один і більше елементів DT або DD в довільному порядку.

  (  % Block; | SCRIPT  )  + -  (  FORM  )  > 

Елемент FORM повинен містити в собі один або більше елементів з об'єктом-параметром block або елементи SCRIPT в довільному порядку, проте виключена можливість утримувати ще один елемент FORM.


1.3. Визначення атрибутів

З кожним елементом DTD-документа можна зіставити список атрибутів. Для цього використовується директива! ATTLIST, в якій зазначаються ім'я елемента, з яким може бути зіставлений список атрибутів і параметри кожного атрибута: його ім'я, тип і властивості за умовчанням.

Наприклад:

  name  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. деяке конкретне значення, яке використовується за замовчуванням.

2. Зв'язок документа з певним DTD

Щоб зв'язати документ з певним DTD, необхідно на початку тексту документа вказати елемент Оголошення Типу Документа.

В залежності від місця розташування DTD, Оголошення Типу Документа може бути двох видів:

  • Внутрішнє підмножина DTD

Набір оголошень DTD міститься в самому тексті документа. Наприклад:

   ]>    ]> 
  • Зовнішнє підмножина DTD

Набір оголошень DTD розташовується в окремому текстовому файлі з розширенням. Dtd У цьому випадку посилання на файл можна зробити через публічний ідентифікатор і (або) через системний ідентифікатор. Наприклад:

    "Http://www.w3.org/TR/html4/strict.dtd"> 


3. Приклад

Приклад дуже простого XML DTD, що описує список людей:

  (  person *  )  >   (  name, birthdate?, gender?, socialsecuritynumber?  )  >   (  # PCDATA  )  >   (  # PCDATA  )  >   (  # PCDATA  )  >   (  # PCDATA  )  > 

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

  1. Елемент містить будь-яке число елементів . Знак <*> означає що можливо 0, 1 або більше елементів всередині елемента .
  2. Елемент містить елементи , , і . Знак означає що елемент необов'язковий. Елемент не містить , що означає що елемент обов'язково повинен містити елемент .
  3. Елемент містить дані.
  4. Елемент містить дані.
  5. Елемент містить дані.
  6. Елемент містить дані.

Приклад XML-документа, що використовує цей DTD:

  version  =  "1.0"  encoding  =  "UTF-8"  ?>     >   >   >  Fred Bloggs   >   >  27/11/2008   >   >  Male   >   >  1234567890   >   >   >