Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник_Палагута.doc
Скачиваний:
10
Добавлен:
13.11.2019
Размер:
6.6 Mб
Скачать

9.3. Опис шаблону документа dtd

У прологовій частині XML – документа може знаходитися опис шаблону документа або посилання на файл, у якому такий опис зберігається. Опис шаблону документа DTD (Document Type Definition) визначає структуру документа, містить відомості про набір XML – тегів розмітки, що використовуються документом. У DTD визначається структура та взаємовідносини тегів розмітки, що описують дані у документі.

У DTD визначається кореневий елемент, елементи верхнього рівня, дочірні елементи.

Структура документа описується таким чином:

<!DOCTYPE кореневий_елемент [

<!ELEMENT кореневий_елемент (список_елементів_першого_рівня)>

<!ELEMENT елемент_першого_рівня (список_елементів_другого_рівня)>

. . .

<!ELEMENT елемент_нижчого_рівня (тип_елемента)>

. . .

]>

Тип умісту елемента можна визначити як #PCDATA – рядкові дані. PCDATA (від англ. parsed character data) визначає, що вміст елементу є розібраними символьними даними, або частіше використовується термін «текстовий уміст» (text content) або «текстовий вузол» (text node). При введенні значення елементу типу PCDATA можна використовувати будь-які символи, крім зарезервованих < і &. Для того, щоб вставити ці символи у значення елементу або інші спеціальні символи, як і у мові HTML, використовуються управляючі послідовності.

Наприклад, такий запис буде коректним:

<company> Procter & Gamble </company>

Існують також такі типи елементів, як EMPTY – порожній і ANY – будь-який. Тип EMPTY визначає, що у елемента відсутній вузол-нащадок і він не містить будь-якої інформації. Прикладом елементу типу EMPTY може бути зображення, оскільки воно само по собі не містить жодних даних. Наприклад, можна оголосити порожній елемент таким чином:

<!ELEMENT img EMPTY>

У XML – документі цей елемент може використовуватися, наприклад, так:

<img src=”image.jpg”>

Тип ANY практично знімає усі обмеження на вміст елемента, тому застосовується рідко.

Елемент можна оголосити як такий, що має змішаний уміст. Такі елементи можуть вміщувати символьні данні та будь-яку комбінацію елементів.

DTD надає можливість визначити порядок і число вкладень для дочірніх елементів. У списку вкладених елементів комою розділяються елементи, які лише один раз можуть слідувати за елементом вищого рівня. Вибір одного з декількох елементів задається символом |.

Наприклад, запис

<!ELEMENT dessert (icecream | cake)>

означає, що для елемента dessert може бути визначеним елемент нижчого рівня icecream або елемент cake, однак не обидва разом.

Припустимим є також об’єднання послідовностей і вибору елементів. Це виконується за допомогою груп, які створюються застосуванням круглих дужок. Наприклад, таке оголошення елементу

<!ELEMENT student (name | (first_name, last_name)>

означає, що елемент може включати елемент нижчого рівня name або два елементи first_name і last_name.

Число вкладень елемента визначається за допомогою символу - індикатору вкладень, який вводиться після імені елемента у списку вкладених елементів.

Індикатор вкладень

Опис

+

елемент може з’являтися будь-яке число раз, однак не менше одного разу

*

елемент є необов’язковим, якщо використовується, то може з’являтися будь-яке число раз

?

елемент є необов’язковим, якщо використовується, то може з’являтися тільки один раз

Наприклад, запис

<!ELEMENT book (chapter+)>

означає що у елементі book може бути декілька елементів chapter, однак не менше одного елемента.

Елементи можуть мати атрибути, які призначені для надання додаткової інформації про елементи. Оголошення атрибутів у DTD задає список атрибутів для елемента за допомогою тегу:

<!ATTLIST елемент атрибут тип_даних значення_за_замовчуванням>

Як тип даних найчастіше визначається тип - рядкові дані за допомогою ключового слова CDATA, тобто дані які можуть включати будь-які символи крім символів <, >, &,  і  (для них слід використовувати посилання на сутності – escape-послідовності).

Існують також так звані перелічуючи типи атрибутів. Їх використання надає змогу на місці типу атрибуту ввести у круглих дужках перелік припустимих значень.

<!ATTLIST phone type (Home | Work) #IMPLIED >

У наведеному прикладі атрибут type елемента phone може приймати значення Home або Work.

Можна також використовувати тип даних ID, який вказує, що значення атрибута є унікальним, однозначно ідентифікує елемент. У елемента може бути лише один атрибут типу ID.

DTD надає можливість використовувати такі значення атрибутів за замовчуванням:

#IMPLIED – якщо атрибут у елементі відсутній, то додаток, що використовує XML – документ, самостійно визначає значення атрибуту;

#REQUIRED – атрибут для елемента обов’язково повинен бути визначений;

#FIXED – значення атрибуту є константою, яку неможна змінити.

Приклади оголошення атрибутів:

<!ATTLIST x y CDATA #REQUIRED > - для елемента x оголошується обов’язковий атрибут y

<!ATTLIST Tel Code_T CDATA #FIXED 062> - для елемента Tel оголошується атрибут Code_T з фіксованим значенням 062

У основній частині документа привласнення значень атрибутів виконується у розчиняючих тегах відповідних елементів. Значення атрибутів завжди визначаються у лапках, причому можна використовувати як одинарні, так і подвійні лапки.

Документ, у якому містяться відомості про студентів, з вбудованим DTD має вигляд:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE students [

<!ELEMENT students (student+)>

<!ELEMENT student (name, birthday)>

<!ATTLIST student number CDATA #REQUIRED>

<!ELEMENT name (first_name, last_name)>

<!ELEMENT first_name (#PCDATA)>

<!ELEMENT last_name (#PCDATA)>

<!ELEMENT birthday (#PCDATA)>

] >

<students>

<student number="1">

<name><first_name>Іван</first_name>

<last_name>Петренко</last_name></name>

<birthday>8 грудня 1990 року</birthday></student>

<student number="2">

<name><first_name>Марія</first_name>

<last_name>Смірнова</last_name></name>

<birthday>20 липня 1989 року</birthday></student>

</students>

Рисунок 9.4 – Вид XML – документа з вбудованим DTD у вікні браузера ІЕ

DTD також можна помістити у окремий файл з розширенням dtd і посилатися на нього в документі. Такі DTD стають доступними багатьом XML –документам, що дає змогу уніфікувати інформацію, що міститься у цих документах. Наприклад, можна створити DTD документа «Баланс підприємства» і при створенні балансів посилатися на це DTD. Для посилання на зовнішнє DTD у прологовій частині XML – документа слід визначити:

<!DOCTYPE кореневий_елемент SYSTEM файл_з_ DTD>

У розглянутому раніше прикладі вміст DTD можна помістити у файл ZDTD.dtd:

<!ELEMENT students (student+)>

<!ELEMENT student (name, birthday)>

<!ATTLIST student number CDATA #REQUIRED>

<!ELEMENT name (first_name, last_name)>

<!ELEMENT first_name (#PCDATA)>

<!ELEMENT last_name (#PCDATA)>

<!ELEMENT birthday (#PCDATA)>

Тоді власно XML – документ виглядатиме так:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE students SYSTEM "ZDTD.dtd" >

<students>

<student number="1">

<name><first_name>Іван</first_name>

<last_name>Петренко</last_name></name>

<birthday>8 грудня 1990 року</birthday></student>

<student number="2">

<name><first_name>Марія</first_name>

<last_name>Смірнова</last_name></name>

<birthday>20 липня 1989 року</birthday></student>

</students>