2017-02-14 60 views
0

我试图理解为什么有些XSD工具(氧气)接受以下的定义,但别人(尤其是XMLSPY)相同的属性,请勿:XML架构扩展,其中两个基地复杂类型和扩展复杂类型使用

<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> 

问题似乎是属性属性使用了两次,一次是从基础complexType,一次是从扩展类。

我知道XML Schema在边缘情况下是臭名昭着的,但是想知道是否有人可以将我指向Schema规范中讨论此问题的相关部分。我觉得很难看:-(

回答

1

撒克逊报道:

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表示。定义,并且在这一小节的标题是“具有复杂内容模式组件的复杂类型定义”。在这里是一个标识为“{属性使用}”的行。这表明{属性使用}是在属性中定义的属性的联合如果这个联合包含两个同名的属性,那么它肯定是无效的。

但是,你可以争辩说,一个工会应该消除重复,在这种情况下,你会讨论是否和何时两个属性使用组件是相同的,并且规范本身承认它没有回答这个问题(§3.4 .6:“...组件标识的概念只是由本规范的这个版本完全定义的”)。在这种情况下,您有两次对同一个属性组的引用,所以肯定会出现这样的情况,即属性组以及它们包含的属性使用是相同的,在这种情况下,会删除重复项。

所以我认为在这种情况下,两种解释都是合法的。

+0

很好的答案,正是我需要向同事解释为什么我必须花时间重构与我们自己的工具(我们是一家氧气店)合作的东西,但这对其他人来说不起作用。 –