Шпаргалка по DTD .
DTD – Один із способів формалізованого опису схеми документа XML , зробленого мовою, зрозумілою програмі-аналізатору
В даний час йде відмова від використання DTD на користь XSD (XML Schema Definition ), по ряду причин:
- DTD використовує відмінний від XML синтаксису.
- Відсутня типізація вузлів.
- Відсутня підтримка просторів імен.
Тим не менш, цей спосіб ще широко застосовується оскільки є більш простим і зручним для опису нескладних схем документів.
КОНСТРУКЦІЇ DTD
Опис схеми складається з оголошень розмітки ( markup declaration ), що починаються з пари символів “ ” далі йде одне із слів:
- ELEMENT (Вказує, що оголошується елемент )
- ATTLIST (список атрибутів )
- ENTITY (сутність )
- NOTATION (позначення )
оголошення розмітки закінчується “ > ”
ОГОЛОШЕННЯ ТИПУ ЕЛЕМЕНТУ
(має бути описаний кожен елемент документа)
Вміст:
- EMPTY
– порожній (наприклад
) - ANY - будь-який вміст (зустрічається рідко)
- (#PCDATA) – лише символьні дані
- (список імен вкладених елементів ч.з. кому)
– вкладені елементи мають слідувати у документі у тому порядку, в якому вони перераховані в оголошенні. Оголошується лише один рівень вкладеності. Елементи можна групувати дужками.
Використання роздільника “| ” між елементами вказує, що є один із розділених елементів.
Після елементів або дужок:- “? ” - зустрічається 0 або 1 раз
- “* ” - 0 або кілька разів
- “+ ” - 1 або кілька разів
ОГОЛОШЕННЯ АТРИБУТІВ
Атрибути оголошуються після оголошення елемента. Усі атрибути одного елемента оголошуються одразу, одним списком.
Для кожного атрибута записується його ім'я, тип та ознака обов'язковості.
Типи атрибутів:
- CDATA – (Character set of data ) рядок символів
- Список значень атрибуту в дужках, перелік чз “|”
- ID – унікальний ідентифікатор
- IDREF – ідентифікатор, що містить одне із значень атрибуту ID , ісп як посилання на ін елементи
- IDREFS – ідентифікатор, що містить набір значень атрибуту типу ID , перерахованих через пробіл, так само ісп як посилання відразу на кілька елементів.
- ENTITY - Ім'я сутності, що не перевіряється аналізатором ( оголошені в тому ж описіDTD )
- ENTITIES - Імена не перевіряються аналізатором сутностей.
- NMTOKEN – слово, що містить лише символи, які застосовуються в іменах ( імена інших елементів або атрибутів, наприклад, щоб посилатися на них)
- NMTOKENS – слова, перелічені через прогалини
- NOTATION - Позначення ( позначення, розшифровані в описіDTD)
- NOTATIONS – список нотацій
ознака обов'язковості:
- Значення атрибуту за замовчуванням– вказується в лапках і означає, що атрибут необов'язковий.
- # REQUIRED– атрибут треба обов'язково записувати у елементі.
- # IMPLIED– атрибут необов'язковий, він не має значення за замовчуванням.
- # FIXED- У атрибута є тільки одне значення, кіт записується відразу через пропуск.
При використанні простору імен треба завжди вказувати уточнене ( QName), а чи не локальне ім'я.
Атрибути не входять у простір стандартних імен.
Атрибути “ xml:lang ” та “ xml:space ” також повинен бути оголошений у DTD у разі їх застосування
ОГОЛОШЕННЯ СУТНОСТЕЙ
(починаються з “&”, а закінчуються “;”)
Внутрішні сутності- Задаються при оголошенні сутності.
- Можна застосовувати далі в самому DTD нижче за оголошення.
Зовнішні сутності– містяться в окремому файлі або вбудовані у програму-аналізатор.
Параметризовані сутності– ісп тільки всередині опису DTD
Сутності діляться на розбираемые( parsed ) і не розбираються ( unparsed ). Розбираються представляє собою фрагмент документа XML або цілий документ та підлягають обробці програмою-аналізатором після підстановки. Після підстановки розбирання сутність стає частиною XML документа.
Двійковий програмний код, креслення, зображення та ін. не треба обробляти засобами XML , Для цього сутність треба оголосити не розбирається. Для цього в кінці оголошення сутності робиться позначка “ NDATA ” та вказується позначення ( notation ) об'єкта, що вставляється.
ПОПЕРЕДЖЕНІ СУТНІСТЬ У XML
ОГОЛОШЕННЯ ПОЗНАЧЕННЯ ( NOTATION)
Оголошуються подібно до сутностей, також можуть бути внутрішніми і зовнішніми.
Внутрішня
Зовнішня
SYSTEM | PUBLIC - в даному випадкурівнозначні т.к. у public не обов'язково загальновідоме посилання.
РОЗМІЩЕННЯ DTD
Або в окремому файлі “ *.dtd ” вказавши його ім'я у лапках у другій частині прологу DOCTYPE або включити опис безпосередньо в другу частину прологу, уклавши його в квадратні дужки.
]>
Використовуйте для визначення структури XML-документів XML-схеми замість DTD
XML-схема має більше потужними можливостяминіж DTD. Для ілюстрації переваг використання механізму XML-схем у перших трьох лістингах порівнюються різні способиподання елементів. Наведена витримка з XML-документа. У показані два елементи, оголошені в синтаксисі DTD, а представлений синтаксис, відповідний XML-схемі. Зверніть увагу, що синтаксис у Лістингу 3 подібний до синтаксису XML. При використанні схеми валідуючий парсер може виконати перевірку, чи є елемент InvoiceNo позитивним цілим числом, і чи складається ProductID із заданого набору символів (шість цифр і однієї літери від A до Z). Парсер, що обробляє DTD-визначення, може лише підтвердити, що ці елементи є рядками.
Лістинг 1: Фрагмент документа XML
Лістинг 2: Фрагмент DTD, що описує елементи з Лістингу 1
Лістинг 3: Фрагмент XML-схеми, який описує елементи з Лістингу 1
Використання просторів імен у XML-схемі
Обмеження DTD
Незважаючи на те, що DTD служать розробникам SGML і HTML як механізм опису структурованої інформаціїось уже протягом 20-ти років, DTD мають деякі обмеження в порівнянні з XML-схемами.
Згідно DTD елементможе бути представлений одним із трьох способів:
- Текстовий рядок
- Текстовий рядок, змішаний з іншим дочірнім елементом
- Набір дочірніх елементів
DTD не має синтаксису XML і пропонує лише обмежену підтримку для типів та просторів імен.
При спільній роботі одна сторона може обробляти документи інших сторін, і різні сторони можуть представляти свої елементи даних по-різному. Більше того, в окремому документі їм може знадобитися незалежно один від одного посилатися на елементи з однаковим ім'ям, створені різними сторонами. Використання XML-схеми дозволяє розрізняти визначення з тим самим ім'ям за допомогою визначення різних просторів імен.
Така схема XML визначає набір нових імен, таких як імена елементів, типів, атрибутів, груп атрибутів, чиї визначення та оголошення описані у схемі. В імена визначаються як InvoiceNo, ProductID та ProductCode.
Імена, визначені у схемі належать так званому цільового простору імен. Саме собою простір імен є фіксованим, довільним ім'ям, яке має відповідати синтаксису URL. Наприклад, простір імен для схеми, представленої в , можна задати так: http://www.SampleStore.com/Account .
Синтаксис оголошення простору імен іноді може спантеличити. Оголошення починається з http:// , проте воно не посилається на файл із описом схеми. Насправді, посилання http://www.SampleStore.com/Account взагалі не веде на жодний файл, а тільки на призначене ім'я.
Визначення та оголошення у схемі можуть посилатися на імена, які можуть належати іншим просторам імен. У цій статті ми посилаємось на такі простори імен як на вихідні простори імен. У кожній схемі може бути визначено один цільовий простір імен та можливо безліч вихідних просторів імен. Взагалі, кожне ім'я у заданій схемі належить певному простору імен. Імена простору імен можуть бути досить довгими, проте їх можна скоротити за допомогою синтаксису оголошення xmlns у документі XML-схеми. Всі ці концепції проілюстровані у .
Лістинг 4: Цільовий та вихідний простір імен
У XML-схемі, представленій з простором імен targetNamespace є http://www.SampleStore.com/Account , воно містить імена InvoiceNo , ProductID і ProductCode . Імена schema , element , simpleType , pattern , string і positive-integer належать вихідному простору імен http://www.w3.org/1999/XMLSchema , яке скорочується як xsd шляхом оголошення xmlns . У псевдонімі xsd немає нічого особливого, можна вибрати інше ім'я. Для зручності та простоти в частині статті, що залишилася, ми будемо використовувати префікс xsd для посилання на простір імен http://www.w3.org/1999/XMLSchema , пропускаючи уточнення xsd в деяких частинах коду. У нашому прикладі targetNamespace також є одним з вихідних просторів імен, оскільки ім'я ProductCode використовується у визначенні інших імен.
Малюнок 1: Простір імен для Лістингу 4
Лістинг 5: Безліч вихідних просторів імен, імпорт простору імен
Визначення елементів
Визначенням елемента полягає у визначенні його імені та моделі контенту. У схемі XML модель контенту елемента визначається його типом. Отже, елементи в XML-документі можуть мати лише значення, які підходять до типів, визначених у його схемі.
Прості типи
Специфікація XML-схеми визначає кілька простих типів для значень, як показано в Таблиці 2 -передбачені прості типи значень.
Тип елемента може бути простим чи комплексним (складним). Елемент простого типуне може містити інших елементів або атрибутів. Комплексний тип може створювати ефект вбудовування елементів в інші елементи, або може асоціювати атрибути з елементом. До цього моменту ми використовували лише приклади з простими типами, визначеними користувачем (див. ProductCode). У специфікацію XML-схеми також включені прості типи визначені (див. вставку ). Зумовлений простий типобмежує значення за їх базовим типом. Наприклад, значенням зумовленого простого типу ProductCode є підмножина значень базового типу string.
Прості, не вкладені елементи мають простий тип
Елемент, який не містить атрибутів або інших елементів, може бути віднесений до простого типу, визначеного або визначеного користувачем, такого як string , integer , decimal , time , ProductCode і т.п.
Лістинг 7: Деякі прості типи елементів
Елементи з атрибутами мають комплексний тип
Тепер спробуємо додати до простого елемента price з атрибут currency. Ви не зможете цього зробити, оскільки елемент простого типу не може мати атрибутів. Якщо ви бажаєте додати атрибут, вам необхідно визначити price як елемент комплексного типу. У прикладі з , ми визначаємо, так званий анонімний тип, У якому комплексному типу не дається явного імені. Інакше кажучи, атрибут name елемента complexType не визначено.
Лістинг 8: Елемент комплексного типу
Елементи, що містять вкладені елементи, повинні мати комплексний тип.
У XML-документі елемент можуть бути вкладені інші елементи. Ця вимога виражається безпосередньо в DTD. XML-схема натомість визначає елемент та його тип, який може містити оголошення інших елементів та атрибутів. Приклад наведено у .
Таблиця 1: Порівняння комплексних типів даних у DTD та XML-схемі
XML-документ
DTD
XML-схема
Лістинг 10: Приховування BookType як локального типу
Вираз складних обмежень для елементів
XML-схема пропонує більшу гнучкість, ніж DTD при вираженні обмежень моделі контенту елементів. На найпростішому рівні, такому як у DTD, ви можете асоціювати з елементом атрибути, а також вказати, що в ньому може з'являтися послідовність лише з одного (1), нуля або більше (*), або одного або більше (+) елементів із заданого набір елементів. У XML-схемі можна висловити додаткові обмеження, використовуючи цієї мети, наприклад, атрибути minOccurs і maxOccurs для елемента element і елементи choice , group і all .
Лістинг 11: Вираз обмежень для типів елементів
У тег Title є опціональним по відношенню до тега Book (таке саме правило можна задати і в DTD). Однак тут також говориться, що в елементі Book повинен бути хоча б один і не більше двох елементів Author. Значенням атрибутів minOccurs та maxOccurs тега element за замовчуванням є 1. Елемент choice вказує на те, що може з'явитися лише один із зазначених дочірніх елементів. Інший елемент all визначає, що всі дочірні елементи можуть з'являтися тільки один раз, разом і в будь-якому порядку, або зовсім не з'являтися. У оголошується, що обидва теги Title і Author повинні з'являтися в Book у будь-якому порядку, або не з'являтися взагалі. Подібні обмеження важко висловити за допомогою DTD.
Лістинг 12: Покажчик того, що елемент повинен мати всі типи.
Підбиття підсумків
У цьому документі ми розкрили за допомогою простих прикладів найбільш фундаментальні концепції, необхідні визначення структури елементів за допомогою XML-схеми. Доступно також безліч інших потужних механізмів:
- XML-схема містить всебічну підтримку для успадкування типів, дозволяючи повторно використовувати певні структури. Таке використання називають аспектами. Ви можете вивести нові типи, що представляють менше підмножини значень інших типів, наприклад, для визначення підмножини за перерахуванням, діапазоном або збігом з шаблоном. В одному з прикладів цієї статті тип ProductCode було визначено з використанням аспекту pattern. У підтипі також можна додати нові елементи та атрибути для базового типу.
- Декілька механізмів, що дозволяють контролювати загальне визначення підтипу або замінювати його у певному документі. Наприклад, можна вказати, що тип InvoiceType (тип номера інвойсу) не може містити підтипи, тобто ніхто не зможе визначити нову версію InvoiceType. Можна також задати, що в окремому контексті типу ProductCode не може бути заміщення підтипів.
- Крім використання підтипів, можна визначати еквівалентні типи, тобто значення одного типу може бути замінено значенням іншого.
- XML-схема забезпечує механізм для заміщення елемента або типу шляхом оголошення їх як абстрактних.
- Для більшої зручності можна позначити та задати імена групам атрибутів або елементів. Це дозволяє повторно використовувати їх у наступних зверненнях.
- XML-схема надає три елементи - appInfo, documentation і annotation - для використання коментарів, як людьми (documentation) так і додатками (appInfo)
- Ви можете виразити унікальні обмеження, що ґрунтуються на певних атрибутах дочірніх елементів.
Додаткову інформацію про XML-схеми можна отримати з документацій на сайтах W3C і dW XML zone. Тепер, коли специфікація XML-схеми отримала підтвердження як кандидата на рекомендацію W3C, ви, без сумніву, можете використовувати її в повній мірі.
У 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. Перша вказує на те, що елемент повинен бути порожнім (наприклад,
Послідовність дочірніх для поточного елемента об'єктів задається у вигляді списку розділених ком назв елементів. При цьому для того щоб вказати кількість повторень включень цих елементів можуть використовуватися символи +, *, ? :
У цьому прикладі вказується, що всередині елемента
Символ * у цьому прикладі вказує на те, що обумовлена послідовність внутрішніх елементів може бути повторена кілька разів або зовсім не використовуватися.
Якщо визначенні елемента вказується " змішане " вміст, тобто. текстові дані або набір елементів, необхідно спочатку вказати PCDATA, а потім розділений символом "|" Список елементів.
Приклад коректного XML- Документа:
]> ...Визначення атрибутів
Списки атрибутів елемента визначаються ключовим словом! ATTLIST. Усередині нього задаються назви атрибутів, типи їх значень та додаткові параметри. Наприклад, для елемента
У цьому прикладі для елемента articleвизначаються три атрибути: id, проі typeякі мають типи ID(ідентифікатор), CDATAта список можливих значень відповідно. Усього існує шість можливих типів значень атрибуту:
- CDATA- вмістом документа можуть бути будь-які символьні дані
- ID- Визначає унікальний ідентифікатор елемента в документі
- IDREF(IDREFS)- вказує, що значенням атрибута має виступати назва (або кілька таких назв, розділених пробілами у другому випадку) унікального ідентифікатора певного в цьому документі елемента
- ENTITY(ENTITIES) - значення атрибута має бути назвою (або списком назв, якщо використовується ENTITIES) компонента (макровизначення), визначеного у документі
- NMTOKEN (NMTOKENS) - вміст елемента може бути лише одне окреме слово (тобто цей параметр є обмеженим варіантом CDATA)
- Список допустимих значень визначається список значень, які може мати даний атрибут.
Також для визначення атрибута можна використовувати такі параметри:
- #REQUIRED- визначає обов'язковий атрибут, який має бути заданий у всіх елементах даного типу
- #IMPLIED- атрибут не є обов'язковим
- #FIXED"значення" - вказує, що атрибут повинен мати лише зазначене значення, проте саме визначення атрибута не є обов'язковим, але в процесі розбору його значення у будь-якому випадку буде передано програмі-аналізатору
- Значення - задає значення атрибуту за замовчуванням
Визначення компонентів (макровизначень)
Компонент (entity)є визначення, вміст яких може бути повторно використано в документі. В інших мовах програмування такі елементи називаються макровизначення. Створюються DTD- компоненти за допомогою інструкції !ENTITY:
Програма-аналізатор, переглядаючи насамперед вміст області DTD- ухвал, опрацює цю інструкцію і при подальшому розборі документа буде використовувати вміст DTD- компонента там, де буде зустрічатися його назва. Тобто. тепер у документі ми можемо використовувати вираз &hello; , яке буде замінено на рядок " Ми раді вітати Вас"
У загальному випадку, усередині DTDможна задати три типи макровизначень:
Внутрішні макровизначення - призначені визначення строкової константи, з допомогою можна організовувати посилання часто змінювану інформацію, роблячи документ читальнішим. Внутрішні компоненти включаються до документа за допомогою амперсанта &
У XMLіснує п'ять встановлених внутрішніх символьних констант:
- < - Символ "<"
- > - Символ ">"
- & - Символ "&"
- " - Символ апострофа """
- " - символ подвійної лапки """
Зовнішні макровизначення - Вказують на вміст зовнішнього файлу, причому цим вмістом можуть бути як текстові, так і двійкові дані. У першому випадку в місці використання макросу будуть вставлені текстові рядки, у другому – бінарні дані, які аналізатором не розглядаються та використовуються зовнішніми програмами.
Макровизначення правил - макровизначення параметрів можуть використовуватися тільки всередині області DTD та позначаються спеціальним символом % , що вставляється перед назвою макросу. При цьому вміст компонента буде поміщений безпосередньо в текст DTD- правила
Наприклад, для наступного фрагмента документа:
можна використовувати більш коротку форму запису:
Макровизначення часто використовуються для опису параметрів у правилах атрибутів. У цьому випадку з'являється можливість використовувати однакові визначення атрибутів для різних елементів:
Типізація даних
Досить часто під час створення XML- елемента розробнику потрібно визначити, дані якого типу можуть використовуватися як його вміст. Тобто. якщо ми визначаємо елемент
Якщо як програма на стороні клієнта використовується верифікуючий XML-процесор, то інформацію про тип можна передавати за допомогою спеціально створеного для цього атрибуту елемента, що має відповідне DTD- Визначення. У процесі аналізу програма-аналізатор передасть значення цього атрибуту клієнтському додатку, який зможе використовувати цю інформацію належним чином. Наприклад, щоб вказати, що вміст елемента має бути довгим цілим, можна використовувати наступне DTD- Визначення:
Задавши атрибуту значення за промовчанням LONGі визначивши його як FIXED, ми дозволили цим програмі-клієнту отримати необхідну інформацію про тип вмісту даного елемента, і тепер вона може самостійно визначити відповідність типу цього вмісту вказаному в DTD- Визначення.
Ось приклад XML- документа, в якому визначаються та використовуються кілька елементів з різними типами даних:
...Як видно з прикладу, механізм створення елементів документа при цьому не змінився. Вся необхідна для перевірки типів даних інформація закладена для визначення елементів усередині блоку 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 у документі може виглядати так:
Рецепт однозначно визначається ідентифікатором 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 в РНР, і все виявляється напрочуд просто.
Головний письменник з питань технологій
Вам хтось надіслав електронною поштою файл DTD, і ви не знаєте, як його відкрити? Можливо, ви знайшли файл DTD на вашому комп'ютері і вас зацікавило, що це файл? Windows може сказати вам, що ви не можете відкрити його, або, у гіршому випадку, ви можете зіткнутися з відповідним повідомленням про помилку, пов'язану з файлом DTD.
До того, як ви зможете відкрити файл DTD, вам необхідно з'ясувати, який вид файлу відноситься розширення файлу DTD.
Tip:Неправильний DTD файл з'єднання errors може бути симптомом інших підданих ідентифікацій з вами в операційній системі Windows. Ці неправильні навантаження можуть також створювати поєднані симптоми так само, як високі Windows startups, комп'ютери freezes, і інші PC performance issues. Там,наскільки висока відповідь на те, що ви скануєте свою Windows Registry для вvalid file asociations й інші питання пов'язані з fragmented Registry.
Відповідь:
Файли DTD мають файли даних, який переважно асоційований з DesignTools 2D Design (TechSoft UK Limited).
Файли DTD також асоційовані з ArcView UNIX Hyperhelp Supporting File (ESRI), SGML Document Definition File та FileViewPro.
Інші типи файлів можуть також використовувати розширення файлу DTD. Якщо вам відомі будь-які інші формати файлів, які використовують розширення DTD-файлу, будь ласка, зв'яжіться з нами , щоб ми змогли відповідним чином оновити нашу інформацію.
Як відкрити файл DTD:
Найшвидший і легкий спосібвідкрити свій файл DTD - це двічі клацнути мишею. В даному випадку система Windowsсама вибере необхідну програмудля відкриття файлу DTD.
У випадку, якщо ваш файл DTD не відкривається, ймовірно, що на вашому ПК не встановлена необхідна прикладна програмадля перегляду або редагування файлів із розширеннями DTD.
Якщо ваш ПК відкриває файл DTD, але в неправильній програмі, вам потрібно змінити налаштування асоціації файлів у вашому реєстрі Windows. Іншими словами, Windows асоціює розширення файлів DTD з неправильною програмою.
Встановити необов'язкові продукти – FileViewPro (Solvusoft) | | | |
DTD Multipurpose Internet Mail Extensions (MIME):
- mime text/xml
DTD Інструмент аналізу файлів™
Ви не впевнені, який тип файлу DTD? Бажаєте отримати точну інформаціюпро файл, його творця і як його можна відкрити?
Тепер миттєво можна отримати всю необхідну інформацію про файл DTD!
Революційний DTD Інструмент аналізу файлів™ сканує, аналізує та повідомляє детальну інформаціюпро файл DTD. Наш алгоритм (очікується видача патенту) швидко проаналізує файл і через кілька секунд надасть докладну інформацію в наочному форматі, що легко читається.†
Вже через кілька секунд ви точно дізнаєтеся тип вашого файлу DTD, додаток, зіставлений з файлом, ім'я файлу користувача, статус захисту файлу та іншу корисну інформацію.
Щоб почати безкоштовний аналіз файлу, просто перетягніть файл DTD всередину пунктирної лініїнижче або натисніть «Переглянути мій комп'ютер» та виберіть файл. Звіт про аналіз файлу DTD буде показаний внизу прямо у вікні браузера.
Перетягніть файл DTD сюди для початку аналізу
Переглянути мій комп'ютер »
Будь ласка, також перевірте мій файл на віруси
Ваш файл аналізується... будь ласка, зачекайте.