Сортировка всех атрибутов XML в SQL-запросе с использованием XQuery

Как получить XML с отсортированными атрибутами, используя XQuery в SQL?

например для этого XML:

<root><book b='' c='' a=''/></root>

должен вернуться:

<root><book a='' b='' c=''/></root>

person ARZ    schedule 29.08.2011    source источник
comment
Какую базу данных вы используете?   -  person Andomar    schedule 29.08.2011


Ответы (4)


Из Ограничения типа данных xml .

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

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

person Mikael Eriksson    schedule 14.09.2011
comment
спасибо за вашу полезную гиперссылку. но я могу, наконец, сохранить это как строку NVARCHAR. - person ARZ; 15.09.2011

Атрибуты в XML неупорядочены, поэтому документ считается одним и тем же в любом порядке, в котором атрибуты распечатаны. XQuery, конечно же, не имеет возможности изменить порядок атрибутов, и я сомневаюсь, что SQL XML делает то же самое.

person John Snelson    schedule 29.08.2011

Хотя порядок атрибутов не имеет семантического значения, одной из целей разработки XML является удобочитаемость для человека, поэтому вполне разумно попытаться сгенерировать лексический XML, в котором порядок атрибутов согласован и отражает ожидания пользователя: для пример <point x="2" y="5" z="7"/> приятнее для глаз, чем <point z="7" x="2" y="5"/>. Поэтому сериализатор Saxon имеет опцию saxon:attribute-order, которая позволяет управлять порядком атрибутов в выходном XML: см. http://www.saxonica.com/documentation/index.html#!extensions/output-extras/serialization-parameters

person Michael Kay    schedule 23.05.2017

Помимо полезного ответа Микаэля Эрикссона, SQL Server не будет сохранять порядок атрибутов XML и специальное приспособление Майкла Кея на саксонском языке для атрибутов сериализации в алфавитном порядке по имени, будущие читатели должны быть предупреждены, что Рекомендация XML говорит, что порядок XML-атрибутов не имеет значения:

Обратите внимание, что порядок спецификаций атрибутов в начальном теге или теге пустого элемента не имеет значения.

Поэтому XML-инструменты, как правило, не заботятся об упорядочении атрибутов, и если вы не занимаетесь нормализацией/канонизацией XML1, вы не должны этого делать. Без упорядочивания атрибутов в Рекомендации по XML достижение упорядочения с использованием специальных механизмов, таких как saxon:attribute-order, скорее всего, окажется лишь временным, локализованным успехом, поскольку экосистема XML не гарантирует никакого упорядочения, когда ваш XML проходит через инструменты и цепочки инструментов через его жизненный цикл.

1Для тех редких случаев см. раздел об обработке атрибутов в Рекомендация по нормализации XML или Каноническая рекомендация XML.

person kjhughes    schedule 23.05.2017