group 要素として明示します。group 要素の中に様々なパターンを取り込み、 choice 要素などと組み合わせることで、複雑な選択肢を作成することが可能になります。grammar 要素の直下には置いてはなりません。group 要素をルート要素とすることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef 要素の参照先としてのみ利用できます。group 要素の中には、要素や属性の宣言が混在していても構いません。optional, choice, zeroOrMore 各要素など、様々なパターンを子孫要素に入れることが出来ます。ref 要素を中身に記述することによって、マクロを参照出来ます。group 要素が出現しても、パターン出現順序は保持されます。group 要素を活用した一例として、親要素の属性値によって子要素の中身を変化させるスキーマを作成してみます。
<?xml version="1.0"?>
<element name="start" xmlns="http://relaxng.org/ns/structure/1.0">
<choice>
<group>
<attribute name="myway">
<value>1</value>
</attribute>
<element name="Japan-way"><empty/></element>
</group>
<group>
<attribute name="myway">
<value>2</value>
</attribute>
<element name="China-way><empty/></element>
</group>
</choice>
</element>
この場合、以下の文書は妥当な文書となります。
<?xml version="1.0"?> <start myway="1"> <Japan-way/> </start>
<?xml version="1.0"?> <start myway="2"> <China-way/> </start>
ただし、以下の文書は妥当ではありません。
<?xml version="1.0"?> <start myway="lena"> <!-- myway 属性の属性値は1か2のみ --> <Japan-way/> </start>
<?xml version="1.0"?> <start myway="1"> <China-way/> <!-- myway="1" のとき、許されるのは Japan-way 要素のみ --> </start>