empty 要素
空の記述を定義する要素
- XML文書の要素の中身など、ある箇所において「空の記述」を定義する要素です。
- しかし大抵は、XML文書の空要素の定義もしくは属性セットの初期値の定義内で使われることが多いかと思われます。
- ルート要素とすることが出来ます。利用価値の是非はともかく、一応可能です。
- コンテナ や サブコンテナ (XMLなら要素属性値、要素の中身) など様々な定義の中で使うことが出来ます。
- grammar 要素の直下には置いてはなりません。
属性
- この要素に固有な属性はありません。
子ノード
- 常に空要素。子ノードを持ちません。
考えてみよう!
その 1: パターン内での empty要素 の振舞い
- 複数の連続する empty要素 は、一つの empty要素 と見倣されます。
- interleave要素, group要素, oneOrMore要素, zeroOrMore要素, optional要素 内の子要素に empty要素 が含まれていた場合、その empty要素 は単に無視されます。ただし、empty要素 しか存在しない場合は、そのパターンは、一つの empty要素 と見倣されます。
- choice要素 内の empty要素 に関しては、後述します。
その 2: choice要素 内
- choice要素 の子要素が全て empty要素 (あるいはそれと見倣されるもの)であった場合、choice要素 自体が一つの一つの empty要素 と見倣されます。
-
choice要素 の子要素に、他のパターンに混じって empty要素 が存在した場合、「記述無し」という定義が選択肢の中に入ります。例えば、次のような記述を考えてみます。
<choice> <value>うどん</value> <value>そば</value> <value>ラーメン</value> <empty/> </choice>
この場合、empty要素 は無視されず、「うどん」「そば」「ラーメン」という値が記述出来るのに加え、「何も記述しない」パターンをも許してしまいます。とりわけ、必須記法を choice要素 で選択させる場合には、気を附けなければなりません。
その 3: element要素 内
element要素 の子要素が empty要素 (と属性宣言のパターン)のみである場合、その element要素 で定義される要素は空要素と定義されます。
参考文献
- James Clark and Makoto Murata, ISO/IEC FDIS 19757-2 Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG
- 古林 寛, 「empty要素 @ ぽかぽか RELAX NG 工房」