2

次のルールを持つ RelaxNG スキーマを作成しようとしています。

  1. line要素には、0 個以上の and 要素を含めることができaますb
  2. すべてaの要素には対応するb要素が必要であり、その逆も同様です。
  3. 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' への不適切な再帰参照」と見なしています。私は一生、これを解決する方法を理解することはできません! 何か案は?

4

1 に答える 1