XML模式中的“ form”属性实际上有什么用?

pan*_*ake 1 xsd namespaces qualified-name

过去几天,我一直在提高我的XML模式技能,并且整整一整天,我忙于尝试了解与模式有关的名称空间的复杂性。最令我震惊的form="qualified|unqualified"是非全局性<element><attribute>元素上的属性似乎毫无用处。

我的问题是:该form属性实际上是在XML模式/ XML文档中增加了表达能力,还是只是使某些XML文档的表示法更容易/不同?

我了解到,当所有元素都使用命名空间进行限定时(通常只需要文档元素上的一个xmlns =“ xyz”属性),需要遵循某种模式的XML文档通常更容易编写。 ?为什么有人会为所有不合格的非全局元素烦恼呢?

C. *_*een 6

首先,关于正式的问题:该form属性是否实际上增加了XSD的表达能力?我认为是这样:通过form属性,我可以编写其有效实例集无法(就我所知)无法与任何不使用form属性而编写的类型相匹配的类型。

例如(在定义名为atype 的顶级元素的模式中duration):

<choice maxOccurs="unbounded">
  <element form="qualified" name="a" type="integer"/> 
  <element form="unqualified" name="a" type="gYear"/> 
</choice>
Run Code Online (Sandbox Code Playgroud)

然后,在一个不太正式的问题上:为什么有人会打扰?

简短的答案是:因为对于在本地元素和属性的合格和不合格名称中进行选择的每种可能方式,有人认为这是声明本地元素和/或属性的正确方法。

较长的答案将需要一些时间。坐下,给自己喝杯咖啡。

关于地方因素有两种思想流派。两者都参加了设计XSD的工作组。

一种观点认为,如果元素P在名称空间N中,并且元素C对于元素N:P的类型是本地的,则将子元素命名为N:C是很自然的。毕竟,它是与P相同词汇表的一部分,而识别词汇表就是名称空间的全部含义。从您的最后一个问题来看,我想您倾向于这种看待事物的方式。

另一种思想流派则认为局部元素就像局部属性一样。元素N:P本地(类型)的属性命名为A,而不是N:A-名称N:A根据定义表示名称空间N全局属性,而不是元素N:P局部性。以此类推,本地子代也应使用不合格的名称,以便以类似方式对待属性和子代元素。

对存在form对XSD元素和属性声明属性可能暗示思想的第三所学校,其特点是治疗合格和不合格的名字之间的选择的愿望可能存在如要单独对各本地元素或属性的设计选择,并且不一定要包含在整个词汇表中。就其价值而言,这第三种思想流派似乎实际上并不存在。至少,我认为我从未遇到过成员。似乎没有人打算写出上面显示的那种复杂的类型,混合使用合格和不合格的本地名称。该form属性的基本功能不是允许不同的本地元素合格或不合格,而是通过elementFormDefault和设置其默认值。attributeFormDefault属性包含在封闭的schema元素上,从而确保即使模式编写者因某种原因而为这些属性使用了错误的值,他们仍然可以获得所需的效果。

我也从未(我知道)遇到过前两个思想流派中的任何一个,他们对另一个流派的推理都感到同情。任何人都可以想到另一种思想流派的成员的思考方式,这总是让人感到不受欢迎。稍加努力,聪明的聪明人就会发现有可能接受另一种思想流派的存在,甚至(稍加努力)就可以接受该思想流派的成员出于真诚而争论,并且不只是在努力提高作品质量。各种各样的观点充其量只是人类学的兴趣(看看人们可以声称相信的非常奇怪的事情,即使他们看上去或多或少都像理性人一样存在!有趣的旧世界,不是吗?)。

然后很明显,在我们可以想到的三种可能性中,WG中的每个人几乎都有相同的排名:

  1. 用我认为正确的方式定义事物。
  2. 定义事物,以便架构作者必须做出选择。
  3. 用其他人认为正确的方式定义事物。

每个人都喜欢第一个选择(对于“ I”的合适值),但是对于不同的工作组成员,“我认为正确的方式”却代表了不同的事物。

没有人喜欢第二选择,因为它使模式作者的工作更加艰苦,并导致模式范围的一致性降低。

但是每个人都非常讨厌第三种选择(被迫以其他人想要的方式做事),以至于他们愿意接受妥协而不是冒险彻底失败。