在XML中,命令是重要的吗?
公共父元素在XML中出现的顺序是XML文档捕获的有意义的数据片断,还是没有被指定为有意义的顺序? 例如,考虑两个XML文档:
<people> <person name="sam"/> <person name="juni"/> </people>
和
<people> <person name="juni"/> <person name="sam"/> </people>
这些文件是否被认为代表相同的数据,或者是被捕获的差异?
元素顺序在XML中很重要,所以在你的例子中,两个文档是不同的。 虽然属性顺序并不重要。
<people> <person name="kathy" id="1"/> </people>
这与以下内容完全相同:
<people> <person id="1" name="kathy"/> </people>
它们是不一样的 – 序列是否重要取决于程序或处理它的用户。 例如,XHTML文档中元素的顺序决定了它们在浏览器中的显示方式,search引擎使用文档中的位置来判断数据的相对重要性。
顺序是潜在的重要,但这取决于什么是传输。
例如,在XHTML中,顺序是非常重要的 – 如果你有随机顺序的兄弟段落,这将是非常混乱!
在许多其他情况下,这并不重要。
XML只是一种表示节点树的方式。 XML本身就说顺序很重要:例如,API必须保持顺序,但是这取决于生产/解释数据的真正关心顺序与否。
XML规范实际上必须“在sorting方面犯错误” – 如果你不关心它,很容易忽略顺序,但是如果API决定切换事物,重buildsorting是一件很痛苦的事情。 (你必须把订单放入属性等)
虽然就XML标准而言,XML属性sorting并不重要,但XML的文本表示必须按照特定顺序放置属性。 这可能是一个问题,如XML Signature,它为XML文档生成一个数字签名。 不同的属性顺序会产生不同的签名,显然是错误的。
出于这个(以及其他)的原因,XML标准化现在有一个标准,它定义了重新组织XML文档的规则,使得它们保留相同的信息内容,但是以可预测的方式重新排列空白,名称空间声明和属性。
从xml.com
规范XML要求按升序字典顺序包含名称空间声明和属性。
根据这篇文章 ,1.0版本的标准甚至不要求parsing器按照它们在文档中出现的顺序来报告兄弟。 有鉴于此,他们不会被认为是不同的,因为两个孩子都在那里。 也许这已经改变了,所以其他的答案是为了更新的XML版本。
从纯粹的XML有效性angular度来看,它依赖于描述格式化XML的规则(如果有的话)。
也就是说,必须保留顺序(参见http://www.w3.org/TR/xml-infoset/中的; 2.1.1),但对应用程序来说是否“重要”取决于其作者。
在一个模式中,使用xs:all
compositor可以使顺序变得不重要,尽pipe我不确定这会影响到捕获顺序的保留,也就是说,我仍然期望源/序列化的顺序由XML处理器。
但是,在1.0中,这个合成器会添加一个对子元素的限制,所以它们必须发生0或1次。 在XSD 1.1中,这个限制被删除了,这样就更容易合约地指定顺序不重要,有效的xs:all
已经成为xs:sequence
的无序版本。
由于1.0 xs:all
合成器过于限制,必须使用有序的xs:sequence
合成器。 因此,秩序往往被人为地强加。
validation器库的供应商采用1.1是很慢的。
因此,当用新的元素进化时,API需要考虑顺序。 我不知道任何可以使用1.1的XML序列化框架,你必须假设你的客户端将使用1.0,并将使用1.0规则validation1.1传入消息,并扼杀。
卢克
XML 1.0规范没有提及任何有相同名称的元素作为同一父元素的子元素的顺序。 所以看来,这个问题是不确定的。
但是,大多数XMLparsing器和API将保留文本表示中给出的序列。 所以,可以实现关心元素顺序的应用程序。 事实上,你的问题的答案是:是的,顺序很重要。 这两个例子是不同的。
仔细看,你需要梳理你的用例。 如果您的XML需要与不同(可能是第三方)应用程序进行互操作,则应始终假定该顺序非常重要。 如果你完全控制生产和消费应用程序,那么你可以放松这个规则。
一如既往,你必须去判断。
订单被捕获。
它们是有区别的。 您可以使用各种XML API来按顺序处理元素或按索引查找元素。 当然,在你的特定例子中,顺序可能并不重要,但是这取决于数据的语义。
我认为这些应该被认为是相同的,但是这取决于软件或阅读人员的决定。 XML只是写出数据的一种方式。 应用程序决定如何使用这些数据,因此决定了这些数据的意义。
如果您的应用程序读入所有人员元素,然后按名称sorting,那么XML文档中的顺序是没有意义的。 如果您的应用程序读取它们并按照相同顺序分配席位,则人员将显示在XML中,那么顺序非常重要。
这取决于使用数据的应用程序。 如果顺序很重要,应该在生成文件的人的规范中描述。
http://www.ibm.com/developerworks/xml/library/x-eleord.html
也许在文章中的讨论将有助于回答你的问题。 由于你的问题有些开放,我不确定它是否涵盖你的疑虑。