私が達成しようとしているのは、2 つの形式のいずれかを取ることができる XML ファイルを記述する XML スキーマの作成です。2 つの要素の間に共通する要素のセクションと、異なる小さなセクションがあります。何かのようなもの:
<Dessert>
<Identifier> Hot Fudge Sundae </Identifier>
<SaleDate> 2013-06-03 </SaleDate>
<Duration> 2 </Duration>
<Size> SuperScooper </Size>
</Dessert>
<Dessert>
<Identifier> Dutch Apple Pie </Identifier>
<SaleDate> 2013-06-03 </SaleDate>
<Duration> 1 </Duration>
<AlaMode> 1 </AlaMode>
<IceCreamFlavor> Vanilla </IceCreamFlavor>
</Dessert>
つまり、アイスクリーム デザートにはSizeだけがあり、パイにはAlaModeインジケーターとIceCreamFlavor指定子があります。
私が達成したいのは、xs:choice
指定子を使用して、Dessert
XML がどちらか一方 (Size
またはAlaMode
およびIceCreamFlavor
) を持つことを示して、それらを検証できるようにすることです。
私がやろうとしたことは、2つのタイプを作成し、次のようなことをすることです:
そして、次のようなことをします:
<xs:choice>
<xs:element name="Sundae" type="SundaeType" />
<xs:element name="Pie" type="PieType" />
</xs:choice>
しかし、もちろん、結果の XML は次のようなレイアウトになります。
<Dessert>
<Identifier> Hot Fudge Sundae </Identifier>
<SaleDate> 2013-06-03 </SaleDate>
<Duration> 2 </Duration>
<Sundae>
<Size> SuperScooper </Size>
<Sundae>
</Dessert>
これは既存のファイル構造と一致しません。
考えられるすべての要素を単純に結合して、そのようなxs:choice
ものをなくすことはできますが、それは形式の期待を実際に伝えていません (たとえば、サンデーにAlaMode
要素があることは有効ではありません)。
これを達成する方法はありますか?フィールドが 1 つだけ異なっていれば、xs:choice
(おそらく) でこれを達成でき、その追加のレベルを持たないのではないかと思います。または、ここで何かが足りないだけかもしれません。
はい、レイアウトが最適ではないことは認識していますが、この時点で実際に変更できる既存の形式です。