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

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

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

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

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

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

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

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

2.5.13. XML Тип

2.5.13.1. Создание значений XML
2.5.13.2. Обработка кодировок
2.5.13.3. Доступ к значениям XML

Тип xml тип данных может использоваться для хранения данных в формате XML. Его преимущество перед хранением данных XML в поле типа текст заключается в том, что он проверяет входные значения на корректность структуры, а также предоставляет вспомогательные функции для выполнения типобезопасных операций; см. Раздел 2.6.15. Для использования этого типа данных установка должна быть собрана с параметром configure --with-libxml.

Тип xml тип данных может хранить корректно сформированные документы «документы», согласно определению в стандарте XML, а также «содержимое» Фрагменты, определяемые путем ссылки на менее строгие «узла документа» Модели данных XQuery и XPath. В общих чертах это означает, что фрагменты содержимого могут содержать несколько элементов верхнего уровня или текстовых узлов. Выражение xmlvalue IS DOCUMENT может быть использовано для оценки того, является ли конкретный xml является ли значение полным документом или только фрагментом содержимого.

Ограничения и примечания по совместимости для xml типа данных можно найти в Раздел 8.4.3.

2.5.13.1. Создание значений XML #

Чтобы получить значение типа xml из символьных данных, используйте функцию xmlparse:

XMLPARSE ( { DOCUMENT | CONTENT } value)

Примеры:

XMLPARSE (DOCUMENT 'Manual...')
XMLPARSE (CONTENT 'abcbarfoo')

Хотя согласно стандарту SQL это единственный способ преобразования символьных строк в значения XML, специфичные для Digital Q.DataBase варианты синтаксиса:

xml 'bar'
'bar'::xml

также могут быть использованы.

Тип xml тип данных не проверяет входные значения на соответствие определению типа документа (DTD), даже если во входном значении указано DTD. В настоящее время также отсутствует встроенная поддержка проверки на соответствие другим языкам схем XML, таким как XML Schema.

Обратная операция, формирующая значение символьной строки из xml, использует функцию xmlserialize:

XMLSERIALIZE ( { DOCUMENT | CONTENT } value AS тип [ [ NO ] INDENT ] )

тип может быть character, character varying, или текст (или псевдоним для одного из них). Согласно стандарту SQL, это единственный способ преобразования между типом xml и символьными типами, однако Digital Q.DataBase также позволяет выполнять простое приведение значения.

Тип INDENT параметр обеспечивает форматированный вывод результата, тогда как NO INDENT (значение по умолчанию) просто возвращает исходную входную строку. Приведение к символьному типу аналогичным образом возвращает исходную строку.

При приведении значения символьной строки к типу или из типа xml без использования XMLPARSE или XMLSERIALIZE, соответственно, выбор DOCUMENT против CONTENT Определяется параметром «XML option» параметр конфигурации сеанса, который можно задать с помощью стандартной команды:

SET XML OPTION { DOCUMENT | CONTENT };

или с использованием синтаксиса, более характерного для PostgreSQL:

SET xmloption TO { DOCUMENT | CONTENT };

Значение по умолчанию — CONTENT, поэтому разрешены все формы XML-данных.

2.5.13.2. Обработка кодировок #

Необходимо соблюдать осторожность при работе с несколькими кодировками символов на стороне клиента, сервера и в передаваемых через них XML-данных. При использовании текстового режима для отправки запросов на сервер и получения результатов на клиенте (что является стандартным режимом), Digital Q.DataBase преобразует все символьные данные, передаваемые между клиентом и сервером и наоборот, в кодировку соответствующей стороны; см. Раздел 3.8.3. Это относится и к строковым представлениям XML-значений, как в приведенных выше примерах. Обычно это означает, что объявления кодировки, содержащиеся в XML-данных, могут стать недействительными, так как при перемещении данных между клиентом и сервером символы преобразуются в другие кодировки, в то время как встроенное объявление кодировки остается неизменным. Для обработки такого поведения объявления кодировок, содержащиеся в символьных строках, подаваемых на вход xml типа игнорируются, а содержимое считается представленным в текущей кодировке сервера. Следовательно, для корректной обработки символьные строки данных XML должны отправляться клиентом в текущей кодировке клиента. Клиент обязан либо преобразовать документы в текущую кодировку клиента перед их отправкой на сервер, либо соответствующим образом настроить кодировку клиента. При выводе значения типа xml не будут снабжаться объявлением кодировки, ввиду чего клиентским приложениям следует полагать, что все данные представлены в текущей кодировке клиента.

При использовании бинарного режима для передачи параметров запроса серверу и возврата результатов запроса клиенту преобразование кодировок не выполняется, поэтому ситуация меняется. В этом случае будет учитываться объявление кодировки в данных формата XML, а при его отсутствии — предполагаться, что данные представлены в кодировке UTF-8 (согласно требованиям, которые устанавливает стандарт XML; следует учесть, что PostgreSQL не поддерживает UTF-16). При выводе данные будут содержать объявление кодировки, соответствующее кодировке клиента, за исключением случаев, когда кодировкой клиента является UTF-8 — в такой ситуации оно будет опущено.

Безусловно, обработка данных XML в PostgreSQL будет менее подвержена ошибкам и более эффективна, если кодировка данных XML, кодировка клиента и кодировка сервера совпадают. Поскольку данные XML обрабатываются внутри системы в кодировке UTF-8, вычисления будут наиболее эффективными, если кодировка сервера также установлена в UTF-8.

Внимание

Некоторые функции для работы с XML могут вообще не работать с данными, отличными от ASCII, если кодировка сервера не UTF-8. В частности, это является известной проблемой для xmltable() и xpath() в частности.

2.5.13.3. Доступ к значениям XML #

Тип xml тип данных является необычным в том отношении, что для него не предусмотрены операторы сравнения. Это связано с отсутствием четко определенного и универсально применимого алгоритма сравнения данных XML. Одним из последствий этого является невозможность выборки строк путем сравнения xml столбца с искомым значением. Поэтому значения XML обычно должны сопровождаться отдельным ключевым полем, таким как идентификатор (ID). Альтернативным решением для сравнения значений XML является их предварительное преобразование в символьные строки, однако следует учитывать, что сравнение символьных строк имеет мало общего с семантически корректными методами сравнения XML.

Поскольку для данного xml типа данных отсутствуют операторы сравнения, создание индекса непосредственно по столбцу этого типа невозможно. Если требуется обеспечить высокую скорость поиска в данных XML, возможные варианты решения включают приведение выражения к строковому типу с его последующим индексированием либо индексирование выражения XPath. Разумеется, сам запрос при этом должен быть изменён для выполнения поиска по индексированному выражению.

Функции полнотекстового поиска PostgreSQL также могут быть использованы для ускорения поиска по всему документу в данных XML. Тем не менее, необходимая поддержка предварительной обработки в дистрибутиве PostgreSQL пока не реализована.

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

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