group 要素が「順位を保持したグループ化」であるのに対し、 interleave 要素は「順不同のグループ化」を明示する要素であると言えます。attribute 要素の親要素として使用しても意味がありません。ただし、モジュールを用いて属性を増やしたい場合には、この要素の利用価値があるかと思われます。grammar 要素の直下には置いてはなりません。interleave 要素をルート要素とすることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef 要素の参照先としてのみ利用できます。例えば、以下のようなスキーマの記述があったとします。
<element name="doc"> <interleave> <element name="a"><empty/></element> <element name="b"><empty/></element> <element name="c"><empty/></element> </interleave> </element>
上記のスキーマに照らし合わせれば、以下の記述はいずれも妥当なものとなります。
<doc><a/><b/><c/></doc><doc><a/><c/><b/></doc><doc><b/><a/><c/></doc><doc><b/><c/><a/></doc><doc><c/><a/><b/></doc><doc><c/><b/><a/></doc>choice, optional, zeroOrMore などとの併用も可能です。ref 要素を中身にし、マクロを参照することが出来ます。interleave 要素の中の interleave 要素の中身は、 interleave 要素が無いものとして扱われます。つまり、以下の記述例は、全く同一の機能を有します。
<interleave> <ref name="a"/> <interleave> <ref name="b"/> <ref name="c"/> </interleave> </interleave>
<interleave> <ref name="a"/> <ref name="b"/> <ref name="c"/> </interleave>
interleave 要素の子要素に1個以上の empty 要素が存在した場合、それらの empty 要素は、単に無視されます。
interleave 要素の子要素に1個以上の notAllowed 要素が存在した場合、 interleave の内容そのものが無視され、1つの notAllowed 要素として認識されます。
上記の現象は、と説明附けられると思われます。