xml模式的任何好理由"元素的顺序是重要的"规则?

omg*_*omg 0 xml design-patterns

我不明白为什么元素的顺序是重要的而不是属性的情况.

任何人都可以提供合理的理由吗?

element addressBook {
  element card {
    attribute name { text },
    attribute email { text }
  }*
}
Run Code Online (Sandbox Code Playgroud)

在XML中,属性的顺序传统上并不重要.RELAX NG遵循这一传统.上述模式将匹配两者

<card name="John Smith" email="js@example.com"/>
Run Code Online (Sandbox Code Playgroud)

<card email="js@example.com" name="John Smith"/>
Run Code Online (Sandbox Code Playgroud)

相反,元素的顺序很重要.模式

element card {
  element name { text },
  element email { text }
}
Run Code Online (Sandbox Code Playgroud)

不匹配

<card><email>js@example.com</email><name>John Smith</name></card>
Run Code Online (Sandbox Code Playgroud)

那一个怎么样:

如果元素或属性的子元素与数据类型模式匹配,则元素或属性的完整内容必须与该数据类型模式匹配.不允许具有允许部分内容与数据类型模式匹配的模式,以及与另一模式匹配的另一部分.例如,不允许使用以下模式:

element bad {
  xsd:int,
  element note { text }
}
Run Code Online (Sandbox Code Playgroud)

但是,这没关系:

element ok {
  xsd:int,
  attribute note { text }
}
Run Code Online (Sandbox Code Playgroud)

请注意,此限制不适用于文本模式.

Dou*_*rch 7

我怀疑这是因为属性名称在元素中必须是唯一的,并且无论顺序如何都可以消除歧义,而包含的元素不必是唯一的.区分其他相同元素的唯一方法是按顺序排列.当订单很重要时,这很重要.例如:

<li>Put on underwear</li>
<li>Put on pants.</li>
Run Code Online (Sandbox Code Playgroud)

在语义上是不同的

<li>Put on pants.</li>
<li>Put on underwear</li>
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

订购通常很重要.想象一下,例如,XHTML段落是否随机重新排序.然而,属性自然是"属性包" - 一组值而不是序列.这也是为什么你不能用元素声明重复属性,但你可以重复具有相同名称的元素.

这只是XML设计的一部分.属性和元素在很多方面都不同,而不仅仅是排序.有时元素视为与顺序无关是有意义的,但这意味着什么将取决于具体情况.然而,处理一种情况是错误的,在这种情况下,排序无关紧要,因为它应该永远不重要.