1

RelaxNG では、次のような構造を記述したいと思います。

<parent>
    <subelem1>
    <subelem1>
    <subelem1>
    ...
</parent>

また:

<parent>
    <subelem2>
    <subelem2>
    <subelem2>
    ...
</parent>

次のrngで試しました:

<rng:element name="parent">
    <rng:choice>
        <rng:zeroOrMore>
            <rng:ref name="subelem1"/>
        </rng:zeroOrMore>
        <rng:zeroOrMore>
            <rng:ref name="subelem2"/>
        </rng:zeroOrMore>
    </rng:choice>
</rng:element>

しかしlxml、Pythonで確認すると、エラーメッセージしか表示されませんDid not expect element subelem1 there

何が問題なのですか?

4

1 に答える 1

1

私はあなたのものとは少し異なるスキーマを使用しましたが、機能は同じでなければなりません:

<rng:grammar 
    xmlns:rng="http://relaxng.org/ns/structure/1.0"
    xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <rng:start>
        <rng:ref name="dparent"/>
    </rng:start>

    <rng:define name="dparent">
    <rng:element name="parent">
        <rng:choice>
            <rng:zeroOrMore>
                <rng:element name="subelem2">
                    <rng:empty/>
                </rng:element>
            </rng:zeroOrMore>
            <rng:zeroOrMore>
                <rng:element name="subelem1">
                    <rng:empty/>
                </rng:element>
            </rng:zeroOrMore>
        </rng:choice>
    </rng:element>

    </rng:define>

これにより、 jingxmllint (私の記憶が正しければ Python の lxml と同様に libxml2 を使用) を使用して、サンプル ドキュメントの両方が正常に検証されます。あなたの完全な文法 (一部しか投稿していないと思います) を上記と比較することをお勧めします。また、名前空間を修正しました (choice要素が 1 つではありませんでした)。lxmlそれでも検証できない場合は、文法ではなく問題があることをお勧めします。

于 2011-10-26T14:33:16.553 に答える