×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

8.4.3. Ограничения XML и соответствие стандарту SQL/XML

8.4.3.1. Запросы ограничены версией XPath 1.0
8.4.3.2. Второстепенные ограничения реализации

В стандарте SQL:2006 были внесены значительные изменения в спецификации, связанные с XML, в рамках стандарта ISO/IEC 9075-14 (SQL/XML). Digital Q.DataBaseреализация типа данных XML и связанных с ним функций в основном соответствует более ранней редакции 2003 года с некоторыми заимствованиями из более поздних редакций. В частности:

  • В тех случаях, когда текущий стандарт предоставляет семейство типов данных XML для хранения «документа» или «содержимого» в нетипизированных вариантах или вариантах с типизацией по XML-схеме, а также тип XML(SEQUENCE) для хранения произвольных фрагментов XML-содержимого, Digital Q.DataBase предоставляет единственный xml тип, который может содержать «документа» или «содержимого». В PostgreSQL отсутствует эквивалент стандартного «sequence» типа.

  • Digital Q.DataBase предоставляет две функции введенные в стандарте SQL:2006, но в вариантах, использующих язык XPath 1.0 вместо языка XML Query, как это определено для них в стандарте SQL.

  • Digital Q.DataBase не поддерживает RETURNING CONTENT или RETURNING SEQUENCE предложения и функции, которые согласно спецификации должны содержать данные элементы, неявно возвращают содержимое.

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

8.4.3.1. Запросы ограничены версией XPath 1.0 #

Специфичные Digital Q.DataBaseдля PostgreSQL функции xpath() и xpath_exists() выполняют запросы к XML-документам с использованием языка XPath. Digital Q.DataBase также предоставляет варианты стандартных функций, поддерживающие только XPath, — XMLEXISTS и XMLTABLE, которые официально используют язык XQuery. Для всех этих функций Digital Q.DataBase используется libxml2 библиотека, обеспечивающая поддержку только стандарта XPath 1.0.

Между языком XQuery и версиями XPath 2.0 и выше существует тесная связь: любое выражение, которое является синтаксически корректным и успешно выполняется в обеих средах, дает одинаковый результат (за небольшим исключением для выражений, содержащих цифровые символьные ссылки или предопределенные ссылки на сущности, которые XQuery заменяет соответствующим символом, в то время как XPath оставляет их без изменений). Однако между этими языками и XPath 1.0 подобная связь отсутствует; этот язык был разработан ранее и отличается во многих отношениях.

Следует учитывать две категории ограничений: ограничение от XQuery до уровня XPath для функций, определенных в стандарте SQL, и ограничение XPath до версии 1.0 как для стандарта SQL, так и для Digital Q.DataBase-специфичных функций.

8.4.3.1.1. Ограничение XQuery до уровня XPath #

Функциональные возможности XQuery, выходящие за рамки XPath, включают:

  • Выражения XQuery могут конструировать и возвращать новые XML-узлы в дополнение ко всем возможным значениям XPath. XPath может создавать и возвращать значения атомарных типов (числа, строки и т. д.), но может возвращать только те XML-узлы, которые уже присутствовали в документах, переданных выражению в качестве входных данных.

  • XQuery содержит управляющие конструкции для итерации, сортировки и группировки.

  • XQuery позволяет объявлять и использовать локальные функции.

Последние версии XPath начинают предлагать возможности, перекрывающиеся с вышеуказанными (такие как функции в функциональном стиле for-each и sort, анонимные функции и parse-xml для создания узла из строки), однако такие функции не были доступны до версии XPath 3.0.

8.4.3.1.2. Ограничение XPath версией 1.0 #

Разработчикам, знакомым с XQuery и XPath 2.0 или более поздними версиями, при использовании XPath 1.0 придется столкнуться с рядом отличий:

  • Базовым типом выражения XQuery/XPath является sequence, которая может содержать XML-узлы, атомарные значения, или и то, и другое, не существует в XPath 1.0. Выражение XPath 1.0 может только формировать набор узлов (содержащий ноль или более XML-узлов) или одно атомарное значение.

  • В отличие от последовательности XQuery/XPath, которая может содержать любые элементы в произвольном порядке, набор узлов XPath 1.0 не имеет гарантированного порядка и, как и любое множество, не допускает повторного вхождения одного и того же элемента.

    Примечание

    Библиотека libxml2 , по всей видимости, всегда возвращает наборы узлов Digital Q.DataBase с сохранением того же относительного порядка элементов, который был во входном документе. В документации к ней не гарантируется такое поведение, и выражение XPath 1.0 не может им управлять.

  • В то время как XQuery/XPath предоставляет все типы, определенные в XML-схеме, и множество операторов и функций для этих типов, в XPath 1.0 имеются только наборы узлов и три атомарных типа boolean, double, а также string.

  • В стандарте XPath 1.0 отсутствует условный оператор. Выражение XQuery/XPath такое как if ( hat ) then hat/@size else "no hat" не имеет эквивалента в XPath 1.0.

  • В стандарте XPath 1.0 отсутствуют операторы сравнения строк. Оба выражения, "cat" < "dog" и "cat" > "dog" возвращают ложное значение, так как каждое из них является числовым сравнением двух NaN. В отличие от этого, = и != выполняют сравнение строк как строк.

  • В спецификации XPath 1.0 различие между сравнениями значений и и общими сравнениями в том виде, в каком их определяют XQuery/XPath, выражено неявно. Оба этих типа sale/@hatsize = 7 и sale/@customer = "alice" являются сравнениями с квантором существования; они истинны, если существует хотя бы один элемент sale с заданным значением для данного атрибута, в то время как выражение sale/@taxable = false() представляет собой сравнение значений с эффективное логическое значение всего набора узлов. Оно истинно только в том случае, если ни один узел sale не имеет никакого taxable вовсе.

  • В модели данных XQuery/XPath узел документа может иметь либо форму документа (т. е. ровно один элемент верхнего уровня, при этом вне его допускаются только комментарии и инструкции по обработке) либо форму содержимого (в которой эти ограничения смягчены). Его эквивалент в XPath 1.0, корневой узел, может быть только в форме документа. Это одна из причин, по которой xml значение, передаваемое в качестве элемент контекста к любому типу Digital Q.DataBase Функция на основе XPath должна быть представлена в форме документа.

