Основи використання xml-схем для визначення елементів
Використовуйте для визначення структури XML-документів XML-схеми замість DTD
Ashvin Radiya. Президент і Головний Технічний Керівник, AvantSoft, Inc.
Vibha Dixit. Виконавчий Директор, AvantSoft, Inc.
XML-схема має більш потужними можливостями, ніж DTD. Для ілюстрації переваг використання механізму XML-схем в перших трьох лістингах порівнюються різні способи подання елементів. У лістингу 1 представлена витяг з XML-документа. У лістингу 2 показані два елементи, оголошені в синтаксисі DTD, а в лістингу 3 представлений синтаксис, відповідний 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-схеми дозволяє розрізняти визначення з одним і тим же ім'ям за допомогою визначення різних просторів імен.
Лістинг 4: Цільове і вихідне простору імен
Малюнок 1: Простори назв для лістингу 4
Лістинг 5: Безліч вихідних просторів імен, імпорт простору імен
Лістинг 6: Використання безлічі простору імен з безлічі схем
Малюнок 2: Простори назв для лістингу 5 та 6
визначення елементів
Ухвалою елемента полягає у визначенні його імені і моделі контенту. У XML-схемі модель контенту елемента визначається його типом. Отже, елементи в XML-документі можуть мати тільки значення, які підходять типам, визначеним у його схемі.
прості типи
Специфікація XML-схеми визначає кілька простих типів для значень, як показано в Таблиці 2 -предопределенние прості типи значень.
Тип елемента може бути простим або комплексним (складним). Елемент простого типу не може містити інші елементи або атрибути. Комплексний тип може створювати ефект вбудовування елементів в інші елементи або може асоціювати атрибути з елементом. До цього моменту ми використовували тільки приклади з простими типами, визначеними користувачем (див. ProductCode). У специфікацію XML-схеми також включені зумовлені прості типи (див. Вставку Прості типи). Зумовлений простий тип обмежує значення по їх базового типу. Наприклад, значенням визначеного простого типу ProductCode є підмножина значень базового типу string.
Прості, чи не вкладені елементи мають простий тип
Елемент, який не містить атрибутів або інших елементів може бути віднесений до простого типу, зумовленої або певного користувачем, такому як string. integer. decimal. time. ProductCode і т.п.
Лістинг 7: Деякі прості типи елементів
Елементи з атрибутами повинні мати комплексний тип
Тепер спробуємо додати до простого елементу price з лістингу 7 атрибут currency. Ви не зможете цього зробити, так як елемент простого типу не може мати атрибутів. Якщо ви хочете додати атрибут, вам необхідно визначити price як елемент комплексного типу. У прикладі з лістингу 8. ми визначаємо, так званий анонімний тип. в якому комплексному типу не дається явного імені. Іншими словами, атрибут name елемента complexType не визначений.
Лістинг 8: Елемент комплексного типу
Елементи, які містять вкладені елементи повинні мати комплексний тип
Таблиця 1: Порівняння комплексних типів даних в DTD і XML-схемі
XML-документ
Лістинг 9: Комплексний тип, що складається з глобальних простих типів
Лістинг 10: Приховування BookType як локального типу
Вираз складних обмежень для елементів
XML-схема пропонує велику гнучкість, ніж DTD при вираженні обмежень для моделі контенту елементів. На найпростішому рівні, такому як в DTD, ви можете асоціювати з елементом атрибути, а також вказати, що в ньому може з'являтися послідовність з тільки одного (1), нуля або більше (*), або одного або більше (+) елементів із заданого набору елементів. У XML-схемі можна висловити додаткові обмеження, використовуючи для цієї мети, наприклад, атрибути minOccurs і maxOccurs для елемента element і елементи choice. group і all.
Лістинг 11: Вираз обмежень для типів елементів
У лістингу 11 тег Title є опціональним по відношенню до тегу Book (таке ж правило можна задати і в DTD). Однак тут також йдеться про те, що в елементі Book повинен бути хоча б один і не більше двох елементів Author. Значним атрибутів minOccurs і maxOccurs тега element за замовчуванням є 1. Елемент choice вказує на те, що може з'явитися тільки один із зазначених дочірніх елементів. Інший елемент all визначає, що всі дочірні елементи можуть з'являтися тільки один раз, разом і в будь-якому порядку, або не з'являвся зовсім. У лістингу 12 оголошується, що обидва тега Title і Author повинні з'являтися в Book в будь-якому порядку, або не з'являвся взагалі. Подібні обмеження складно виразити за допомогою DTD.
Лістинг 12: Покажчик того, що у елемента повинні бути визначені всі типи
Підбиття підсумків
В даному документі ми розкрили за допомогою простих прикладів найбільш фундаментальні концепції, необхідні для визначення структури елементів за допомогою XML-схеми. Доступно також безліч інших потужних механізмів:
Додаткову інформацію по XML-схемами можна отримати з документації на сайтах W3C (Див. Ресурси по темі) і dW XML zone. Тепер, коли специфікація XML-схеми отримала підтвердження в якості кандидата на рекомендацію W3C, ви без сумніву можете використовувати її в повній мірі.