Открыть сервисСервис

Нативное хранение XML

Нативное хранение XML (англ. native XML storage) — это способ хранения документов в формате XML (Extensible Markup Language) в специализированных базах данных (нативных XML-базах данных, NXD) или в расширениях реляционных СУБД, при котором внутренняя структура документа сохраняется в соответствии с его иерархией, а не преобразуется в таблицы, строки или BLOB-объекты (двоичные большие объекты). Основное отличие нативного хранения от традиционных реляционных подходов заключается в том, что система оперирует XML-документом как единым целым, сохраняя его разметку, атрибуты, вложенность элементов и порядок следования узлов (узлы — структурные единицы XML-документа: корень, элементы, атрибуты, текстовые данные, комментарии).

История

Первые нативные XML-базы данных появились в конце 1990-х годов, когда XML стал активно использоваться для обмена данными между различными информационными системами. Реляционные СУБД того времени плохо справлялись с обработкой иерархических и полуструктурированных данных, что потребовало создания специализированных решений.

В 1999 году была опубликована спецификация XML Query (XQuery) — языка запросов для XML-документов, которая стала основой для нативных XML-БД. В 2000-х годах такие системы, как eXist-db, BaseX, Sedna (последняя разрабатывалась в Институте системного программирования РАН), получили распространение в академической среде и в промышленности. Одновременно реляционные СУБД (Oracle Database, Microsoft SQL Server, PostgreSQL, IBM Db2) начали внедрять поддержку нативного хранения XML в виде специальных типов данных (например, XML в Oracle или XML в SQL Server).

В 2010-х годах нативные XML-БД постепенно уступили часть рынка NoSQL-решениям (документоориентированным базам данных, таким как MongoDB), но сохранили свою нишу в задачах, где требуется полная поддержка XML-схем, пространств имён, XSLT-трансформаций и строгой верификации документов.

Основные характеристики

Нативное хранение XML базируется на следующих ключевых принципах:

  • Иерархическая модель данных: документ представляется в виде дерева узлов, где каждый узел может содержать дочерние элементы, атрибуты и текстовое содержимое. Эта модель соответствует структуре XML-документа.
  • Сохранение порядка: в отличие от реляционного подхода, где ключи могут быть произвольными, нативные системы сохраняют физический порядок элементов и атрибутов внутри узла.
  • Виртуальная (логическая) структуризация: запросы формулируются на языках XPath, XQuery или XSLT, которые оперируют путями и узлами, а не строками и столбцами.
  • Автономность документов: каждый XML-документ может иметь свою собственную структуру и схему (DTD, XSD), необязательно совпадающую со схемами других документов.
  • Поддержка пространств имён: система корректно обрабатывает XML-документы с разными пространствами имён (xmlns).

Классификация нативных XML-баз данных

По способу хранения

  • Чисто нативные (NXD): вся информация хранится в виде XML-документов (например, в файловых системах или на специализированных дисках). Примеры: eXist-db, BaseX, Sedna.
  • Гибридные: реляционная СУБД, расширенная нативным типом данных XML. Примеры: Oracle Database (тип XMLType), Microsoft SQL Server (тип xml), PostgreSQL (тип xml).

По способу индексации

  • Индексация на основе документа: система хранит XML-документы как цельные текстовые строки (например, CLOB — character large object) и создаёт полнотекстовые индексы для быстрого поиска по их содержимому.
  • Индексация на основе узлов: документ разбивается на внутренние структуры (узлы), которые индексируются (например, с помощью B-деревьев или инвертированных индексов). Это позволяет выполнять сложные запросы XPath без полного сканирования документа.

По производительности

  • С низкими накладными расходами (lightweight): предназначены для хранения небольших и средних XML-документов (до нескольких мегабайт), быстрые в операциях чтения/записи. Пример: BaseX.
  • Промышленного уровня: поддерживают транзакции ACID (атомарность, согласованность, изоляция, долговечность), кластеризацию, репликацию и многопользовательский доступ. Пример: MarkLogic корпорация MarkLogic не ведёт деятельность в РФ как иностранное юридическое лицо, не является иноагентом и не признана нежелательной; продукт не сертифицирован для использования в госорганах РФ).

Устройство и принципы работы

Хранение данных

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

  • Модель DOM (Document Object Model): документ загружается в оперативную память как дерево узлов. Эффективно для небольших документов, но требует много памяти.
  • Модель SAX (Simple API for XML): потоковая обработка — документ разбирается последовательно без построения полного дерева. Применяется для чтения больших файлов (сотни мегабайт и более).
  • Гибридные форматы: система комбинирует оба подхода, храня часть данных в памяти, часть — на диске.

Индексация

