次のような RelaxNG スキーマがあります。
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="xml">
<zeroOrMore>
<element name="multi">
<data type="string"/>
</element>
</zeroOrMore>
<optional>
<element name="optional">
<data type="string"/>
</element>
</optional>
</element>
</start>
</grammar>
multi
0-Nタグを許可したいのですが、 0-1 optional
. multi が optional の前にある限り問題なく動作しますが、 RNGでは相対的な順序が重要であるため、後に来ると失敗します。
有効:
<xml>
<optional/>
</xml>
<xml>
<multi/>
<multi/>
<optional/>
</xml>
無効:
<xml>
<optional/>
<multi/>
<multi/>
</xml>
では、どうすれば任意の順序を許可し、制約を保持できますか? 全体をブロックでラップしてみました<zeroOrMore><choice>
。これにより、任意の順序が許可されますが、任意の数のタグを通過させることもできます。