2014-10-07 72 views
0

前加序列我有这样的XML:碱基序列

<Base> 
    <ElementInBase /> 
    <OtherElementInBase /> 
</Base> 

<Derived> 
    <ElementInChildren /> 
    <ElementInBase /> 
    <OtherElementInBase /> 
</Derived> 

所以基本上我想允许在Derived另一个序列是从父Base序列之前出现。

目前,我有这个模式:

<xs:complexType name="Base"> 
    <xs:sequence > 
     <xs:element ref="ElementInBase" minOccurs="0" maxOccurs="1" /> 
     <xs:element ref="OtherElementInBase " minOccurs="0" maxOccurs="1" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="Derived"> 
    <xs:complexContent> 
     <xs:extension base="Base"> 
      <xs:sequence> 
       <xs:element name="ElementInChildren" minOccurs="0" maxOccurs="1"></xs:element> 
      </xs:sequence> 
     </xs:extension> 

    </xs:complexContent> 
</xs:complexType> 

但这仅允许ElementInChildrenBase元素之后。

回答

1

你只需要定义Base作为元素组和借鉴它在你Derived复杂类型:

<xs:group name="Base"> 
    <xs:sequence> 
     <xs:element ref="ElementInBase" minOccurs="0" maxOccurs="1"/> 
     <xs:element ref="OtherElementInBase " minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:group> 

<xs:complexType name="Derived"> 
    <xs:sequence> 
    <xs:element name="ElementInChildren" minOccurs="0" maxOccurs="1"></xs:element> 
    <xs:group ref="Base"/> 
    </xs:sequence> 
</xs:complexType> 

这将放置在ElementInChildren定义Base内容之前。

请同时阅读我的​​答案:In XML Schema, why does an element group tag even exist?