Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
01.03.2016
Размер:
358.4 Кб
Скачать

9.2. Правила створення xml-документа

Особливістю XML-документів є наявність встановлених строгих правил, яким повинен XML-документ: Специфікація XML вимагає, щоб парсер відбраковував будь-який XML-документ, в якому не витримано основних правил. Створені ці правила навмисно, щоб обійти неоднозначність, що виникає в погано структурованих HTML-документах, недбала розмітка яких приймається більшістю парсерів.

Парсер - це частина програмного коду, яка намагається прочитати документ і інтерпретувати його вміст.

В загальному випадку XML-документи повинні задовольняти наступним вимогам:

  1. Кожний відкриваючий тег, що визначає деяку частину даних в документі, обов'язково повинен супроводитися закриваючим (тобто, на відміну від HTML, не можна опускати закриваючі тэги).

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

  3. В XML враховується регістр символів.

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

  5. Кожний XML-документ повинен мати унікальний кореневий елемент. В нашому прикладі таким елементом є елемент <address>.

  6. Всі значення атрибутів, що використовуються у визначенні тэгов, повинні бути укладений в лапки.

Якщо XML-документ не порушує приведені вище правила, то він називається формально-правильним.

9.3. Аналіз xml-документів

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

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

Прикладом XML-аналізатора може служити вбудований в Microsoft Internet Explorer версії 5.0 XML-аналізатор MSXML. Він дозволяє читати дані з XML-файлу, обробляти їх, генерувати дерево елементів, відображати дані з використанням стильових таблиць XSL, а також, використовуючи DOM, представляти всі елементи даних у вигляді об'єктів.

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

  • DTD-визначення (Document Type Definition – Визначення Типу Документа). DTD визначає елементи, які можуть з'являтися в XML-документі, порядок, в якому вони можуть з'являтися, як вони можуть бути вкладені один в одного і інші основні деталі структури XML-документа. DTD є частиною початкової специфікації XML і вони дуже схожі на DTD в SGML;.

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

Якщо XML-документ створюється і пересилається з використанням DTD-описів або схем (Schemas), то він називається валідним (правильним). XML-документ, якій відповідає правилам опису даних, але не мають DTD або схеми називається правильно-форматованим. Неправильними є XML-документи, в яких не дотримуються синтаксичних правил, визначених у специфікації XML.

Рис. . Перевірка документа XML на основі DTD або Schemas

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

В правилах DTD описуються елементи і їх допустимий вміст, атрибути і їх допустимі значення. Наприклад, при описі за допомогою DTD повинен бути заданий тип документа, задані елементи і їх допустимі атрибути:

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

В DTD для XML використовуються наступні типи правил:

  • правила для елементів і їх атрибутів;

  • опису категорій (макроозначень);

  • опис форматів бінарних даних.

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

DTD дозволяє вам задати основну структуру XML-документа.

<!-- address.dtd -->

<!ELEMENT address (name, street, city, state, postal-code)>

<!ELEMENT name (title? first-name, last-name)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT first-name (#PCDATA)>

<!ELEMENT last-name (#PCDATA)>

<!ELEMENT street (#PCDATA)>

<!ELEMENT city (#PCDATA)>

<!ELEMENT state (#PCDATA)>

<!ELEMENT postal-code (#PCDATA)>

Цей DTD визначає всі елементи, використовувані в прикладі документа. Воно визначає три основні речі:

Елемент <address> містить <name>, <street>, <city>, <state> і <postal-code>. Всі ці елементи повинні бути присутніми і саме в такому порядку.

Елемент <name> містить необов'язковий елемент <title> (знак питання означає, що <title> є необов'язковим), за яким слідує елемент <first-name> і елемент <last-name>.

Всі інші елементи містять текст. (#PCDATA позначає розбирані символьні дані; ви не можете включати інші елементи в ці елементи.)

Хоча DTD простий, він прояснює, які комбінації елементів є допустимими. Документ адреси, яка має елемент <postal-code> перед елементом <state>, не є правильним, як і документ, який не має елементу <last-name>.

Символи в DTD. Є декілька символів, використовуваних в DTD для індикації того, як часто (або коли) що-небудь може з'являтися в XML-документі:

  • Кома показує список обов’язкових елементів.

  • Знак питання показує, що елемент є необов'язковим; він може з'являтися один раз або не з'являтися взагалі.

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

  • Зірочка показує, що елемент може з'являтися скільки завгодно раз, включаючи нуль.

  • Вертикальна межа показує список варіантів; ви можете вибрати тільки один елемент із списку.

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

  • Визначити, які атрибути є обов'язковими

  • Визначити значення за умовчанням для даного атрибуту

  • Перерахувати допустимі значення для даного атрибуту

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

Схеми XML мають декілька переваг в порівнянні з DTD:

  • Схеми XML використовують синтаксис XML. Іншими словами, схема XML є XML-документом. Це означає, що ви можете обробляти схему так само, як і будь-який інший документ. Наприклад, ви можете написати таблицю стилів XSLT, яка перетворить схему XML Web-форму разом з автоматичною генерацією коду JavaScript, який перевірятиме дані у міру їх введення.

  • Схеми XML підтримують типи даних. Хоча DTD виконує підтримку типів даних, воно розглядає ці типи даних тільки з погляду публікації. Схеми XML підтримують всі початкові типи даних DTD (такі, як ID і посилання ID). Вони також підтримують цілі і дійсні числа, дати і часи, рядки, URL і інші типи даних, корисні для обробки і перевірки даних.

  • Схеми XML є розширюваними. Окрім типів даних, визначених в специфікації XML schema, ви можете також створювати власні типи і можете створювати типи-спадкоємці на базі інших типів даних.

  • Схеми XML мають могутніші вирази. Наприклад, за допомогою схем XML ви можете визначити, що будь-яке значення атрибуту <state> не може бути довше двох символів або що будь-яке значення елементу <postal-code> повинно відповідати регулярному виразу [0-9]{5}(-[0-9]{4})?.

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

При описі за допомогою схем файл опису граматики XML в самому найпростішому випадку може бути виглядати так:

<?xml version="1.0" encoding="Windows-1251"?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <AttributeType name="id" required="no dt":type="string"/> <ElementType name="title dt":type="string"> </ElementType> <ElementType name="part"> <attribute type="id"/> <element type="title"/> </ElementType> <Element Type name="picture dt":type="string"></ElementType> <ElementType name="article"> <element type="part"/> <element type="picture"/> </ElementType> <ElementType name="Book"> <element type="article"/></ElementType> </Schema>

В даній схемі документа визначається головний документ Book, який містить елементи article. Елемент article містить елементи part і picture. Для елемента part описаний атрибут id, якою повинен бути типу string і є необов'язковим. Якщо при перевірці на основі схем або DTD виявлена помилка, то в програму або броузер повідомляється і її типі, місці і коді. Використовування схем правил, дозволяє задати практично будь-яку граматику, яка піддається формалізованій обробці. Відзначу, що і схеми даних можна побудувати в програмі, тобто ми дістаємо можливість генерації схеми мови і виконання автоматизовану синтаксичну і семантичну перевірку документів XML на їх основі.