Що означає dtd document type definition. Мова XML - Documents Type Definitions (DTD). Оголошення атрибуту зі значенням

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

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

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

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

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

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

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

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

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

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

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

(DT | DD) +>

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

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

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

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

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

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

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

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

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

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

]> ]>

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

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

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

приклад

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

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

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

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

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

> > > Fred Bloggs > > 27/11/2008> > Male > > 1234567890> > >

Див. також


Wikimedia Foundation. 2010 .

Дивитись що таке "DTD" в інших словниках:

    DTD- , die in einer ASCII Datei (ASCII) abgelegte Eine DTD wird nach den Regeln der international anerkannten… … Universal-Lexikon

    DTD- May stand for: Contents 1 Media 2 Music 3 Sports 4 Technologies 4.1 Computing … Wikipedia

    DTD- steht für: Inhaltsverzeichnis 1 Medien 2 Music 3 Technologien 3.1 Computer 3.1.1 Spiele … Deutsch Wikipedia

    Dtd- steht für: Darwin Digital Television, eine australische Fernsehstation Delta Tau Delta, eine US amerikanische Studentorganisation Document Type Definition, siehe Dokumenttypdefinition … Deutsch Wikipedia

    DTD- (dē tē dēʹ) n. Набір правил для маркування документа в SGML. * * * … Universalium

    DTD- (document type definition) specification written in the Standard Generalized Markup Language andрозміщення інформації про формат окремого документа (Computers) … English contemporary dictionary

20. Мови опису cхем XML

DTD схема. Недоліки DTD схем. XDR схеми. Елементи та атрибути XDR схем.

Ідея створення власних тегів, що мають спеціальне значення та допомагають описати зміст документа, сама по собі просто чудова. Але якщо кожен користувач може створювати власні описи, яким чином їх розпізнавати? З цією метою специфікації XML для опису подібних "самодіяльних" тегів використовуються схеми. Вони необхідні для того, щоб:

    описати, що є розміткою;

    описати точно, що означає розмітка.

Найбільш відомими мовами опису схем є такі:

    DTD (Document Type Definition) - мова визначення типу документів, яка спочатку використовувалася як мова опису структури документа SGML.

    XDR (XML Data Reduced) – діалект схеми XML, розроблений Microsoft, який підтримувався в Internet Explorer 4 та 5 версій.

    XML Schema або XSD (мова визначення схем XML) – рекомендація консорціуму W3C з 2001 року.

Розглянемо докладніше перші з них. Третя мова опису схем розглядається у лабораторній роботі 11.

DTD схема

Схема DTD надає шаблон розмітки документа, в якому вказуються наявність, порядок прямування та розташування елементів та їх атрибутів у документі XML.

В рамках DTD модель вмісту XML документа можна описати так:

Кожен елемент документа може мати один із типів:

Синтаксис

Коментар

Містить лише текстові дані

Інші елементи

Містить лише дочірні елементи

Змішане

Містить комбінацію текстових даних та дочірніх елементів

Нічого не містить

Атрибути, що знаходяться всередині тегів документа, описуються окремо за допомогою синтаксису:

ім'я_елемента ім'я_атрибута1 (тип) значення_за замовчуванням

…………………………………………………………………………………...

ім'я_елемента ім'я_атрибутаN (тип) значення_за замовчуванням >

При цьому атрибут DTD може мати один з трьох типів:

  • Марковані атрибут

    Атрибут з перерахуванням

Крім типу атрибуту можна також ставити і його модальність:

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

number CDATA #REQUIRED

date CDATA #REQUIRED

від CDATA #FIXED

status CDATA #IMPLIED>

Якщо цей елемент містить атрибути з перерахуванням, їх опис може виглядати, наприклад, таким чином:

number ID #REQUIRED

від CDATA #REQUIRED

alert (low | normal | urgent) "normal">

Марковані атрибути елемента можуть бути чотирьох типів:

І, нарешті, DTD можна використовувати такі індикатори входження послідовностей:

Символ

приклад

Опис

Послідовне використання елементів списку

Використовується один із членів списку

Використовується один і лише один елемент

Необов'язкове використання (0 або 1 раз)

Використовується один або кілька разів

Використовується нуль або кілька разів

Як приклад наведемо DTD схему, що описує структуру електронної поштової скриньки:

Вихідний XML документ, що задовольняє цю схему, може виглядати, наприклад, так:

[email protected]

[email protected]

Re:

[email protected]

[email protected]

Remind

[email protected]

