Топ питань
Часова шкала
Чат
Перспективи
Document Type Definition
З Вікіпедії, вільної енциклопедії
Remove ads
Визначення Типу Документа (англ. 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.
Remove ads
Підключення 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">
Remove ads
Опис схеми документа
Узагальнити
Перспектива
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-listingsENUMERATION— задає список можливих альтернатив значень.
Існують такі властивості за умовчуванням:
IMPLIED— значення атрибута вказувати не обов'язково;REQUIRED— значення атрибута обов'язково повинно бути зазначено;FIXED— значення цього атрибута задано як константа в DTD і в документі не може бути змінено;- деяке конкретне значення, яке використовується за умовчанням.
Remove ads
Визначення сутності
Визначення типів документа (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">
Remove ads
Приклад
Узагальнити
Перспектива
Приклад дуже простого 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>
Remove ads
Див. також
Посилання
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads