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>