次のルールを持つ RelaxNG スキーマを作成しようとしています。
line
要素には、0 個以上の and 要素を含めることができa
ますb
。- すべて
a
の要素には対応するb
要素が必要であり、その逆も同様です。 a
要素は、常に一致するb
要素より前になければなりません。
したがって、以下はすべて有効と見なす必要があります。
<line><a/><b/></line>
<line><a/><a/><b/><b/></line>
<line><a/><a/><b/><a/><b/><b/></line>
一方、以下はすべて無効です。
<line><b/><a/></line>
<line><a/><a/><b/></line>
<line><a/></line>
<line><b/></line>
これは、RelaxNG ではどのように表現できますか? 私の最初の考えは、次のように再帰参照を作成することでした。
element line { pair* }+
pair = a, pair?, b
a = element a { empty }
b = element b { empty }
しかし、Jing はこれを「'pair' への不適切な再帰参照」と見なしています。私は一生、これを解決する方法を理解することはできません! 何か案は?