これはより一般的なXMLスキーマの質問ですが、XMLスキーマでフィールドの依存関係を指定する場合とその方法を教えてください。たとえば、fieldAが提供されている場合、fieldBが必要であるとどのように言いますか?
2 に答える
<choice>および/または<sequence>を使用してこれを偽造することができます。たとえば、fieldAだけでなく、nothing、fieldB、またはfieldAとfieldBのいずれかを許可できます。これは重複につながる可能性があり、complexTypeを定義することで防ぐことができます。
この種のオプションは、「フィールド」が XML でどのように表現されるか、および使用している XSD のバージョンによって異なります。
fieldA
とが要素である場合fieldB
、適切なコンテンツ モデルに次の形式の構造を含めるとうまくいきます。
<sequence minOccurs="0">
<element ref="tns:fieldA" minOccurs="0"/>
<element ref="tns:fieldB"/>
</sequence>
(必要に応じて、2 つの要素の参照を別の順序で表示することもできます。) Erik Hesselink が、これが重複につながる可能性があることをなぜ心配しているのか、または彼が心配している重複の形式は明らかではありません。
fieldB
要素を作成し、その要素fieldA
の (オプションの?) 属性にすると、必要な共起制約が自動的に従います。
これらを両方の属性にすると、XSD 1.0 では共起制約を適用できなくなります。一部の人々は、そのようなことを処理するために Schematron に頼っています。XSD 1.1 では、この状況で制約を適用するためのオプションにはxs:assert
、条件付き型割り当てが含まれます。