2011-08-05 6 views
1

私は次のような問題があります。XMLスキーマからこの冗長性を削除することはできますか?

私は2つの複合型、メンバーfoobar両方でfoobar持っている:冗長性を減らすために

<xs:complexType name="foo"> 
    <xs:sequence> 
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="bar"> 
    <xs:sequence> 
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" /> 
    </xs:sequence> 
</xs:complexType> 

を、私が参照されますのcomplexTypeとしてfoobarのを宣言したいですfoobarの両方で、このような何か:

<xs:complexType name="foobar"> 
    <xs:sequence> 
    <xs:element type="xs:string /> 
    </xs:sequence> 
</xs:complexType> 

しかし、これは正しい方法ではないようです。これは実際にXMLスキーマで可能ですか?

答えて

1

私は正しさのために次のことをチェックするためには至っていないが、私はあなたがこのようにそれを行うことができると信じて:

<xs:complexType name="hasFoobar" abstract="true"> 
    <xs:sequence> 
     <xs:element name="foobar" … /> 
    </xs:sequence> 
    </xs:complexType> 

そして、この抽象型「拡張」:

<xs:complexType name="foo"> 
    <xs:complexContent> 
     <xs:extension base="hasFoobar"> 
     … 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="bar"> 
    <xs:complexContent> 
     <xs:extension base="hasFoobar"> 
     … 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 
3

をあなたはおそらくあります複合タイプではなくxs:group要素を使用する方が良いでしょう:

<xs:complexType name="foo"> 
    <xs:group ref="foobarGroup"/> 
</xs:complexType> 

<xs:complexType name="bar"> 
    <xs:group ref="foobarGroup"/> 
</xs:complexType> 

<xs:group name='foobarGroup'> 
    <xs:sequence> 
     <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" /> 
    </xs:sequence>   
</xs:group> 

配列をxs:complexTypeの一部として直接表現しないでください。

関連する問題