notAllowed 要素
記述を不許可に設定する要素
- 記述を不許可にするための要素です。既にあるパターンの効果を打ち消すのにも使えます。
-
choice要素 を用いた選択肢の「初期値」として使えなくもありませんが、取り扱いには注意が必要です。親要素への効果の波及が著しいため、非常に使いづらい要素の一つとなっております。
-
notAllowed要素 を含んだ構造要素(choice要素 など)の振舞いには、注意が必要です。詳しくは後述します。
- 一応、ルート要素としても記述可能です。そのようにして意味があるかどうかは知りませんが、取り敢えずは出来ます。
- パターン中に記述された(もしくは参照先のマクロに含まれた) notAllowed要素 は、親要素に対して著しい影響を及ぼします。
- grammar 要素の直下には置いてはなりません。
属性
子ノード
考えてみよう!
その 1: choice要素 の中の notAllowed要素
choice要素 の中の notAllowed要素
-
choice要素 の子要素の中に一つ以上の notAllowed要素 が含まれた場合、notAllowed要素 は無視され、その他のパターンのみが適用されます。
- ただし、choice要素 の中に notAllowed要素 もしくは notAllowed要素 と見倣される記述 (notAllowed要素 を子要素に持つ interleave要素 など)のみが存在する場合、その choice要素 自体が、一つの notAllowed要素 と見倣されます。
その 2:
- 原則として、連続する notAllowed要素 は、一つの notAllowed要素 と見倣されます。
-
notAllowed要素 が必然的に適用されるパターンでは、もとのパターンの効果は無視され、全て一つの notAllowed要素 に置き換わります。例えば、notAllowed要素 を一つ以上子要素に有する attribute要素, group要素, interleave要素, oneOrMore要素 がこれに相当します。
-
zeroOrMore要素, optional要素 の子要素に notAllowed要素 が存在していた場合、これらのパターン自体が単に無視されます (notAllowed要素 には置き換わりません)。
-
except要素 の子要素の中に一つ以上の notAllowed要素 が含まれた場合、 except要素 そのものの効果が消えます。
-
notAllowed要素 を一つ以上子要素に持つ element要素 では、要素宣言そのものが破毀されます (の筈ですが、うまく検証プログラムで処理出来ないこともあります)。
参考文献