Remind me про meeting.

Зверніть увагу на 2-у сходинку документа, в якій вказується зовнішнє посиланняфайл, що містить DTD схему.

В принципі DTD допускає два способи використання в XML документі.

Оголошення внутрішньої схеми:

Оголошення зовнішньої схеми:

На закінчення вкажемо на такі недоліки DTD схем:

    Не є екземплярами XML. Потрібно вивчення зовсім іншої мови.

    Не надають контролю над типами даних, крім найпростіших текстових даних.

    Не є екземплярами XML, тому їх не можна легко розширити або перетворити на інші мови розмітки – HTML або DHTML.

    Не підтримують простори імен XML.

XDR схема

XML-Data – повне ім'ямови опису схем, запропонованого Майкрософт, а XML-DataReduced - це "частина" повної рекомендації. Схема XDR - це екземпляр XML, тобто. відповідає всім синтаксичним правилам та стандартам XML.

Реалізуючи перевірки даних на рівні документа за допомогою схеми, програми, що генерують та приймають транзакції, можна оптимізувати для забезпечення максимальної швидкодії. Відповідність полів та правильність записів перевіряються на рівні екземплярів XML.

Кореневим елементом у схемі XDR завжди є елемент Schema:

name="ім'я_схеми" xmlns="urn:schemas-microsoft-com:xml-data"

xmlns:dt="urn:schemas-microsoft-com:datatypes">

<-- Объявления других элементов -->

Елемент ElementType має синтаксис:

content="(empty | texOnly | eltOnly | mixed)">

dt:type "datatype"

model="(open | closed)"

order="(one | seq | many)"

Елемент ElementType може мати такі атрибути:

Ім'я атрибуту

Опис

Ім'я елемента

Тип даних елемента

Може приймати значення:

Open – дозволено використовуватиелементи, не визначені у схемі

Closed – заборонено використовувати елементи, не визначені у схемі

Порядок проходження дочірніх елементів в екземплярі XML. Допустимі значення:

one – передбачається наявність одного документа

many – будь-яка кількість елементів у будь-якому порядку

seq – елементи вказуються в заданому порядку.

як дочірні елементи для ElementType можна використовувати такі:

Ім'я елемента

Опис

Оголошує дочірній елемент

Забезпечує опис елемента ElementType

Забезпечує тип даних елемента ElementType

Визначає порядок проходження елементів

Визначає атрибут

Визначає відомості про дочірньому елементі AttributeType

Для оголошення атрибутів використовується синтаксис:

default="default-value"

dt:type="primitive-type"

dt:values="enumerated-values"

required="(yes|no)"

В свою чергу, елемент AttributeType може мати атрибути:

Значення

Опис

Значення за замовчуванням

Один з таких типів:

entity, entities, enumeration, id, idref, nmtoken, nmtokens, notation, string

Допустимі значення

Ім'я атрибуту

Вказує на обов'язкову наявність атрибуту в описі

Синтаксис для опису елемента attribute виглядає так:

default="default-value"

type="attribute-type"

а його можливі значення можуть бути такими:

Значення

Анотація: У цьому розділі описуються загальні принципи написання Визначення типу документа. Також розглянуті основні недоліки та особливості DTD.

Навіщо потрібне DTD.

Створюючи XML документ, розробник сам вирішує: як назвати теги, в якому порядку вони будуть слідувати, які дані будуть записані в тому чи іншому елементі, чи будуть елементи атрибути чи ні і багато іншого. Без формального опису структури документа цим документом може скористатися лише його розробник. Якщо розроблений XML документ призначений для передачі в зовнішній світ, наприклад партнерам по бізнесу, і якщо до того ж планується отримувати у відповідь документи, написані в тому ж форматі без визначення типів документів (Document Type Definition, DTD) не обійтися. Це пов'язано з тим, що для того, щоб обидві сторони могли розуміти отриману інформацію елементи та атрибути в документах, повинні вживатися всіма сторонами однаково. Визначення типу документа вносять строгість і точність до правил написання правильно оформлених документів XML. Збережені на початку файлу XML або зовнішнім чином як файл *.DTD , визначення типів документів описують інформаційну структуру документа. У DTD перераховуються можливі імена елементів, визначаються наявні атрибути кожного типу елементів і описується вкладеність елементів.

