2014-10-07 48 views
0

我想限制我Derived类型只使用一个元素,而不是元素两成的Base不允许一个从基础

<xs:complexType name="Base"> 
    <xs:sequence> 
     <xs:element name="MyElement" /> 
     <xs:group ref="MyGroup" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="Derived"> 
    <xs:complexContent> 
     <xs:restriction base="Base"> 
      <xs:sequence> 
       <xs:element name="MyElement" maxOccurs="0"/> 
       <xs:group ref="MyGroup" /> 
      </xs:sequence> 
     </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 

所以这应该验证:

<Derived> 
    <ElementFromMyGroup /> 
</Derived> 

但是,这不应该:

<Derived> 
    <MyElement /> 
    <ElementFromMyGroup /> 
</Derived> 

不幸的是,我的解决方案在XSD中不合法。任何帮助表示赞赏!

回答

1

的问题是,你Derived类型是不是你Base类型的限制:还有哪些不属于Base实例Derived实例。

取决于你为什么要这两种类型进行相互关联的,你不妨指定一个共同的超对他们来说,与沿着这些路线声明:

<xs:complexType name="CommonSuperType"> 
    <xs:sequence> 
    <xs:element name="MyElement" minOccurs="0"/> 
    <xs:group ref="MyGroup" /> 
    </xs:sequence> 
</xs:complexType> 

然后定义当前的两种类型作为这种常见超类型的限制。

+0

谢谢,你是完全正确的! – WonderCsabo 2014-10-07 19:59:08