В XML важен ли порядок? - PullRequest
49 голосов
/ 15 июля 2009

Является ли порядок, в котором элементы общего родительского элемента появляются в XML, значимым фрагментом данных, захваченных документом XML, или порядок не указан как значимый? Например, рассмотрим два XML-документа:

<people>
 <person name="sam"/>
 <person name="juni"/>
</people>

и

<people>
 <person name="juni"/>
 <person name="sam"/>
</people>

Считается ли, что эти документы представляют идентичные данные, или зафиксирована разница в порядке?

Ответы [ 11 ]

50 голосов
/ 15 июля 2009

Порядок элементов значим в XML, поэтому в вашем примере два документа различны. Однако порядок атрибутов не имеет значения.

<people>
  <person name="kathy" id="1"/>
</people>

Это точно так же, как:

<people>
  <person id="1" name="kathy"/>
</people>
22 голосов
/ 15 июля 2009

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

19 голосов
/ 15 июля 2009

Порядок потенциально важен, но зависит от того, что передается.

В XHTML, например, порядок чрезвычайно важен - если у вас есть параграфы брата в случайном порядке, это будет очень запутанно!

Во многих других случаях это неважно.

XML - это просто способ представления дерева узлов. Сам XML говорит, что порядок важен: например, API должны сохранять порядок - но все зависит от того, что производит / интерпретирует данные, чтобы действительно заботился о порядке или нет.

Спецификация XML фактически должна «ошибаться в стороне от упорядочения» - упорядочение легко игнорировать, если вы не заботитесь об этом, но сложно перестроить порядок, если API решают все изменить. (Вы должны поместить порядок в атрибуты и т. Д.)

5 голосов
/ 28 августа 2014

С точки зрения действительности XML, это зависит от схемы, если таковая имеется, которая описывает правила форматирования XML.

Тем не менее, порядок должен быть сохранен (см. 2.1.1 в http://www.w3.org/TR/xml-infoset/), но является ли это "важным" для приложения, зависит от его автора.

Внутри схемы заказ может быть сделан неважным при использовании композитора xs:all, хотя я не уверен, что это повлияет на сохранение захваченного порядка, то есть я бы все еще ожидал, что порядок в источнике / сериализации будет поддерживаться процессорами XML.

Однако в версии 1.0 этот композитор добавляет ограничение на дочерние элементы, так что они должны встречаться 0 или 1 раз. В XSD 1.1 это ограничение снято, что упрощает контрактное указание, что заказ не важен, фактически xs:all стал неупорядоченной версией xs:sequence.

Из-за чрезмерно ограничительного композитора 1.0 xs:all пришлось использовать заказанный композитор xs:sequence. Таким образом, порядок часто навязывался искусственно.

Принятие 1.1 поставщиками библиотек валидаторов происходит медленно.

Таким образом, API должны учитывать порядок при разработке с новыми элементами. Мне неизвестна какая-либо инфраструктура XML-сериализации, которая может работать с 1.1, и вы должны предположить, что ваши клиенты будут использовать 1.0 и проверять входящие сообщения 1.1 с правилами 1.0 и дросселем.

Люк

5 голосов
/ 15 июля 2009

Хотя упорядочение атрибутов XML не является значимым с точки зрения стандарта XML, текстовое представление XML по необходимости размещает атрибуты в определенном порядке. Это может быть проблемой для таких вещей, как XML Signature, которая генерирует цифровую подпись для документов XML. Другой порядок атрибутов будет генерировать другую подпись, что явно неверно.

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

С xml.com

Канонический XML требует включения объявлений пространства имен и атрибуты в восходящем лексикографическом заказ.

4 голосов
/ 15 июля 2009

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

3 голосов
/ 15 июля 2009

XML 1.0 Spec ничего не говорит о порядке элементов с такими же именами, как у дочерних элементов того же родительского элемента. Так что, похоже, проблема не определена.

Однако большинство синтаксических анализаторов XML и API сохранят последовательность, заданную в текстовом представлении. Таким образом, можно реализовать приложения, которые заботятся о порядке элементов. И де-факто ответ на ваш вопрос: да, порядок имеет значение. Два примера отличаются.

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

Как всегда, вам придется судить.

1 голос
/ 15 июля 2009

http://www.ibm.com/developerworks/xml/library/x-eleord.html

Возможно, обсуждение в статье поможет ответить на ваш вопрос. Поскольку ваш вопрос несколько открыт, я не уверен, что он касается вас.

1 голос
/ 15 июля 2009

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

Если ваше приложение считывает все элементы person, а затем алфавитирует их по имени, то порядок в документе XML не имеет смысла. Если ваше приложение считывает их и назначает места в том же порядке, в котором люди появляются в XML, то порядок очень важен.

Это зависит от приложения, которое использует данные. Если порядок важен, его следует описать в спецификации для людей, генерирующих файлы.

1 голос
/ 15 июля 2009

Заказ захвачен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...