2

たぶん、私はこの問題をあまりにも長い間見つめてきました。答えがないのかもしれません。いずれにせよ、私は今ここにいます。

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 ツリー


今、私はおそらくこれが単に XSD コンテンツ モデルの制約であることに気付き始めています。あいまいさの理由は明らかです。解決策はそうではありません。

私がこれを許可できる方法を誰かが理解できますか?このようなあいまいなシナリオを軽減するために、いくつかのスキーマ設計パターンを使用して、要素を並べ替えることによって?

barandの条件依存性bazは明らかに問題ですが、これを行う他の方法は考えられません。

どうもありがとうございました。


編集:現在、抜け穴を見つけようとして「スキーマコンポーネントの制約:一意の粒子属性」を読んでいます。その他の提案された読書は大歓迎です。

4

1 に答える 1

4

IIRC コンピューター サイエンスには、あいまいな文法はすべて明確な文法として書き直すことができるという定理があるため、それが可能であるという仮説から始めてください。ただし、明確な文法は、非常に複雑な場合があります。

これを処理するための良いアプローチは、文法の「鉄道図」、つまり遷移を伴う有限状態機械を描くことだと思います。次に、このマシンで同じ記号でラベル付けされた 2 つの遷移を持つ状態を見つけたら、それらの両方の遷移を受け入れる新しい状態を構築する必要があります。CS の文献では、このアルゴリズムは「決定化」と呼ばれています。

ホワイトボードを使わずに説明する方がおそらく簡単なもう 1 つのアプローチは、選択した 2 つのブランチに共通するものを因数分解することから始めることです。コンテンツの最初の要素にヒットしたとき、それはバーまたはバズのいずれかでなければなりません。したがって、bar で始まる選択肢と baz で始まる選択肢の 2 つを書きます。

私が見る限り、あなたのコンテンツ モデルは明確なモデルと同等です

(bar, (baz+, qux*)?) | (baz+, qux*)

しかし、私はそれを注意深くチェックします...

于 2012-05-15T07:59:23.607 に答える