XML використовується як засіб для опису граматики інших мов. І таким чином розробляючи деяку мову для написання XML документів у тій чи іншій галузі, нам доведеться розробити словник даної галузі діяльності. DTD за визначенням містять всю інформацію, яка може з'явитися в XML документі. Все, що входить до проекту, має бути включено до DTD . Таким чином, DTD описи по суті і є таким словником. Сучасний світ змінюється досить динамічно тому заздалегідь не відомо яка інформація може знадобитися в подальшому і для того, щоб не довелося часто змінювати структуру документів словник, що зазвичай розробляється, включає в себе все що може знадобитися для конкретних видів бізнесу або промисловості. Це дозволяє використовувати визначення DTD як аналіз і проектування. Додатки XML взаємодіють один з одним на основі словників, які вони розуміють, тому визначення DTD допомагає зрозуміти, що може описати програму .

Інше застосування DTD це перевірка написаного XML документа на коректність. Правильно оформлені документи, написані відповідно до всіх правил, описаних у специфікації XML, не можуть бути перевірені щодо помилок. Пропущені помилки можуть спричинити пошкодження програми обробки документів, або введення в систему невірних даних. Але якщо документ посилається на визначення DTD , то, використовуючи аналізатор, що перевіряє на допустимість, можна перевірити, чи є в нашому документі помилки. Аналізатор зажадає DTD і переконається, що документ відповідає описаним у ньому граматичним правилам. Аналізатор виявляє структурні помилки та помилки змісту, що набагато зменшує обсяг перевірок, що виконуються логікою програми.

Написання термінів DTD: загальні принципи.

Асоціація DTD із документом XML

Для зв'язування декларації DTD з екземпляром документа у версії XML 1.0 пропонується спеціальна декларація DOCTYPE. Вона має слідувати після декларації XML та передувати будь-яким елементам документа. Тим не менш, між деклараціями XML та DOCTYPE можуть бути коментарі та команди обробки.

Декларація DOCTYPE містить ключове слово DOCTYPE , за яким слідує ім'я кореневого елемента документа, а потім конструкція з деклараціями змісту. Перед роз'ясненням цього твердження розглянемо приклад розташування декларації DOCTYPE в екземплярі документа. Нижче наводяться перші три рядки документа XML:

..

Можна написати зовнішнє підмножина декларацій у окремому файлі DTD включити внутрішнє підмножина в тіло декларації DOCTYPE або зробити те й інше. В останньому випадку (змішування внутрішніх і зовнішніх DTD) у внутрішніх DTD можуть бути задані нові декларації або переписані ті, що містяться у зовнішніх (за визначенням специфікації XML аналізатори спочатку читають внутрішнє підмножина, і тому декларації, що містяться там, користуються пріоритетом).

Декларації XML можуть містити атрибут standalone, що приймає лише значення "yes" і "nо". Якщо значення атрибуту дорівнює yes, то зовнішні для екземпляра документа декларації не впливають на інформацію, що передається документом, що використовує його додатку. Значення no показує, що є зовнішні декларації зі значеннями, необхідні правильного описи змісту документа - наприклад конкретні значення за промовчанням. Насправді необов'язковий атрибут standalone використовується рідко. Наявність цього атрибуту зі значенням yes не гарантує відсутності зовнішніх залежностей будь-якого типу. Просто зовнішні залежності в цьому випадку не призведуть до помилки в документі, якщо не буде включено до обробки. Таким чином, в основному цей атрибут є знаком для аналізаторів та інших додатків, що показує, чи потрібно їм використовувати якийсь зовнішній зміст.

Блок внутрішньої декларації розмітки тега DOCTYPE складається з лівої квадратної дужки, списку декларацій та правої квадратної дужки:

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

Зовнішні DTD у деяких відносинах гнучкіші. У даному випадкуДекларація DOCTYPE складається з звичайного ключового слова та імені кореневого елемента, за яким слідує ще одне ключове слово SYSTEM або PUBLIC, що позначає джерело зовнішнього визначення DTD, а за ним - локалізація цього визначення. Якщо ключове слово SYSTEM , DTD зобов'язане безпосередньо і явно знаходиться за вказаною URL-адресою.

Якщо зовнішні DTD дуже часто переписуються, вони починають втрачати своє значення, а це ознака поганого початкового проекту.

Ключове слово PUBLIC призначене для добре відомих словників. Додаток, що аналізує документ із цього словника, повинен використовувати деяку стратегію пошуку відповідного DTD .

Стандарт XML 1.0 допускає у декларації PUBLIC наявність як публічного URI, так і системного ідентифікатора. Якщо додаток або аналізатор, що працює з документом, не можуть знайти DTD за ідентифікатором URI з ключовим словом PUBLIC , він повинен використовувати системний ідентифікатор.

