В XML, порядок важен?
Является ли порядок, в котором элементы общего родителя отображают в XML значимую часть данных, захваченных XML-документом, или порядок не указан как имеющий смысл? Например, рассмотрим два документа XML:
<people>
<person name="sam"/>
<person name="juni"/>
</people>
и
<people>
<person name="juni"/>
<person name="sam"/>
</people>
Рассматриваются ли эти документы как данные идентичные, или это разница в порядке захвата?
Ответы
Ответ 1
Порядок элементов значим в XML, поэтому в вашем примере два документа отличаются друг от друга. Однако порядок атрибутов не имеет значения.
<people>
<person name="kathy" id="1"/>
</people>
Это точно так же, как:
<people>
<person id="1" name="kathy"/>
</people>
Ответ 2
Они не идентичны - зависит ли последовательность от программы или пользователя, который ее обрабатывает. Например, последовательность элементов в документе XHTML определяет, как они отображаются в браузере, а поисковые системы используют позицию в документе для оценки относительной важности данных.
Ответ 3
Порядок потенциально важен, но зависит от того, что передается.
В XHTML, например, порядок чрезвычайно важен - если у вас были абзацы сестры в случайном порядке, это было бы очень запутанно!
Во многих других случаях это несущественно.
XML - это всего лишь способ представления дерева узлов. Сам XML говорит, что порядок важен: API должны сохранять порядок, например, но это зависит от того, что производит/интерпретирует данные, которые действительно заботятся о порядке или нет.
Спецификация XML эффективно должна "ошибаться на стороне заказа" - легко игнорировать порядок, если вам это неинтересно, но это боль, чтобы восстановить порядок, если API-интерфейсы решили переключить ситуацию. (Вам нужно будет поместить заказ в атрибуты и т.д.)
Ответ 4
Хотя упорядочение атрибутов XML не имеет существенного значения в отношении стандарта XML, текстовое представление XML делает по необходимости атрибуты в определенном порядке. Это может быть проблемой для таких вещей, как XML Signature, которая генерирует цифровую подпись для XML-документов. Другой порядок атрибутов создавал бы другую подпись, которая явно неверна.
Для этой (и других) причин теперь существует стандарт для канонизации XML, который определяет правила для реорганизации XML-документов, так что они сохраняют один и тот же информационный контент, но имеют такие вещи, как пропуски, объявления пространства имен и атрибуты, переупорядоченные в предсказуемым способом.
От xml.com
Канонический XML требует включения заявлений пространства имен и атрибуты в восходящей лексикографии порядок.
Ответ 5
В соответствии с в этой статье версия стандарта 1.0 не требует даже того, чтобы синтаксические анализаторы сообщали братьям и сестрам в том порядке, в каком они появляются в документ. В этом свете они не будут считаться разными, так как оба они есть. Возможно, это изменилось, так что другие ответы предназначены для новых версий XML.
Ответ 6
С чисто точки зрения действительности 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 правилами и дросселями.
Лука
Ответ 7
XML 1.0 Spec ничего не говорит о порядке элементов с одинаковыми именами как дочерние элементы одного и того же родительского элемента. Похоже, проблема - undefined.
Однако большинство синтаксических анализаторов XML и API сохраняют последовательность, указанную в текстовом представлении. Таким образом, можно реализовать приложения, которые заботятся о порядке элементов. И де-факто ответ на ваш вопрос: Да, порядок имеет значение. Эти два примера различны.
Присмотревшись внимательнее, вам нужно выяснить, что такое ваш вариант использования. Если ваш XML должен взаимодействовать с разными (возможно, сторонними) приложениями, вы всегда должны считать, что этот порядок имеет значение. Если у вас есть полный контроль над производством и потреблением приложения, вы можете расслабиться это правило.
Как всегда, вам придется судить.
Ответ 8
Есть разница. Вы можете использовать различные XML API для обработки элементов в последовательности или поиска элемента по индексу. Конечно, порядок может не иметь значения в вашем конкретном примере, но это зависит от семантики данных.
Ответ 9
Порядок захвачен.
Ответ 10
Я думаю, что их следует считать одинаковыми, но это действительно зависит от программного обеспечения или человека, которые его читают. XML - это всего лишь способ записи данных. Приложение определяет, как эти данные используются и, следовательно, значительная часть значения.
Если ваше приложение читается во всех элементах пользователя, а затем по алфавиту их по имени, то порядок в документе XML не имеет смысла. Если ваше приложение читает их и назначает места в том же порядке, люди появляются в XML, тогда порядок очень важен.
Это приложение, которое использует данные. Если порядок важен, его следует описать в спецификациях для людей, генерирующих файлы.
Ответ 11
http://www.ibm.com/developerworks/xml/library/x-eleord.html
Возможно, обсуждение в статье поможет ответить на ваш вопрос. Поскольку ваш вопрос несколько открыт, я не уверен, что он касается вас.