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

SQL/XML

SQL/XML — это открытый стандарт, определяющий методы интеграции реляционных баз данных с языком разметки XML (Extensible Markup Language). Он позволяет обрабатывать XML-данные с помощью языка SQL, выполнять преобразование реляционных данных в XML-формат и обратно, а также выполнять запросы к XML-документам, хранящимся в базах данных. Стандарт является частью семейства стандартов языка SQL (ISO/IEC 9075).

История

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

Первая версия стандарта SQL/XML, известная как «SQL/XML:2003», была опубликована Международной организацией по стандартизации (ISO) в 2003 году как часть ISO/IEC 9075-14. Она вводила базовые типы данных для XML, функции для генерации XML из реляционных данных и операторы для запросов к XML-документам.

Последующие версии стандарта:

  • SQL/XML:2006 — расширение возможностей запросов, введение XQuery как встроенного языка.
  • SQL/XML:2008 — улучшение обработки XML-схем, исправления.
  • SQL/XML:2011 — добавление поддержки пространств имён, уточнение семантики.
  • SQL/XML:2016 (и далее) — дальнейшее уточнение, адаптация к новым возможностям ядра SQL (например, поддержка JSON), исправления.

Стандарт SQL/XML постоянно развивается параллельно с основным стандартом SQL, обеспечивая совместимость между различными системами управления базами данных (СУБД).

Основные компоненты

Стандарт SQL/XML определяет несколько ключевых компонентов, обеспечивающих взаимодействие между SQL и XML.

Типы данных XML

Стандарт вводит специальный тип данных, обычно называемый XML (или XMLType в некоторых реализациях, например, в Oracle). Этот тип может хранить:

  • Полные XML-документы.
  • XML-фрагменты (не обязательно имеющие один корневой элемент).
  • Последовательности XML-узлов (например, узлы элемента, текста, комментария).

Данные этого типа могут быть проверены на соответствие определённой XML-схеме (XSD) и могут индексироваться для ускорения запросов.

XML-функции

Стандарт определяет набор функций для создания, преобразования и извлечения XML-данных из реляционных таблиц.

  1. Генерация XML из реляционных данных:
  • XMLElement(name, ...) — создаёт XML-элемент с указанным именем.
  • XMLForest(...) — создаёт набор вложенных элементов, каждый из которых соответствует одному столбцу или выражению.
  • XMLAgg(...) — агрегирует строки в один XML-документ (аналог GROUP BY).
  • XMLConcat(...) — объединяет несколько XML-значений в один.
  • XMLAttributes(...) — добавляет атрибуты к элементу.
  1. Преобразование реляционных данных в XML-документ:
  • XMLQuery(...) — выполняет XQuery-запрос к XML-данным, хранящимся в столбце типа XML.
  • XMLTable(...) — преобразует XML-документ в реляционную таблицу (распарсить XML в строки и столбцы).
  • XMLExists(...) — проверяет, существует ли определённый XPath-путь в XML-документе.
  1. Манипуляции с XML:
  • XMLSerialize(...) — преобразует тип XML в строку или другой текстовый формат.
  • XMLCast(...) — преобразует значение типа XML в другой тип данных (например, число или строку).

Встраивание XQuery

Стандарт SQL/XML включает поддержку языка запросов XQuery. Это позволяет выполнять сложные запросы к XML-данным непосредственно из SQL-выражений. Например, запрос XMLQuery('for $x in /books/book where $x/author = "Толстой" return $x/title') возвращает список книг автора «Толстой» из XML-документа.

Применение