Основні декларації розмітки

Допустимий у документі XML зміст визначається за допомогою чотирьох типів декларації розмітки в DTD. У наступній таблиці показані пов'язані з цими деклараціями ключові слова та їх значення:

Перші два типи пов'язані з інформацією, яку ми розраховуємо знайти в документі XML - елементами та атрибутами.

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

Нотації описують зміст, розроблений не мовою XML. Використовуються вони для того, щоб оголосити конкретний клас даних та пов'язати його із зовнішньою програмою. Ця зовнішня програма стає обробником оголошеного класу даних. Наприклад, зв'язавши з документом зображення у форматі JPEG, розробник бажає, щоб програма прийняла та візуалізувала двійкові дані у цьому форматі. Звісно, ​​у разі документ залежить від цього, який обробник є у системі, одержує документ. В інтересах портативності та переносимості деякі автори не наводять посилання на оброблювачі. У такому разі нотація перетворюється просто на механізм набору тексту.

У документах XML DTD визначає набір дійсних елементів, ідентифікує елементи, які можуть знаходитися в інших елементах, і визначає дійсні атрибути для кожного з них. Синтаксис DTD дуже своєрідний і від автора-розробника потрібні додаткові зусилля при створенні таких документів (складність DTD є однією з причин того, що використання SGML, що вимагає визначення DTD для будь-якого документа, не набуло такого поширення як, наприклад, HTML). Як уже зазначалося, у XML використовувати DTD не обов'язково - документи, створені без цих правил, будуть правильно оброблятися програмою-аналізатором, якщо вони відповідають основним вимогам синтаксису XML. Однак контроль за типами елементів та коректністю відносин між ними в цьому випадку повністю покладатиметься на автора документа. Доки граматика нашої нової мови не описана, її зможемо використовувати тільки ми, і для цього ми будемо змушені застосовувати спеціально розроблене програмне забезпечення, а не універсальні програми-аналізатори.

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

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

...

Усередині документа DTD-декларації включаються таким чином:

... ... ]> ...

У тому випадку, якщо використовуються одночасно внутрішні та зовнішні описи, то програмою-аналізатором спочатку розглядатимуться внутрішні, тобто. їхній пріоритет вищий. Під час перевірки документа XML-процесор спочатку шукає DTD всередині документа. Якщо правила всередині документа не визначені та не заданий атрибут standalone ="yes", то програма завантажить вказаний зовнішній файл та правила, що знаходяться в ньому, будуть зчитані звідти. Якщо ж атрибут standaloneмає значення "yes", використання зовнішніх DTD описів буде заборонено.

Визначення елемента

Елемент DTD визначається за допомогою дескриптора! ELEMENT, в якому вказується назва елемента та структура його вмісту.

Наприклад, для елемента можна визначити таке правило:

Ключове слово ELEMENT вказує, що цією інструкцією описуватиметься елемент XML. Усередині цієї інструкції задається назва елемента (flower) та тип його вмісту.

У визначенні елемента ми вказуємо спочатку назву елемента (flower), та був його модель вмісту - визначаємо, які інші елементи чи типи даних можуть усередині нього. В даному випадку вміст елемента flower визначатиметься за допомогою спеціального маркера PCDATA (що означає parseable character data – будь-яка інформація, з якою може працювати програма-аналізатор). Існує ще дві інструкції, що визначають тип вмісту EMPTY,ANY. Перша вказує на те, що елемент повинен бути порожнім (наприклад, ), друга - те що, що вміст елемента спеціально не описується.

Послідовність дочірніх для поточного елемента об'єктів задається у вигляді списку розділених ком назв елементів. При цьому для того щоб вказати кількість повторень включень цих елементів можуть використовуватися символи +, *, ? :

У цьому прикладі вказується, що всередині елемента повинні бути визначені елементи title, author і table-of-contents, причому елемент title обов'язковим елементомі може зустрічатися лише один раз, елемент author може зустрічатися кілька разів, а елемент table-of-contents є опціональним, тобто. може бути відсутнім. У тому випадку, якщо існує кілька можливих варіантів вмісту елемента, їх слід розділяти за допомогою символу "|" :

Символ * у цьому прикладі вказує на те, що послідовність внутрішніх елементів, що визначається, може бути повторена кілька разів або ж зовсім не використовуватися.

Якщо визначенні елемента вказується " змішане " вміст, тобто. текстові дані або набір елементів, необхідно спочатку вказати PCDATA, а потім розділений символом "|" Список елементів.

