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
要素として認識されます。
上記の現象は、と説明附けられると思われます。