XML Schema的唯一粒子属性约束

问题描述:

有谁知道XML Schema中所谓的“唯一粒子属性”限制什么,它为什么会被这个侵犯:XML Schema的唯一粒子属性约束

<xs:complexType name="SMIL.switch.content"> 
    <xs:sequence> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element ref="smil:metadata"/> 
     <xs:element ref="SMIL.switch-control"/> 
     </xs:choice> 
     <xs:choice> 
     <xs:choice> 
      <xs:sequence maxOccurs="unbounded"> 
      <xs:choice maxOccurs="unbounded"> 
       <xs:element ref="SMIL.timecontainer.class"/> 
       <xs:element ref="SMIL.media-object"/> 
      </xs:choice> 
      <xs:choice minOccurs="0" maxOccurs="unbounded"> 
       <xs:element ref="smil:metadata"/> 
       <xs:element ref="SMIL.switch-control"/> 
      </xs:choice> 
      </xs:sequence> 
      <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element ref="smil:metadata"/> 
      <xs:element ref="SMIL.switch-control"/> 
      </xs:choice> 
     </xs:choice> 
     <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
      <xs:element ref="smil:layout"/> 
      <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element ref="smil:metadata"/> 
      <xs:element ref="SMIL.switch-control"/> 
      </xs:choice> 
     </xs:sequence> 
     </xs:choice> 
    </xs:sequence> 
    </xs:complexType> 

运行XJC的错误如下:

[ERROR] COS-nonambig: “http://www.w3.org/ns/SMIL ”:元数据和“ http://www.w3.org/ns/SMIL”:元数据(或元件 从它们的取代基)违反 “唯一粒子属性”。在针对此模式进行验证期间,将为这两个粒子创建模糊性 。

使用trang从SMIL 3.0 DTD生成模式。

+0

庄并不总是完美的,XSD具有一定的局限性:(你能后的原DTD的相关部分?我可以看到为何出现错误但原来可能很方便解决它! – 2010-11-18 14:34:52

如果验证会遇到smil:metadata元素,它无法知道它是否匹配外部序列的第一个选择部分或第二个选择部分。 XML Schema不允许这种模糊性。

看到XML Schema推荐的附录H,第1部分