Xml 两个兄弟姐妹的顺序是否依赖于实现?
如果我有这样一个XML文档:Xml 两个兄弟姐妹的顺序是否依赖于实现?,xml,tree,documentation,xquery,Xml,Tree,Documentation,Xquery,如果我有这样一个XML文档: <people> <person> <name> Mario </name> <age> 25 </age> </person> <person> <name> Lucas </name> <age> 32 </age> <
<people>
<person>
<name> Mario </name>
<age> 25 </age>
</person>
<person>
<name> Lucas </name>
<age> 32 </age>
</person>
</people>
马里奥
25
卢卡斯
32
总是保证在文档顺序中,Mario出现在Lucas之前?因此,Lucas始终是Mario的兄弟姐妹,或者它依赖于实现?与属性不同,根据: 请注意,属性规范在开始标记或 空元素标记不重要 元素顺序在XML中很重要。 然而,令人惊讶的是,XML建议并没有明确声明元素顺序的重要性。语法意味着元素顺序是重要的,但与属性不同,对于元素顺序的重要性没有明确的说明 在以下情况下,存在以下情况: 定义:在这种情况下,约束包括一个内容模型,一个 控制子元素和子元素的允许类型的简单语法 允许它们出现的顺序 但这是对DTD元素类型声明的引用。xsd同样可以声明排序对于文档有效性是重要的(通过
xsd:sequence
)或不重要的(通过xsd:all
)。对于任何给定的应用程序,顺序可能仍然重要,也可能不重要——这取决于应用程序。[感谢@C.M.Sperberg McQueen对有效性与任何给定申请目的之间相关性差异的有益澄清。]
元素排序的重要性见:
元素信息项具有以下属性:
[……]
尽管,正如@kjhughes所说,XML建议并没有明确说明这一点,但所有构建在XML之上的api和工具都假定元素顺序是重要的,由解析器保留并报告给应用程序
毕竟,您不希望Word文档中的段落被随机地混洗。(可能是因为XML设计师专注于建模文档,所以他们什么也没说:这很明显,不需要说。)我希望我能把这一点提高到+1以上,因为我确实学到了一些关于XML的新东西,而且我现在已经广泛使用了一段时间。我真的很惊讶,它没有在规范中定义。但是,正如Michael Kay所说,我从未遇到过任何处理器不尊重元素顺序。请注意从xsd:all和xsd:sequence推断的内容。它们意味着订单是或不是有效的条件;他们没有说它是否“重要”或是否向应用程序传递信息。如果元素的目的是提供元素a、B和C的排序,那么xsd:all需要所有三个元素,这将是正确的内容模型;在这里,订购可能是对应用程序唯一重要的事情。@C.M.Sperberg-McQueen:我感谢您的澄清。答案已更新。谢谢。它说:“兄弟节点的相对顺序是它们在其父节点的children属性中出现的顺序”。由于文档顺序受到一些规则的约束,但依赖于实现,我假设Mario出现在Lucas之前,只是因为所有XML解析器都是串行解析文档的,但Mario出现在Lucas之前的标准并不要求这样做,对吗?@Ramyazuhouri,不,不是这样。XML规范对此问题保持沉默,但XML信息集和XPath数据模型并非沉默。任何显示不同顺序的XQuery实现都是不一致的(或者使用从XML到XDM的非标准映射)。