Нативное хранение 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.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →