2009-06-20 14 views
2

は、次のことを考えてみましょう:XGROUPの要素の一つが子供である場合、私は起こるしたい何XSD:要素に祖先のルールを継承させることはできますか?

<xs:complexType name="A"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:group ref="subAGroup"/> 
     <xs:group ref="xGroup"/> 
    </xs:choice> 
</xs:complexType> 
<xs:complexType name="B"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:group ref="subBGroup"/> 
     <xs:group ref="xGroup"/> 
    </xs:choice> 
</xs:complexType> 

があり、孫など、その子どもたちがsubAGroupまたはXGROUPの一部でなければなりませんの。 Bがその祖先である場合、その子はsubBGroupまたはxGroup内になければなりません。

+0

達成しようとしていることの例とその理由を教えてください。他の人が把握できるように、現実世界に十分に近いもの。あなたの質問は私にとって抽象的すぎます(実際のXSD専門家にとってはあまり抽象的ではないかもしれませんが、私は認めます)。 –

+0

@ジョン - 私が投稿した回答をご覧ください。まだそれは意味をなさないでしょうか? – Jataro

答えて

0

1つの解決策は、各親タイプに対して異なるグループおよびタイプを作成することです。上記の例に従うと、これは次のようになります。

<xs:complexType name="A"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:group ref="subAGroup"/> 
     <xs:group ref="xGroup"/> 
    </xs:choice> 
</xs:complexType> 
<xs:complexType name="B"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:group ref="subBGroup"/> 
     <xs:group ref="yGroup"/> 
    </xs:choice> 
</xs:complexType> 

<xs:group name="xGroup"> 
    <xs:choice> 
     <xs:element name="Element1" type="AEleType"/> 
    </xs:choice> 
</xs:group> 
<xs:complexType name="AEleType"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:group ref="subAGroup"/> 
     <xs:group ref="xGroup"/> 
    </xs:choice> 
</xs:complexType> 

<xs:group name="yGroup"> 
    <xs:choice> 
     <xs:element name="Element1" type="BEleType"/> 
    </xs:choice> 
</xs:group> 
<xs:complexType name="BEleType"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:group ref="subBGroup"/> 
     <xs:group ref="yGroup"/> 
    </xs:choice> 
</xs:complexType> 

これは過度に冗長ですが。より洗練されたソリューションはありますか?

関連する問題