Приклад коректного документа XML:

]> ...

Marks avenue
12-12-12 46-23-62 [email protected]

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

Списки атрибутів елемента визначаються ключовим словом! ATTLIST. Усередині нього задаються назви атрибутів, типи їх значень та додаткові параметри. Наприклад, для елемента

можуть бути визначені такі атрибути:

У даному прикладідля елемента articleвизначаються три атрибути: id, aboutі type, які мають типи ID(ідентифікатор), CDATA та список можливих значень відповідно. Усього існує шість можливих типів значень атрибуту:

  • CDATA – вмістом документа можуть бути будь-які символьні дані
  • ID – визначає унікальний ідентифікатор елемента в документі
  • IDREF(IDREFS)- вказує, що значенням атрибута має бути назва (або кілька таких назв, розділених пробілами в другому випадку) унікального ідентифікатора певного в цьому документі елемента
  • ENTITY(ENTITIES) - значення атрибута має бути назвою (або списком назв, якщо використовується ENTITIES) компонента (макровизначення), визначеного в документі
  • NMTOKEN (NMTOKENS) - вміст елемента може бути лише одне окреме слово (тобто цей параметр є обмеженим варіантом CDATA)
  • Список допустимих значень визначається список значень, які може мати даний атрибут.

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

  • #REQUIRED - визначає обов'язковий атрибут, який має бути заданий у всіх елементах даного типу
  • #IMPLIED - атрибут не є обов'язковим
  • #FIXED "значення" - вказує, що атрибут повинен мати лише вказане значенняПроте саме визначення атрибуту не є обов'язковим, але в процесі розбору його значення в будь-якому випадку буде передано програмі-аналізатору.
  • Значення - задає значення атрибуту за замовчуванням

Визначення компонентів (макровизначень)

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

Програма-аналізатор, переглядаючи в першу чергу вміст області DTD-визначень, обробить цю інструкцію і при подальшому розборі документа використовуватиме вміст DTD-компонента в тому місці, де буде зустрічатися його назва. Тобто. тепер у документі ми можемо використовувати вираз, який буде замінено на рядок "Ми раді вітати Вас"

У загальному випадку, всередині DTD можна задати три типи макровизначень:

Внутрішні макровизначення- призначені визначення строкової константи, з допомогою можна організовувати посилання часто змінювану інформацію, роблячи документ читальнішим. Внутрішні компоненти включаються до документа за допомогою амперсанта &

У XML існує п'ять встановлених внутрішніх символьних констант:

  • < - символ "<"
  • > - символ ">"
  • & - символ "&"
  • " - символ апострофа ""
  • " - символ подвійної лапки " ""

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

Макровизначення правил- макровизначення параметрів можуть використовуватися тільки всередині області DTD та позначаються спеціальним символом %, що вставляється перед назвою макросу. При цьому вміст компонента буде розміщений безпосередньо в тексті DTD-правила

Наприклад, для наступного фрагмента документа:

можна використовувати більш коротку форму запису:

Макровизначення часто використовуються для опису параметрів у правилах атрибутів. У цьому випадку з'являється можливість використовувати однакові визначення атрибутів для різних елементів:

Типізація даних

Досить часто під час створення XML- елемента розробнику потрібно визначити, які типи можуть використовуватися як його вміст. Тобто. якщо ми визначаємо елемент 10.10.98, то хочемо бути впевненими, що в документі в цьому місці буде рядок, що представляє собою дату, а не число або довільну послідовність символів. Використовуючи типизацію даних, можна створювати елементи, значення яких можуть використовуватися, наприклад, як параметри SQL-запитів. Програма клієнт у разі має знати, якого типу даних належить поточне значення елемента й у разі відповідності формує SQL-запрос.

Якщо в якості програми на стороні клієнта використовується верифікуючий XML-процесор, інформацію про тип можна передавати за допомогою спеціально створеного для цього атрибуту елемента, що має відповідне DTD-визначення. У процесі аналізу програма-аналізатор передасть значення цього атрибуту клієнтському додатку, який зможе використовувати цю інформацію належним чином. Наприклад, щоб вказати, що вміст елемента має бути довгим цілим, можна використовувати наступне визначення DTD:

Задавши атрибуту значення за промовчанням LONG і визначивши його як FIXED, ми дозволили цим програмі-клієнту отримати необхідну інформацію про тип вмісту даного елемента, і тепер вона може самостійно визначити відповідність типу цього вмісту, зазначеному в DTD-визначенні.

