Набор и последовательность очень разные.
В последовательности один и тот же предмет может присутствовать более одного раза.
По определению все элементы набора различны - не может быть пары элементов $it1
и $it2
в наборе, такой что identical(@it1, $it2)
.
Давайте иметь этот XMLdocument:
<a>
<b>
<a>
<c>
<a/>
</c>
</a>
</b>
</a>
и это выражение XPath:
//a/ancestor-or-self::a
При этом выбираются три узла, однако, если результатом оценки была последовательность, результирующая последовательность будет содержать шесть узлов.
Если есть разница между «неупорядоченным, но обработанным в порядке документов» и «упорядоченным в порядке документов», когда я должен действительно беспокоиться об этой разнице?
Есть впо крайней мере две вещи, о которых нужно знать:
набор узлов не совпадает со списком узлов .Список узлов может иметь порядок, который отличается от порядка документов узлов, которые он содержит - например, список узлов для xsl:apply-templates
и / или xsl:for-each
, когда эти инструкции имеют дочерний элемент xsl:sort
.Этот список узлов в общем случае отличается от порядка документов.
Порядок документов не является отношением общего порядка заказа .Например, позиции двух узлов атрибутов (одного и того же элемента) определяются реализацией и могут различаться для разных реализаций XPath.Кроме того, «порядок документов» между двумя узлами, каждый из которых принадлежит отдельному документу, не определен и зависит от различных реализаций XPath / XSLT.
В XSLT 2.0 / XPath 2.0 можно получитьочень неожиданный и сбивающий с толку результат, если он использует последовательность узлов в месте, где ожидается набор узлов - узлы в последовательности будут дедуплицированы и будут дополнительно обрабатываться не в порядке их последовательности, а в порядке документов.