私は XML の専門家ではありませんが、XML はよく使用します。これは、私が一般的にこの種の構造を行う方法ではありません。2 つのグループを選択するよりも、個別の複雑な型を使用したいと思います (この回答の最後を参照してください)。
問題は、ReservationGroup と CancellationGroup が同じ要素で始まることにあると思われます。その場合、Schema Component Constraint: Unique Particle Attribution (下記) に違反します。
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#cos-nonambig
スキーマ コンポーネントの制約: 一意のパーティクルの属性
コンテンツ モデルは、要素情報アイテム シーケンスの「検証」中に、シーケンス内の各アイテムを順に「検証」しようとする、その中に直接、間接的、または「暗黙的に」含まれるパーティクル コンポーネントを一意に決定できるように形成する必要があります。そのアイテムの内容や属性を調べたり、シーケンスの残りのアイテムに関する情報を調べたりすることはありません。
注:この制約は、[XML 1.0 (第 2 版)] および SGML の同等の制約を XML スキーマ用に再構築します。要素置換グループとワイルドカードの存在を考えると、この制約の簡潔な表現は困難です。詳細については、一意の粒子属性制約の分析 (非規範的) (§H) を参照してください。
たとえば、次の 2 つのグループは同じ選択では無効です。最初の要素はそれぞれ「名前」であり、どのグループを見ているのかを識別できないためです。ただし、ReservationGroup の最初の要素が Cancellation グループ (resDate と cancDate など) と異なる場合は、それが有効です。
編集:私はこれまでこの種の問題に遭遇したことはありませんでした.グループの定義が完全に合法であることは魅力的だと思いますが、それらを選択肢にまとめると、各グループの定義のためにその選択は違法になります. .
法的選択を形成できないグループ
<xs:group name="ReservationGroup">
<xs:sequence>
<xs:element name="date"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
<xs:group name="CancellationGroup">
<xs:sequence>
<xs:element name="date"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
法的選択を形成できるグループ
<xs:group name="ReservationGroup">
<xs:sequence>
<xs:element name="resDate"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
<xs:group name="CancellationGroup">
<xs:sequence>
<xs:element name="cancDate"/>
<xs:element name="name"/>
<xs:element name="address"/>
</xs:sequence>
</xs:group>
上で述べたように、複雑な型でこの種のことを行います。はい、それは別の要素を追加しますが、それは明白な方法のようであり、私は明白さが好きです.
<xs:complexType name="HeaderType">
<xs:sequence>
<xs:element name="reservation-number" type="ReservationNumberType" minOccurs="1" maxOccurs="1" nillable="false" />
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="reservation" type="ReservationType" />
<xs:element name="cancellation" type="CancellationType" />
</xs:choice>
</xs:sequence>
</xs:complexType>