Знайомство з природними базами даних XML
Практика обробки та зберігання XML вимагає створення нових типів програмних інструментальних засобів, одним з яких є "природні XML-бази даних" (надалі ми будемо користуватися скороченням NXD, Native XML Database). У цій статті описуються основні засади таких баз даних.
Природна база даних XML.
* Визначає (логічну) модель XML-документа - на відміну від даних, що містяться в цьому самому документі - і зберігає та витягує документи відповідно до цієї моделі. Як мінімум, модель повинна включати елементи, атрибути, PCDATA блоки, а також порядок документа. Прикладом таких моделей може бути модель даних XPath, XML Infoset, і навіть моделі, реалізовані з допомогою DOM чи подій SAX 1.0. * Документ XML виступає як основна одиниця (логічного) зберігання, також як рядок є основною одиницею (логічного) зберігання в теорії реляційних баз даних. * Не повинна мати в основі будь-якої конкретної фізичної моделі зберігання. Наприклад, вона може бути побудована на основі реляційної, ієрархічної або об'єктно-орієнтованої БД або використовувати закритий формат зберігання, такий як проіндексовані та стислі файли.
Якщо спробувати переформулювати це визначення коротше, то ми отримаємо такі три базові твердження.
1. База даних призначена для зберігання даних XML, а також всіх компонент XML-моделі. 2. Документи на вході та документи на виході. 3. NXD може бути реальної самостійної базою даних.
Як має бути зрозуміло з цього визначення, NXD насправді не є новою низькорівневою моделлю баз даних, і вони не покликані замінити вже існуючі бази даних. Це просто інструментарій, мета якого – допомогтирозробнику, забезпечуючи надійне зберігання та маніпулювання XML-документами.
Хоча не всі NXD повністю ідентичні, вони мають характерні риси, які ми і розглянемо нижче. Однак тут ми не обговорюватимемо конкретних продуктів; якщо вам буде цікаво скласти свою думку про них, ви можете звернутися до повного списку реалізацій XML баз даних, створеного Рональдом Буреттом (Ronald Bourret). Більшість софтверних компаній пропонують зараз продукти першого покоління, і лише небагато, потужніші компанії пропонують рішення наступного покоління. Модель NXD тільки розвивається і продовжуватиме розвиватися ще протягом кількох років. Таким чином, між існуючими реалізаціями є досить відчутні відмінності, тому твердження, сформульовані в наступних розділах, застосовні лише для більшості таких реалізацій, але не для всіх.
NXD зберігає XML-документи, як єдине ціле, і створить модель, подібну до XML або однієї з XML-технологій, наприклад Infoset або DOM. Ця модель включає довільні рівні вкладеності та складності, а також повну підтримку змішаних та слабоструктурованих даних. Ця модель автоматично відображається за допомогою NXD у базовий механізм зберігання. Це відображення забезпечить підтримку заданої XML-моделі даних. Зберігши дані, вам доведеться продовжувати використовувати інструментальні засоби NXD, якщо, звичайно, ви хочете побачити зручніше представлення даних. Наприклад, якщо ви використовуєте NXD поверх реляційної бази даних, доступ до даних безпосередньо за допомогою SQL може здатися не таким зручним, як ви могли очікувати. Причина очевидна – дані, які ви побачите, скоріше є моделлю XML-документа (наприклад, елементи та атрибути), ніж бізнес-сутностями, які представляють ці дані. Модель бізнес-сутностей існує вXML-документів, але не в рамках фізичної системи зберігання даних. Щоб працювати з даними, з ними слід працювати як з XML.
Якщо розробнику зручно працювати з XML-інструментарієм, таким як DOM, SAX, XPath і XSLT, можливо вони підійдуть і для роботи з NXD. База даних позбавляє всіх непотрібних деталей зберігання XML і залишає розробнику при побудові додатків свободу у використанні будь-яких XML-технологій.
NXD керує колекціями документів, дозволяючи вам вимагати та маніпулювати цими документами як безліччю. Це дуже схоже на реляційну концепцію таблиці. Відмінність NXD від концепції таблиць у тому, що не всі природні бази даних XML вимагають, щоб з колекцією була асоційована схема. Це означає, що ви можете зберігати будь-який XML-документ у колекції, незалежної від схеми. При цьому ви також можете складати запити на всі документи колекції. NXD із підтримкою таких можливостей називаються незалежними від схем.
Наявність таких незалежних від схеми колекцій документів надає деяку гнучкість базі даних, і навіть полегшує процес розробки додатків. На жаль, крім усього іншого, ця особливість завдає адміністраторам баз даних чимало клопоту через ризик слабкої цілісності даних. Тут доречна стара мудрість у тому, що кожної роботи потрібен відповідний інструмент. Якщо вам потрібна надійна структура схеми, то переконайтеся, що ви використовуєте NXD, що підтримує схеми, або знайдіть інший спосіб зберігання ваших XML-даних.
Деякі продукти мають вбудовану підтримку валідації з DTD, і лише не всі здатні працювати з колекціями документів, використовуючи власну мову схем. Швидше за все, у майбутньому W3C XML Schema буде використовуватися як спільна мова схем в NXD. Однак,зараз його підтримка дуже обмежена.
В даний час мовою запитів NXD є XPath. Для нормального функціонування мови запитів баз даних XPath злегка розширений. Так додано можливість побудови запитів до колекції документів. Однак, на жаль, XPath спочатку не був призначений для цієї галузі застосування і в деяких випадках його використання обмежене.
Найбільш очевидні обмеження накладають недоліки угруповання, сортування, перехресних об'єднань документів, а також недостатню підтримку типів даних. Через ці проблеми XPath слід застосовувати як частину більш повної мови. Так, щоб заповнити деякі прогалини, можна було б використовувати XSLT, проте зараз у розробці знаходиться XQuery - мова, більш орієнтована на бази даних. Деякі виробники вже почали використовувати прототип XQuery у своїх реалізаціях баз даних.
Для покращення обробки запитів NXD підтримують створення індексів для даних, що зберігаються в колекціях. Ці індекси можна використовувати, щоб значно підвищити швидкості виконання запитів. Деталі того, що можна індексувати і як ці індекси створювати, широко варіюються в різних продуктах, але більшість продуктів підтримують цю можливість в декількох формах.
Оновлення є слабкою ланкою сучасних NXD. Більшість програмних продуктів вимагають, щоб ви отримали документ, змінили його за допомогою свого улюбленого XML API, а потім повернули його в базу даних. Деякі програмні продукти мають власну спеціальну мову, яка дозволяє здійснювати оновлення на сервері; плюс ще парочка Open Source NXD підтримує XML: DB XUpdate для цієї ж мети. Швидше за все, ця проблема не вирішиться, поки XQuery не доповниться мовоюоновлення. До цього часу маніпулювання за допомогою DOM, ймовірно, буде найприйнятнішим методом оновлення.
Існує лише одна сувора вимога до будь-якої програми, що працює з NXD: програма повинна використовувати XML. Крім цього немає жодних інших обов'язкових правил, які регламентують який тип додатків можна чи не можна реалізовувати з NXD, і все-таки запропонувати деякі рекомендації має сенс. Взагалі, сильнішою стороною NXD є зберігання документ-орієнтованих даних (наприклад XHTML, або DocBook), даних, які мають дуже складну структуру з глибоким вкладенням, а також слабоструктурованих даних. Як правило, якщо дані представлені у форматі XML і при цьому "трохи нечітки" (на мою думку, прекрасний технічний термін), застосування NXD буде хорошим рішенням. NXD може зберігати будь-які типи XML-даних, але, ймовірно, це не найкращий інструментальний засіб при роботі з чим-небудь, подібним до системи бухгалтерського обліку, де дані дуже точно визначені і жорстко задані.
Перерахуємо деякі потенційні сфери застосування:
* Корпоративине інформаційні портали * Дані каталогів * Бази даних приватних виробництв * Зберігання медичної інформації * Системи управління документами * Журнали B2B-транзакцій * Персоналізаційні бази даних
Крім того, NXD - просто новий інструментальний засіб, і принесена їм користь визначатиметься творчим потенціалом розробників, які його використовують.
NXD не є панацеєю і, що точно, не претендують на те, щоб замінити існуючі системи баз даних. Це просто інші інструментальні засоби, які розробник може покласти до свого професійного багажу. Застосовані у потрібний момент, при відповіднихобставин, вони можуть принести значну користь. Якщо ви працюєте з великою кількістю XML-даних, які потрібно зберігати, NXD заслуговує на вашу увагу, і ви переконаєтеся, що це чудовий засіб для вирішення різних завдань.