たぶん、私はこの問題をあまりにも長い間見つめてきました。答えがないのかもしれません。いずれにせよ、私は今ここにいます。
XSD で可能な組み合わせのセットを許可しようとしていますが、あいまいさをもたらさないアプローチを見つけることができないようです。
簡単な正規表現:
foo+ ( bar baz* | bar? baz+ qux* )
foo
が必要です ( 1 つ以上)bar
存在する場合、baz
オプションです ( zero-or-more )baz
存在する場合、bar
オプション ( zero-or-one ) であり、qux
オプション ( zero-or-more )です。qux
存在しなければ存在できbaz
ない
与えられたあいまいさが生じfoo bar baz
ます。
あいまいな XSD ドキュメント:
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="foo" minOccurs="1" maxOccurs="unbounded" />
<xs:choice>
<xs:sequence>
<xs:element name="bar" minOccurs="1" maxOccurs="1" />
<xs:element name="baz" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:sequence>
<xs:element name="bar" minOccurs="0" maxOccurs="1" />
<xs:element name="baz" minOccurs="1" maxOccurs="unbounded" />
<xs:element name="qux" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
適切な測定のためのスクリーン キャプチャ:
今、私はおそらくこれが単に XSD コンテンツ モデルの制約であることに気付き始めています。あいまいさの理由は明らかです。解決策はそうではありません。
私がこれを許可できる方法を誰かが理解できますか?このようなあいまいなシナリオを軽減するために、いくつかのスキーマ設計パターンを使用して、要素を並べ替えることによって?
bar
andの条件依存性baz
は明らかに問題ですが、これを行う他の方法は考えられません。
どうもありがとうございました。
編集:現在、抜け穴を見つけようとして「スキーマコンポーネントの制約:一意の粒子属性」を読んでいます。その他の提案された読書は大歓迎です。