Ось приклад XML-документа, в якому визначаються і використовуються кілька елементів з різними типами даних:

... 5 2 32.5 true 18346 34 нар. 28 до. ...

Як видно з прикладу, механізм створення елементів документа при цьому не змінився. Все необхідна для перевірки типів даних інформація закладена визначення елементів всередині блоку DTD.

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

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

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

DTD можна включити безпосередньо до документа XML, послатися на нього за URL або використовувати комбінацію цих двох способів. При безпосередньому включенні DTD до документа XML визначення DTD розташовується відразу після прологу:

Атрибут _ім'я_кореневого_елемента відповідає імені кореневого елемента в тегах, що містять весь документ XML. У секції "інших оголошень" знаходяться визначення елементів, атрибутів і т.д.

Можливо, ви хочете розмістити DTD в окремому файлі, щоб забезпечити модульну структуру програми. Давайте подивимося, як виглядає посилання зовнішній DTD в документі XML. Завдання вирішується однією простою командою:

Як і у випадку внутрішнього оголошення DTD, ім'я_кореневого_елемента має відповідати імені кореневого елемента в тегах, що містять весь документ XML. Атрибут SYSTEM вказує на те, що some_dtd.dtd знаходиться на локальному сервері. Втім, файл some_dtd.dtd також можна послатися за його абсолютного URL. Нарешті, у лапках вказується URL зовнішнього DTD, розташованого на локальному або віддаленому сервері.

Як створити DTD для лістингу 14.1? По-перше, ми збираємося створити у документі XML посилання зовнішній DTD. Як згадувалося в попередньому розділі, посилання на DTD виглядає так:

Повертаючись до лістингу 14.1, бачимо, що cookbook є ім'ям кореневого елемента, a cookbook.dtd - ім'ям DTD-файлу. Вміст DTD показаний у лістингу 14.2, а нижче наведені докладні описивсіх рядків.

Лістинг 14.2. DTD для лістингу 14.1 (cookbook.dtd)

] >

Що означає цей загадковий документ? Незважаючи на зовнішню складність, Насправді він досить простий. Давайте переберемо весь вміст лістингу 14.2:

Перед нами пролог XML, про який вже говорилося вище.

Третій рядок описує елемент XML, у разі - кореневий елемент cookbook. Після нього слідує слово recipe, укладене в круглі дужки. Це означає, що в теги cookbook полягає вкладений тег з ім'ям recipe. Знак + говорить про те, що в батьківських тегах cookbook знаходиться одна або кілька пар тегів recipe.

Четвертий рядок описує тег recipe. У ній повідомляється, що в тег recipe входять чотири вкладені теги: title, description, ingredients і process. Оскільки після імен тегів не вказуються ознаки повторення (див. наступний розділ), всередині тегів recipe повинна бути укладена одна пара кожного з перерахованих тегів.

Перед нами перше визначення тега, який містить вкладених тегів. Відповідно до визначення він містить #PCDATA, тобто довільні символьні дані, що не вважаються частиною розмітки.

Відповідно до визначення елемент ingredients містить один або кілька тегів з ім'ям ingredient. Зверніться до лістингу 14.1, і ви все зрозумієте.

Оскільки елемент ingredient відповідає окремому інгредієнту, логічно, що цей елемент містить прості символьні дані.

Елемент process містить один або кілька екземплярів елемента Step.

Елемент step, як і елемент ingredient, відповідає окремому пункту у списку більше високого рівня. Отже, він має містити символьні дані.

Зверніть увагу: елемент recipe у лістингу 14.1 містить атрибут. Цей атрибут, category, визначає загальну категорію, до якої належить рецепт – у наведеному прикладі це категорія «італійська кухня» (Italian). У визначенні ATTLIST вказується ім'я елемента, і ім'я атрибута. Крім того, віднесення кожного рецепта до певної категорії полегшує класифікацію, тому атрибут оголошується обов'язковим (#REQUIRED).

Останній рядок просто завершує визначення DTD. Визначення завжди має бути належним чином завершено, інакше буде помилка.

На завершення цього розділу я наведу зведення основних компонентів типового файлу DTD:

  • оголошення типів елементів;
  • оголошення атрибутів;
  • ID, IDREF та IDREFS;
  • оголошення сутностей.

Деякі з цих компонентів вже зустрічалися в описі лістингу 14.2. Далі кожен компонент буде більш докладно описаний.

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