Приведенный здесь перечень различий не является исчерпывающим. В XQuery и XPath версий 2.0 и выше предусмотрен режим совместимости с XPath 1.0, а в списках W3C изменений библиотеки функций и изменений языка, применяемых в этом режиме, приводится более подробное (но всё же не исчерпывающее) описание различий. Режим совместимости не позволяет обеспечить полную эквивалентность более поздних языков стандарту XPath 1.0.

8.4.3.1.3. Сопоставление типов данных и значений стандартов SQL и XML #

В стандарте SQL:2006 и более поздних редакциях точно определены оба направления преобразования между стандартными типами данных SQL и типами XML-схемы. Однако данные правила сформулированы с использованием типов и семантики языков XQuery/XPath и не имеют прямого применения к иной модели данных стандарта XPath 1.0.

Когда Digital Q.DataBase сопоставляет значения данных SQL с данными XML (как в функции xmlelement), или данные XML со значениями SQL (как в выходных столбцах функции xmltable), за исключением нескольких случаев, обрабатываемых особым образом, Digital Q.DataBase просто предполагает, что строковое представление типа данных XML в формате XPath 1.0 будет допустимым в качестве текстовой формы ввода для типа данных SQL, и наоборот. Это правило обладает преимуществом простоты, обеспечивая для многих типов данных результаты, аналогичные сопоставлениям, определенным в стандарте SQL.

В тех случаях, когда важна совместимость с другими системами, для некоторых типов данных может потребоваться использование функций форматирования типов данных (таких как функции в Раздел 2.6.8) в явном виде для получения сопоставлений, соответствующих стандарту.

8.4.3.2. Второстепенные ограничения реализации #

В данном разделе рассматриваются ограничения, которые не являются характерными непосредственно для libxml2 библиотеки, но относятся к текущей реализации в Digital Q.DataBase.

8.4.3.2.1. Только BY VALUE Поддерживается механизм передачи #

Стандарт SQL определяет два механизма передачи применяемых при передаче XML-аргумента из SQL в XML-функцию или при получении результата: BY REF, при котором конкретное XML-значение сохраняет идентичность своего узла, и BY VALUE, при котором передается содержимое XML-данных, но идентичность узла не сохраняется. Механизм передачи может быть указан перед списком параметров как механизм по умолчанию для всех параметров либо после любого параметра для переопределения значения по умолчанию.

Для иллюстрации этого различия: если x является XML-значением, то два следующих запроса в среде стандарта SQL:2006 вернут значения true и false соответственно:

SELECT XMLQUERY('$a is $b' PASSING BY REF x AS a, x AS b NULL ON EMPTY);
SELECT XMLQUERY('$a is $b' PASSING BY VALUE x AS a, x AS b NULL ON EMPTY);

Digital Q.DataBase будет принимать BY VALUE или BY REF в XMLEXISTS или XMLTABLE конструкции, но игнорирует их. xml тип данных содержит сериализованное строковое представление, поэтому идентичность узлов не сохраняется, а передача всегда фактически осуществляется ПО ЗНАЧЕНИЮ.

8.4.3.2.2. Невозможно передать именованные параметры в запросы #

Функции на основе XPath поддерживают передачу одного параметра в качестве элемента контекста выражения XPath, но не поддерживают передачу дополнительных значений для использования в выражении в качестве именованных параметров.

8.4.3.2.3. Нет XML(SEQUENCE) Тип #

Данный Digital Q.DataBase xml тип данных может содержать значение только в DOCUMENT или CONTENT форме. Элемент контекста выражения XQuery/XPath должен быть одиночным XML-узлом или атомарным значением, однако стандарт XPath 1.0 накладывает ограничение, согласно которому он может быть только XML-узлом, и не определяет тип узла, позволяющий CONTENT. В конечном итоге получается, что правильно сформированный DOCUMENT является единственной формой XML-значения, которую Digital Q.DataBase может передавать в качестве элемента контекста XPath.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению