首先,关于正式问题:form
属性是否真的增加了 XSD 的表现力?我认为是这样:使用该form
属性,我可以编写其有效实例集不能(据我所知)与不使用该form
属性编写的任何类型匹配的类型。
a
例如(在定义名为type的顶级元素的模式中duration
):
<choice maxOccurs="unbounded">
<element form="qualified" name="a" type="integer"/>
<element form="unqualified" name="a" type="gYear"/>
</choice>
然后,关于不太正式的问题:为什么会有人打扰?
简短的回答是:因为对于在本地元素和属性的合格和不合格名称中进行选择的每种可能方式,有些人认为这是声明本地元素和/或属性的正确方式。
更长的答案需要一点时间。坐下,给自己倒杯咖啡。
关于地方元素有两种思想流派;两者都参加了设计 XSD 的工作组。
一种思想流派认为,如果元素 P 在命名空间 N 中,并且元素 C 是元素 N:P 类型的本地元素,那么子元素应该命名为 N:C 是很自然的。毕竟,它与 P 属于同一个词汇表,而识别词汇表就是命名空间的全部内容。从你的最后一个问题来看,我猜你倾向于这种看待事物的方式。
另一种学派认为局部元素就像局部属性。元素 N:P(的类型)的本地属性命名为 A,而不是 N:A——根据定义,名称 N:A 表示名称空间 N 的全局属性,而不是元素 N:P 的本地属性。以此类推,本地子元素也应该使用非限定名称,以便以类似的方式对待属性和子元素。
XSD 元素和属性声明上属性的存在form
可能表明可能存在第三种思想流派,其特征是希望将合格名称和不合格名称之间的选择视为每个本地元素或属性单独采用的设计选择,并且不一定在单个词汇范围的法令中。就其价值而言,这第三种思想流派实际上似乎并不存在。至少,我认为我从未遇到过成员。似乎没有人开始编写上面展示的那种复杂类型,混合了合格和不合格的本地名称。属性的本质功能form
不是允许不同的局部元素被限定或不限定,而是由elementFormDefault
and设置其默认值。attributeFormDefault
封闭模式元素上的属性,从而确保即使模式作者以某种方式卡住这些属性的错误值,他们仍然可以获得他们想要的效果。
我也从未(据我所知)遇到前两个思想流派中的任何一个成员对另一个流派的推理有任何同情。任何人都可以像其他学派的成员那样思考,这几乎总是令人不快的惊喜。只要稍加努力,善良的聪明人就会发现有可能接受另一个学派的存在,甚至(稍加努力)就可以接受那个学派的成员在真诚地争论,并且不只是试图搞砸作品。各种观点充其量只具有人类学的兴趣(看看人们可以声称相信的非常奇怪的事情,即使他们看起来或多或少是理性的存在!有趣的旧世界,不是吗?)。
然后很明显,工作组中的几乎每个人对我们能想到的三种可能性都有相同的排名:
- 以我认为正确的方式定义事物。
- 定义事物以便架构作者必须做出选择。
- 以其他人认为正确的方式定义事物。
每个人都喜欢第一个选择(对于“I”的合适值),但对于不同的 WG 成员,“我认为正确的方式”结果表明不同的事物。
没有人喜欢第二种选择,因为它使模式作者的生活更加艰难,并导致模式世界的一致性降低。
但是每个人都非常讨厌第三种选择(被迫按照其他人想要的方式做事),以至于他们愿意接受妥协而不是冒彻底失败的风险。