Усі елементи, що використовуються в документі XML, повинні бути визначені в документі DTD. Ми вже зустрічалися з двома поширеними різновидами визначень: елемента, що містить інші елементи, і елемента, що містить символьні дані. Дане визначеннясвідчить, що елемент містить лише символьні дані:

Наступне визначення елемента process говорить про те, що він містить одно вкладений елемент з ім'ям step:

Втім, процеси з одного кроку зустрічаються досить рідко - швидше за все, кроків буде кілька. Щоб вказати, що елемент містить один або кілька екземплярів вкладеного елемента step, слід скористатися ознакою повторення:

Кількість вкладених елементів можна задати кількома способами. Повний списокоператорів елементів наведено у табл. 14.1.

Таблиця 14.1. Оператори елементів

Якщо елемент міститиме кілька вкладених елементів, їх слід перерахувати через кому у визначенні батьківського елемента:

Оскільки ознаки повторення не зазначені, кожен тег повинен зустрічатися рівно один раз.

Визначення елемента уточнюється за допомогою логічних операторів. Припустимо, ви працюєте з рецептами, які завжди входять макарони (pasta) з одним або декількома типами сиру (cheese) або м'яса (meat). У цьому випадку елемент ingredient визначається наступним чином:

Оскільки елемент pasta обов'язково повинен бути присутнім на елементі ingredient, він вказується з ознакою повторення +. Потім слідує або елемент cheese, або елемент meat; ми поділяємо альтернативи вертикальною рисою і укладаємо їх у круглі дужки зі знаком +, оскільки до рецепту завжди входить або одне, або інше.

Існують інші різновиди визначень елементів. Ми розглянули лише найпростіші випадки. Тим не менш, наведеного матеріалу цілком достатньо для розуміння прикладів, наведених у частині цього розділу, що залишилася.

Оголошення атрибутів

Атрибути елементів описують значення, пов'язані з елементами. Елементи XML, як і елементи HTMLможуть мати нуль, один або кілька атрибутів. Загальний синтаксис оголошення атрибутів виглядає так:

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

Просте оголошення атрибута вже зустрічалося нам у лістингу 14.2:

Проте, як видно з наведеного загального визначення, допускається одночасне оголошення кількох атрибутів. Допустимо, на додаток до атрибуту категорії ви хочете пов'язати з елементом recipe додатковий атрибут difficulty(складність приготування). Обидва атрибути оголошуються в одному списку:

Форматувати оголошення подібним чиномне обов'язково; проте, багаторядкові оголошення наочніше однорядкові. Крім того, оскільки обидва атрибути є обов'язковими, тег reci ре не може обмежитися яким-небудь одним атрибутом, він повинен включати обидва атрибути відразу. Наприклад, наступний тег вважатиметься невірним:

Чому? Тому що в ньому відсутній атрибут категорії. Правильний тегповинен містити обидва атрибути:

Особливі умови обробки атрибута описуються трьома прапорами, наведеними в табл. 14.2.

Таблиця 14.2. Прапори атрибутів

Типи атрибутів

Атрибут елемента може оголошуватися з певним типом. Типи атрибутів описані далі.

Атрибути CDATA

Найчастіше атрибути містять загальні символьні дані. Такі атрибути називають атрибутами CDATA. Наступний приклад вже зустрічався на початку цього розділу:

Атрибути ID, IDREF та IDREFS

Ідея однозначного представлення даних (наприклад, інформації про користувача або товар, що зберігається в базі даних) за допомогою ідентифікаторів неодноразово зустрічалася в попередніх розділах книги. Ідентифікатори також часто використовуються в XML, оскільки перехресні посилання між документами застосовуються не тільки в загальних завданняхобробки даних, але і в World Wide Web(гіперпосилання).

Ідентифікатори елементів надаються атрибуту ID. Допустимо, ви хочете пов'язати з кожним рецептом унікальний ідентифікатор. Відповідний фрагмент DTD може мати такий вигляд:

Після цього оголошення елемента recipe у документі може виглядати так:

Spaghetti alla Carbonara

Рецепт однозначно визначається ідентифікатором ital003. Слід пам'ятати, що атрибут redpe-id відноситься до типу ID, тому ital003 не може використовуватися як значення атрибуту recipe-id іншого елемента, інакше документ вважатиметься синтаксично неправильним. Тепер припустимо, що пізніше ви захотіли послатися на цей рецепт з іншого документа – скажімо, зі списку улюблених рецептів користувача. Саме тут у гру вступають перехресні посилання та атрибут IDREF. Атрибуту IDREF надається ідентифікатор, який використовується для посилань на елемент, - за аналогією з тим, як URL використовується для ідентифікації сторінки в гіперпосиланні. Розглянемо наступний фрагмент коду XML:

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

