myGroup > myProject
 

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>
    

参考文献