「これらの要素のうちの 1 つ以上、ただし少なくとも 1 つは必要」の XML スキーマ構成 質問する

「これらの要素のうちの 1 つ以上、ただし少なくとも 1 つは必要」の XML スキーマ構成 質問する

私は、すべての子要素がオプションであるが、少なくとも1つの要素がオプションである「シーケンス」のようなスキーマの一部を設定しようとしています。しなければならない存在する可能性があり、複数存在する可能性もあります。

以下のことを実行しようとしましたが、XMLSpy は「コンテンツ モデルには、一意に決定できない要素 <element name="DateConstant"> と <element name="DateConstant"> が含まれています」というエラー メッセージを表示します。

    <xs:choice>
        <xs:sequence>
            <xs:element name="DateConstant"/>
            <xs:element name="TimeConstant"/>
        </xs:sequence>
        <xs:element name="DateConstant"/>
        <xs:element name="TimeConstant"/>
    </xs:choice>

これは可能ですか(できる場合、どのようにしますか)?

説明: 同じ名前の各要素を 1 つだけ許可したいのです。「DateConstant」と「TimeConstant」はそれぞれ 1 つずつ許可できますが、どちらも 2 つ許可することはできません。Gizmo の回答は私の要件を満たしていますが、要素の数が多い場合は実用的ではありません。Hurst の回答では、同じ名前の要素を 2 つ以上許可していますが、これは望ましくありません。

ベストアンサー1

これを試して:

<xs:choice>
  <xs:sequence>
    <xs:element name="Elem1" />
    <xs:element name="Elem2" minOccurs="0" />
    <xs:element name="Elem3" minOccurs="0" />
  </xs:sequence>
  <xs:sequence>
    <xs:element name="Elem2" />
    <xs:element name="Elem3" minOccurs="0" />
  </xs:sequence>
  <xs:element name="Elem3" />
</xs:choice>

そうすることで、最初の要素のいずれかを選択し、残りはオプションとなり、2 番目の要素のいずれかを選択し、残りはオプションとなり、3 番目の要素のいずれかを選択するように強制されます。

これで望みどおりの結果が得られるといいのですが。

もちろん、サブシーケンスをグループにまとめると、要素が 1 つ足りないことに気付いた場合に、各シーケンスで要素が重複するのを防ぐことができます。

おすすめ記事