2014-10-07 49 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