2012-02-21 16 views
2

私は複数の型で必要な共通の要素のシーケンスのために私のXSDで拡張型を使用しています。しかし、継承された要素がシーケンスに配置される順序を制御したい。これは私が持っているものです。拡張型 - 継承された要素の順序

<xs:complexType name="subType"> 
    <xs:complexContent> 
    <xs:extension base="baseType"> 
     <xs:sequence> 
     <xs:element name="name" type="xs:string"/> 
     </xs:sequence> 
    </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="baseType"> 
    <xs:sequence> 
    <xs:element name="element1" type="xs:string"/> 
    <xs:element name="element2" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

これは、結果の順序である:

<subType> 
    <element1>element1</element1> 
    <element2>element2</element2> 
    <name>name</name> 
</subType> 

Iサブタイプで定義されたシーケンスを達成するために、順番に最初に表示したいと思います:

<subType> 
    <name>name</name> 
    <element1>element1</element1> 
    <element2>element2</element2> 
</subType> 

これは可能ですか?私は全体として、表現されているのと同じデータだと理解していますが、できるだけ直感的にできるように、オーダーをコントロールしたいと思います。

+0

有用な(+1)... –

答えて

1

同じコンパイルセット内では、このようなことは実現できません。再利用が(オブジェクトの向きとは対照的に)リストの一番上にある場合、< xs:group /> sでコンテンツの再利用を実現できます。つまりgroup1は< element1 />と< element2 />、group2は<名前/>;異なるタイプでは、必要に応じてgroup1とgroup2の相対的な位置を変更することができます。

異なるセット間で、再定義(2つの再定義)を使用すると、バリエーションを達成できます。ただし、この場合でも、基本タイプのコンテンツはサブタイプの前に表示されます。 XSDをコードバインディングに使用するツールのほとんどが< xs:redefine />で動作しないため、この問題はお勧めできません。

+0

ありがとう、私は恐れていたかもしれません。私はちょうど奇妙な注文に対処しなければならないか、手動で要素定義を複製する必要があると思います。これは、通常、同様のデータのわずかなバリエーションに対して要素を追加する必要があるためです。 – mnemy