group 要素
一聯のパターンを明示する要素
- 一聯の複数のパターンが切り離すことが出来ないものである場合、それらを group要素 を用いて明示します。
- コンテナ や サブコンテナ (XMLなら要素属性値、要素の中身) など様々な定義の中で使うことが出来ます。
- grammar 要素の直下には置いてはなりません。
- スキーマのルート要素に用いることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef 要素の参照先としてのみ利用できます。
属性
- この要素に固有な属性はありません。
子ノード
- 子ノードに様々なパターンを取り込み、choice要素 などと組み合わせることで、複雑な選択肢を作成することが可能になります。
- 子ノードには、 コンテナ (XMLなら要素や属性) や サブコンテナ の宣言が混在していても構いません。
- optional要素, choice要素, zeroOrMore要素 など、様々なパターンを子孫要素に入れることが出来ます。
- group要素 が出現しても、パターン出現順序は保持されます。
- ref 要素を中身にし、マクロを参照することが出来ます。
使用例
例 1: 親要素の属性値によって子要素の中身を変化させるスキーマ
<?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>
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
- 古林 寛, 「group要素 @ ぽかぽか RELAX NG 工房」