我试图理解为什么有些XSD工具(Oxygen)接受以下定义,但其他(特别是XMLspy)不接受:
<xs:complexType mixed="true" name="al_complextype">
<xs:complexContent>
<xs:extension base="block_maximaal">
<xs:attributeGroup ref="agroup"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="block_maximaal" mixed="true">
<xs:attributeGroup ref="agroup"/>
</xs:complexType>
<xs:attributeGroup name="agroup">
<xs:attribute name="property"/>
</xs:attributeGroup>
问题似乎是属性属性被使用了两次,一次来自base complexType,一次来自扩展类。
我知道XML Schema因边缘情况而臭名昭着,但是想知道是否有人可以指出Schema规范中讨论这个问题的相关部分。我觉得很难读: - (
答案 0 :(得分:2)
Error on line 5 of test.xsd:
Attribute @property appears more than once in attribute group
Schema processing failed: The schema is invalid
正如你所指出的,找到禁止这种情况的规则是一场噩梦。转至第3.4.2节“复杂类型定义的XML表示”,并在其中标题为“具有复杂内容架构组件的复杂类型定义”小节。其中包含标识为“{attribute uses}”的行。这表示{attribute uses}是在基类型上定义的属性组中定义的属性与在扩展上定义的属性组中的属性的并集。这个联合包含两个具有相同名称的属性,然后它肯定是无效的。
但是,您可以认为联合应该消除重复,在这种情况下,您会讨论是否以及何时两个属性使用组件是相同的,并且规范本身承认它没有回答这个问题(§3.4) .6:“......组件标识的概念,仅由本规范的此版本未完全定义”)。在这种情况下,您有两个对同一属性组的引用,因此肯定会出现这样的情况,即属性组以及它们包含的属性使用是相同的,在这种情况下会删除重复项。
所以我认为在这种情况下,这两种解释都是合法的。