Для ускорения запросов применяются различные типы индексов:

  • Индексы путей: запоминают частоту и положение узлов по их XPath-путям (например, /книга/автор).
  • Индексы значений: индексируют текстовые значения элементов и атрибутов (например, точное совпадение или поиск по регулярным выражениям).
  • Индексы структур: позволяют искать документы, содержащие определённые вложенности.
  • Полнотекстовые индексы: для поиска по всему содержимому документа.

Обработка запросов

Запросы к нативным XML-хранилищам формулируются на языках:

  • XPath 1.0/2.0/3.0 — язык путей для навигации по дереву документа.
  • XQuery — более мощный язык, включающий XPath и позволяющий выполнять объединения, агрегации, сортировку и трансформации.
  • XSLT 2.0/3.0 — язык преобразования XML-документов в другие форматы (HTML, текст, другой XML).

Реляционные СУБД с нативным типом XML дополнительно поддерживают SQL-расширения: например, в PostgreSQL функция xpath() извлекает фрагменты XML по заданному XPath-выражению; в Oracle Database — XMLQuery, XMLTable, XMLExists.

Применение

Сфера нативного хранения XML охватывает задачи, требующие соблюдения стандартов XML:

  • Документооборот и архивация: хранение юридически значимых электронных документов (например, XML-формат судебных решений, бухгалтерская отчётность XBRL, электронные счета-фактуры ФНС РФ — формат XML).
  • Издательское дело: хранение книг, статей и других публикаций в формате DocBook, TEI или JATS.
  • Научные данные: обмен данными между лабораториями (CML для химии, SBML для системной биологии, FITS для астрономии).
  • Интеграция систем: хранение XML-схем и сообщений в корпоративных шинах данных (ESB).
  • Веб-сервисы: обработка SOAP-сообщений, хранение WSDL-документов (Web Services Description Language).
  • Геоинформационные системы: хранение данных в формате GML (Geography Markup Language).

Примеры использования в России

  • ФНС России: подача налоговых деклараций (например, форма 3-НДФЛ) и электронных больничных осуществляется в формате XML.
  • Портал госуслуг: обмен данными между ведомствами (СМЭВ) использует XML-документы с привязкой к схемам XSD.
  • Архивные учреждения: хранение описей дел и метаданных в форматах XML, совместимых с международными стандартами (EAD, EAC-CPF).

Преимущества и недостатки

Преимущества

  • Сохранение структуры: информация не теряет своего иерархического контекста при хранении, что критично для документов с глубокими вложениями.
  • Гибкость: можно хранить документы, не соответствующие единой схеме (например, старые записи без схемы).
  • Поддержка стандартов: полная реализация XPath, XQuery, XSLT, пространств имён и DTD/XSD.
  • Поиск по содержимому: точное индексирование текстовых значений и путей.

Недостатки

  • Производительность при большом объёме данных: нативные БД могут уступать реляционным по скорости операций с большими объёмами (сотни гигабайт) из-за иерархической индексации.
  • Сложные соединения: выполнение эквивалентов SQL-соединений (JOIN) в XQuery часто менее эффективно, чем в реляционных СУБД.
  • Обучение специалистов: требуется знание XML-технологий (XPath, XQuery), что редко встречается на рынке.
  • Ограниченная интеграция: многие прикладные системы рассчитаны на работу с реляционными базами данных.

Критика

Нативное хранение XML подвергалось критике за то, что в большинстве случаев XML-документы вполне укладываются в реляционную модель при условии правильного проектирования схемы (т. н. «shredding» — разбиение на строки). В ответ на это разработчики реляционных СУБД (Oracle, SQL Server) добавили специальные типы данных, которые позволяют сочетать гибкость XML с производительностью реляционных систем. В то же время в чисто нативных системах (eXist-db, BaseX) были реализованы механизмы шардирования и репликации, частично решающие проблемы масштабирования.

См. также

  • XML-база данных
  • XQuery
  • XSLT
  • Документоориентированная база данных
  • NoSQL
  • СУБД
  • XML-парсер

Источники

  • Meier, W. eXist: A NoSQL Document Database and Application Platform. — O'Reilly Media, 2014.
  • Kay, M. XSLT 2.0 and XPath 2.0 Programmer's Reference. — Wiley, 2007.
  • Melton, J., Buxton, S. Querying XML: XQuery, XPath, and SQL/XML in Context. — Morgan Kaufmann, 2006.
  • ISO/IEC 13250:2003 Topic Maps — XML syntax.
  • W3C XML Standard (XML 1.0 Fifth Edition, 2008).
  • Документация Oracle Database 19c по типу данных XMLType.
  • Документация PostgreSQL 16 по типу данных xml.
  • Бурков, А.В. Хранение XML-документов в СУБД: учебное пособие. — М.: Машиностроение, 2012.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru