myGroup > myProject
 

zeroOrMore 要素

0回以上の繰り返しを定義する要素

  • 子要素に記述される一聯のパターンに関し、それらのパターンが任意の回数(0回含む)繰り返して出現することを指示する要素です。
  • XML では、主に要素の中身の定義に対して用います。
  • attribute要素 の直截の親要素として用いた場合、その属性はオプション属性と見倣されます (optional要素 の子要素として記述した場合と同じ)。同名の属性を複数記述出来るようになるわけではありませんので、注意してください。
  • attribute要素 の子孫要素としては用いることが出来ません。
  • grammar 要素の直下には置いてはなりません。
  • スキーマのルート要素に用いることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef 要素の参照先としてのみ利用できます。
  • 要素名に大文字が混じっていますので、記述には注意してください。

属性

lang:occurs 属性

名前空間 lang に属する属性です。繰り返し処理の回数を、事前に設定してください。

  • decode : 指定された回数だけ、繰り返し処理を実行します。
  • encode : 指定された回数だけ、繰り返し処理を実行します(encode 時は必須です)。

lang:occured 属性

名前空間 lang に属する属性です。zeroOrMore の処理の後に設定されます。

  • decode : 繰り返し数の解析結果が、指定された変数に代入されます。
  • encode : 指定できません。

制約

  • optional、oneOrMore、zeroOrMore を入れ子にできる最大数は、「32」です。
  • ref 要素を中身にし、マクロを参照することが出来ます。 ただし、ソースコードの生成前に、define/ref が展開されている必要があります。
  • lang:occurs 属性と、lang:occured 属性を同時に指定することはできません。 どちらか一方を必ず指定してください。
  • lang:occurs 属性に 0 未満の値を指定することはできません。エラーとなります。

子ノード

  • 複数の コンテナ もしくは サブコンテナ を子要素に持つことが出来ます。
  • interleave要素, optional要素, zeroOrMore要素 などを子に持つことも可能です。

考えてみよう!

その 1: 連続する zeroOrMore要素

連続する <span class="codefrag">zeroOrMore</span>要素

連続する zeroOrMore要素 の中身を、一つの zeroOrMore要素 の中身としてまとめることは出来ません。以下に、その例を示します。

例1
<zeroOrMore>
 <ref name="a"/>
</zeroOrMore>
<zeroOrMore>
  <ref name="b"/>
</zeroOrMore>
例2
<zeroOrMore>
  <ref name="a"/>
  <ref name="b"/>
</zeroOrMore>

例1では、「aが1回以上出現した後、bが0回以上出現するパターン (aa…bb…)」であるのに対し、例2では、「aとbが、この順番を保持したまま0回以上出現 (abab…)」となります。

その 2: 出現順番に関して

出現順番に関して
  • choice要素, interleave要素 の子要素でない場合、定義の出現順位は保持されます。
  • zeroOrMore要素 の子要素の中で、choice要素, interleave要素 が存在しない部分は、定義の出現順位は保持されます。

参考文献