optional 要素

出現の有無を任意にする要素

注意

連続する optional 要素

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

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

例1では、「aとbそれぞれが任意出現パターン」であるのに対し、例2では、「aとbとの並びが任意出現」となります。それぞれのパターンを任意出現パターンとして定義したい場合は、面倒でも独立した optional 要素の子要素として記述しなければなりません。

出現順番に関して

choice, interleave 各要素の子要素でない場合、定義の出現順番は保持されます。例えば、以下のスキーマを考えます。

<element name="p">
 <optional>
  <element name="a"><empty/></element>
 </optional>
 <optional>
  <element name="b"><empty/></element>
 </optional>
</element>

上記のスキーマに則った場合、以下の文書は妥当とはなりません。

<p><b/><a/></p>

つまり「オプション扱い」になると言っても、順序まで任意になるわけではないので、注意してください(順序を任意にしたい場合は、 choice, interleave 各要素の子要素とする必要があります)。