mixed 要素

テキスト(ノード)の混在を許す要素

特殊例

empty 要素, text 要素もしくは attribute 要素だけを含む mixed 要素は、単一の text 要素と見倣されます。

具体例

例1

説明要素の中に、インライン要素として 名前, 所属, 場所各要素がこの順番で出現するようにさせるためには、以下のようなスキーマ(の断片)を作成します。実際の文書の例も示します。

スキーマ
<element name="説明">
 <mixed>
  <element name="所属"><text/></element>
  <element name="名前"><text/></element>
  <element name="場所"><text/></element>
 </mixed>
</element>
妥当な文書(の断片)例
<説明>
今日、<所属>テニス部</所属><名前>バッツ</名前>は、
 <場所>202号教室</場所>にて会合に参加している。
</説明>

例2

interleave, zeroOrMore 各要素などと組み合わせることにより、より高度な表現が可能になります。例えば、a要素と b 要素が任意のテキストを折り混ぜて任意の位置に任意の個数だけ並べられるようにするには、以下のように記述します。参考までに、mixed 要素を使わない例も併せて示します。

mixed 要素を使った例
<element name="element">
 <mixed>
  <interleave>
   <zeroOrMore>
    <element name="a"><text/></element>
   </zeroOrMore>
   <zeroOrMore>
    <element name="b"><text/></element>
   </zeroOrMore>
  </interleave>
 </mixed>
</element>
choice 要素を使った例
<element name="element">
 <zeroOrMore>
  <choice>
    <element name="a"><text/></element>
    <element name="b"><text/></element>
    <text/>
  </choice>
 </zeroOrMore>
</element>

上記の例では、 choice 要素を用いた方がすっきりしたものが出来ます。ただし、「どれかを必須要素としたい」場合などは、 choice 要素を使うことは出来ません。

例えば、「インライン要素a, b要素があり、a 要素は0個以上、 b 要素は一つだけ必ず出現しなければならない」というパターンを作りたい場合は、 mixedinterleave 各要素を使う必要があるでしょう。以下にスキーマの例を示します。

<element name="element">
 <mixed>
  <interleave>
   <zeroOrMore>
    <element name="a"><text/></element>
   </zeroOrMore>
   <element name="b"><text/></element>
  </interleave>
 </mixed>
</element>