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要素 では、要素宣言そのものが破毀されます (の筈ですが、うまく検証プログラムで処理出来ないこともあります)。
 
    
  
 
参考文献