7. ABNF リスト拡張: #rule
[RFC5234] の ABNF ルールに対する #rule 拡張は、一部のヘッダーフィールド値の定義において可読性を向上させるために使用されます。
"*" と同様に、コンマ区切りの要素リストを定義するための構文 "#" が定義されています。完全な形式は "
リスト構文を使用するいかなる生成規則においても、送信者は空のリスト要素を生成してはなりません (MUST NOT)。言い換えれば、送信者は次の構文を満たすリストを生成しなければなりません (MUST):
1#element => element *( OWS "," OWS element )
および:
#element => [ 1#element ]
さらに、n >= 1 かつ m > 1 について:
<n>#<m>element => element <n-1>*<m-1>( OWS "," OWS element )
従来のリストルールとの互換性のために、受信者は妥当な数の空のリスト要素を解析して無視しなければなりません (MUST)。それは、値をマージする送信者によるよくある誤りに対処できる程度には十分であり、サービス拒否機構として悪用され得るほど多くはありません。言い換えれば、受信者は次の構文を満たすリストを受け入れなければなりません (MUST):
#element => [ ( "," / element ) *( OWS "," [ OWS element ] ) ]
1#element => *( "," OWS ) element *( OWS "," [ OWS element ] )
空の要素は、存在する要素の数に寄与しません。たとえば、次の ABNF 生成規則が与えられたとします:
example-list = 1#example-list-elmt
example-list-elmt = token ; see Section 3.2.6
そのとき、以下は example-list の有効な値です (区切りのために存在する二重引用符は含みません):
"foo,bar"
"foo ,bar,"
"foo , ,bar,charlie "
対照的に、以下は example-list 生成規則によって少なくとも 1 つの空でない要素が要求されるため、無効な値です:
""
","
", ,"
付録 B は、リスト構文が展開された後の、受信者向けの収集された ABNF を示します。