interleave の意味と処理
20050721 -KM-
1) RELAX NG の仕様に出ている例を読み解くと
(interleaves 1)
( ) interleaves ( ); ( )
(interleaves 2)
m1 interleaves m2; m3
-------------------------------
m4, m1 interleaves m4, m2; m3
(interleaves 3)
m1 interleaves m2; m3
-------------------------------
m4, m1 interleaves m2; m4, m3
「例えば, と のインタリーブは ,
及び である。」の証明
(a) m1=(), m2=(), m3=(), m4= とすると
(interleave 1) より interleaves ; ()
(interleave 2) より interleaves ();
(a-1a) m1=, m2=(), m3=, m4= とすると
(interleave 1) より interleaves ; ()
(interleave 2) より interleaves ;
(a-1a-1b) m1=, m2=(), m3=, m4= とすると
(interleave 1) より interleaves ; ()
(interleave 2) より interleaves ; <== (*)
(a-1a) m1=, m2=(), m3=, m4= とすると
(interleave 1) より interleaves ; ()
(interleave 2) より interleaves ;
(a-1a) m1=, m2=, m3=, m4= とすると
(interleave 1) より interleaves ; <== (*)
(interleave 2) より interleaves ;
(b) m1=(), m2=(), m3=(), m4= とすると
(interleave 1) より interleaves ; ()
(interleave 2) より interleaves ();
(b-1a) m1=, m2=, m3=(), m4= とすると
(interleave 1) より interleaves ; ()
(interleave 2) より interleaves ;
(b-1a-2a) m1=, m2=, m3=, m4= とすると
(interleave 1) より interleaves ; <== (*)
(interleave 2) より interleaves ;
2) mappingSchema では、何が "列" なだろう?
bit, byte, element が対等な関係が良い。
3) パターン
は、 にマッチするので注意が必要。
4) パターン
が、 や にマッチしたりすることはありません。
5) interleave の処理で意味を持つのは、
(a) interleave の子 (その数だけ interelave 器を作る)
(b) interleave の子からみて、自分自身を含む直近のコンテナ
例えば、
interleave - bit(a,b)
interleave - oneOrMore(a) - bit(b)
です。