myGroup > myProject
 

notAllowed 要素

記述を不許可に設定する要素

  • 記述を不許可にするための要素です。既にあるパターンの効果を打ち消すのにも使えます。
  • choice要素 を用いた選択肢の「初期値」として使えなくもありませんが、取り扱いには注意が必要です。親要素への効果の波及が著しいため、非常に使いづらい要素の一つとなっております。
  • notAllowed要素 を含んだ構造要素(choice要素 など)の振舞いには、注意が必要です。詳しくは後述します。
  • 一応、ルート要素としても記述可能です。そのようにして意味があるかどうかは知りませんが、取り敢えずは出来ます。
  • パターン中に記述された(もしくは参照先のマクロに含まれた) notAllowed要素 は、親要素に対して著しい影響を及ぼします。
  • grammar 要素の直下には置いてはなりません。

属性

  • この要素に固有な属性はありません。

子ノード

  • 常に空要素。子ノードを持ちません。

考えてみよう!

その 1: choice要素 の中の notAllowed要素

<span class="codefrag">choice</span>要素 の中の <span class="codefrag">notAllowed</span>要素
  • 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要素 では、要素宣言そのものが破毀されます (の筈ですが、うまく検証プログラムで処理出来ないこともあります)。

参考文献