SQL/XML широко используется в следующих областях:

  • Обмен данными (B2B, EDI): Преобразование реляционных данных из ERP-систем в XML-форматы для передачи по электронным каналам (например, счета-фактуры, заказы, каталоги). Российские компании часто используют XML для взаимодействия с государственными информационными системами (например, ФНС, ЕГАИС).
  • Веб-сервисы (SOAP, REST): Обработка XML-запросов и генерация XML-ответов на серверной стороне. СУБД могут напрямую извлекать нужные данные и формировать XML-документ, избавляя прикладной код от этой задачи.
  • Управление контентом (CMS): Хранение и обработка XML-структур (например, Sitemap, RSS-ленты, XHTML-фрагменты) внутри базы данных.
  • Интеграция с системами управления документами (ECM): Хранение метаданных документов (реляционные поля) вместе с содержимым самих XML-документов (например, офисные форматы OpenXML — .docx, .xlsx используют внутренний XML).
  • Аналитика и отчёты: Генерация XML-отчётов, которые затем могут быть преобразованы с помощью XSLT в HTML, PDF или другие форматы.

Реализации в СУБД

Стандарт SQL/XML реализован во многих коммерческих и открытых СУБД, хотя степень поддержки может различаться.

СУБДТип данных XMLКлючевые возможностиПримечания
Oracle DatabaseXMLTypeXMLElement, XMLAgg, XMLQuery, XMLTable, XQueryНаиболее полная реализация. Поддерживает индексация XML-данных, проверка по XSD-схемам.
Microsoft SQL ServerxmlXML.value(), XML.query(), XML.exist(), XML.nodes() (через методы типа xml)Поддерживает XQuery, XPath, XSD-схемы. FOR XML для преобразования реляционных данных в XML.
PostgreSQLxmlXMLElement, XMLForest, XMLQuery, XMLTable, XPath-функции (xpath, xpath_exists)Реализация близка к стандарту. Поддерживается проверка по XSD.
IBM Db2XMLXMLElement, XMLAgg, XMLQuery, XMLTable, XQueryВстроенная поддержка, возможность индексации.
MySQLJSON (функции XML ограничены)Функции ExtractValue(), UpdateXML()Поддержка XML минимальна. Основной акцент — на JSON.

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

Пусть имеется реляционная таблица employees со столбцами id, name, position и salary.

``sql -- Преобразование данных в XML-документ SELECT XMLElement("employees", XMLAgg( XMLElement("employee", XMLForest(e.id AS "id", e.name AS "name", e.position AS "position") ) ) ) FROM employees e; ``

Результат (XML-документ):

``xml <employees> <employee> <id>1</id> <name>Иван Петров</name> <position>Менеджер</position> </employee> <employee> <id>2</id> <name>Мария Сидорова</name> <position>Разработчик</position> </employee> </employees> ``

Критика и ограничения

  • Производительность: Обработка XML-данных внутри СУБД может быть медленнее, чем хранение и запросы к реляционным данным, особенно при больших объёмах или сложных XPath-запросах.
  • Сложность: Стандарт SQL/XML достаточно объёмен и сложен для изучения. Реализации в разных СУБД имеют отличия, что затрудняет переносимость запросов.
  • Конкуренция со стороны JSON: С 2010-х годов формат JSON стал доминирующим в веб-приложениях и API. Многие СУБД сегодня предлагают более продвинутую поддержку JSON, чем XML. SQL/XML остаётся востребован в legacy-системах, корпоративных платформах и государственных информационных системах, где XML является стандартом де-факто.
  • Сложность индексирования: XML-документы могут иметь произвольную структуру, что затрудняет создание эффективных индексов. Некоторые СУБД, например Oracle, предлагают специальные индексы (XMLIndex), но они сложны в настройке.

Источники

  1. ISO/IEC 9075-14:2016 — Information technology — Database languages — SQL — Part 14: XML-Related Specifications (SQL/XML).
  2. «SQL:2003 Has Been Published», Andrew Eisenberg, Jim Melton, и Krishna Kulkarni, SIGMOD Record, 2004.
  3. «SQL/XML:2006 – Even More Standard», Andrew Eisenberg, Jim Melton, Krishna Kulkarni, Michel Peltier, SIGMOD Record, 2005.
  4. «Database Systems: A Practical Approach to Design, Implementation, and Management», Thomas Connolly и Carolyn Begg.
  5. «Pro SQL Server 2012 Relational Database Design and Implementation», Louis Davidson.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →