grammar
要素の直下には置いてはなりません。choice
要素をルート要素とすることが出来ます。ただし、そのスキーマは単独では用いることは出来ず、 externalRef
要素の参照先としてのみ利用できます。interleave
, optional
, zeroOrMore
などとの併用も可能です。ref
要素を中身に記述し、マクロを参照することが出来ます。choice
要素の中の choice
要素の中身は、 choice
要素が無いものとして扱われます。つまり、以下の記述例は、全く同一の機能を有します。
<choice> <ref name="a"/> <choice> <ref name="b"/> <ref name="c"/> </choice> </choice>
<choice> <ref name="a"/> <ref name="b"/> <ref name="c"/> </choice>
notAllowed
要素と、それ以外のパターンを示す要素が同時に子要素である場合、 0個以上のnotAllowed
要素は無視されます。あってもなくても、選択には何ら影響を有しません。
この機能は、モジュールを設計する際に役に立ちます。例えば、デフォルトでは「記述不可能」としておき、モジュールを結合させることで選択肢を設置もしくは増やす、といったことが出来ます。
要素の中身の定義に関し、 empty
要素と、それ以外のパターンを示す要素が同時に子要素である場合、 2個以上の empty
要素は無視されます。ただし、 notAllowed
要素の場合と違い、「空の記述 = 何も書かない状態」も許されることに注意してください(つまり、選択肢がオプション扱いされる)。