Перераховані атрибути

При оголошенні атрибута можна перерахувати всі допустимі значення, які приймає атрибут. У нашому прикладі це було б зручно, оскільки ви можете одразу визначити список допустимих категорій. Наведене вище оголошення записується в наступному вигляді:

Зверніть увагу: при використанні списків допустимих значень включати в оголошення тип CDATA не потрібно, оскільки всі ці значення відносяться до формату CDATA.

Перераховані атрибути зі значенням за промовчанням

Іноді зручно оголосити для атрибута значення за замовчуванням. Швидше за все, вам уже доводилося робити це раніше при побудові форм з списками, що розкриваються. Наприклад, якщо більшість рецептів у вашій кухонній книзі відноситься до італійської кухні, атрибут recipe часто ставиться до категорії Italian. У цьому випадку категорію Italian можна призначити за замовчуванням:

Якщо атрибут категорії не заданий явно, за умовчанням йому надається значення Italian.

Атрибути ENTITY та ENTITIES

Дані в документах XML не завжди є текстовими - документ може містити двійкову інформацію (наприклад, графіку). Такі дані можна посилатися за допомогою атрибута entity. Наприклад, в описі елемента description можна вказати атрибут recipePicture з графічним зображенням:

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

Атрибути NMTOKEN та NMTOKENS

Атрибути NMTOKEN є рядками із символів, що входять в обмежений набір. Оголошення атрибуту з типом NMTOKEN передбачає, що значення атрибуту відповідає встановленим обмеженням. Як правило, значення атрибуту NMTOKEN складається з одного слова:

Можна оголосити кілька атрибутів, замінивши NMTOKEN на NMTOKENS. Значення поділяються пробілами.

Оголошення сутностей

Оголошення сутності нагадує команду define у ​​деяких мовах програмування, включаючи РНР. Посилання на сутності коротко згадувалися в попередньому розділі «Знайомство із синтаксисом XML». Про всяк випадок нагадаю, що посилання на сутність використовується як заміна для іншого фрагмента змісту. У процесі обробки документа XML всі входження сутності замінюються змістом, який вона представляє. Існує два види сутностей: внутрішні та зовнішні.

Внутрішні сутності

Внутрішні сутності нагадують рядкові змінні, що зв'язують ім'я із фрагментом тексту. Наприклад, якщо ви хочете визначити ім'я для посилання на інформацію про авторські права, можна оголосити сутність такого виду:

У процесі обробки документа всі екземпляри &Соруright замінюються текстом «Copyright 2000 YourCompanyName. All Rights Reserved». Весь код XML в тексті, що замінює, обробляється так, ніби він був присутній у вихідному документі.

Внутрішні сутності зручні в ситуаціях, коли ви плануєте використовувати сутність відносно не велику кількістьдокументів XML. При велику кількість документів краще скористатися зовнішніми сутностями.

Зовнішні сутності

Зовнішні сутності використовуються для посилань зміст, що у іншому файлі. Сутності цього можуть містити текстову інформацію, але також можуть посилатися і двійкові дані (наприклад, графіку). Повернувшись до попереднього прикладу, припустимо, що ви вирішили зберегти інформацію про авторські права в окремому файлі, щоб спростити її редагування у майбутньому. Посилання на створений файл виглядає так:

Під час подальшої обробки документа XML всі посилання &Соруright замінюються вмістом документа copyright.xml. Весь код XML в тексті, що замінює, обробляється так, ніби він був присутній у вихідному документі.

Зовнішні сутності також зручно використовувати для посилань на графічні зображення. Наприклад, якщо ви хочете включити в документ XML графічний логотип, створіть зовнішню суть:

Ресурси, присвячені XML

Хоча наведеного вище матеріалу цілком достатньо для розуміння базової структуридокументів XML, даний описне є повним. Нижче наведено посилання на ресурси Інтернету, що містять більш детальну інформацію:

У частині розділу, що залишилася, розказано про те, як використовувати РНР для обробки документів XML. На перший погляд, завдання здається дуже складним (лексичний аналіз будь-яких документів будь-якого типу викликає чимало труднощів).

Але варто познайомитися з базовою стратегією роботи з XML в РНР, і все виявляється напрочуд просто.