name = definition
ルールの名前(name)は、単に名前そのもので("<"や">"では囲まない)、その定義(definition)とは「=」で区切られる。スペースは、継続行のインデントが1行以上にわたるルールの定義を示すために使われる場合にのみ意味を持つ。いくつかの基本的なルールは、SP、TAB、CRCF、DIGIT、ALPHAなどの大文字で表現されている。角括弧("<"や">")は、その存在がルール名の使用を識別するのに役立つ場合には、定義の中で使用される。
"literal"
引用符で囲まれたテキストはリテラルテキストを意味する。特に記述されていなければ、テキストは大文字、小文字の区別をしない。
rule1 | rule2
("|")をはさむ要素は、選択可能なものである。例えば、"yes | no"は、yesとnoのどちらでもよいということを意味する。
(rule1 rule2)
括弧で囲まれた要素は、単一の要素として扱われる。即ち、"(elem (foo | bar) elem)"は、"elem foo elem"と"elem bar elem"というトークンの列を表現する。
*rule
"*"という文字は、繰り返しの要素の前に置かれる。上記の例の完全な表現形式は、"<n>*<m>element"で、最低<n>回と最大でも<m>回要素が出現することを示す。デフォルトの値は、0と無限であり、"*(element)"は、0も含めていかなる数の要素にも対応する。"1*element"は少なくとも1個の要素に対応し、"1*2element"は1つまたは2つの要素に対応する。
[rule]
箱括弧は、オプションの要素を示す。"[foo bar]"は、"*1(foo bar)"と同じである。
N rule
"<n>(element)"は繰り返しの特殊な形態であり、"<n>*<n>(element)"と同じである。これは、(element)が<n>回出現することを表す。2DIGITは、2桁の数字であり、3ALPHAは3つのアルファベット文字列である。
#rule
構造子"#"は、"*"と似た意味を持ち、要素のリストを定義するために定義されている。完全な表現形式は、"<N>#<M>ELEMENT"であり、1つ以上の(",")で区切られた少なくとも<N>最大でも<M>の要素を表す。区切りには、いくつかのスペースの列(LWS)が加わってもよい。この記法は、リストの通常の表現形態を非常に簡単にする。例えば、 "( *LWS ELEMENT *( *LWS "," *LWS ELEMENT ))"のようなルールは、"1#ELEMENT"として示すことができる。この構造子が使われる場合には、ヌル要素が許容されている。しかし、存在する要素の個数には数えられない。例えば、"(ELEMENT), , (ELEMENT)"は許されているが、2つの要素としてしか数えられない。このため、少なくとも1つの要素が要求されている場合には、最低1つのヌルでない要素が存在しなければならない。デフォルトの値は、0と無限であり、"#(ELEMENT)"は0を含めて如何なる数の要素のリストにもなりえる。"1#ELEMENT"は、少なくとも1つ以上の要素を表現し、"1#2ELEMENT"は1または2の要素を表現する。
; comment
ルールテキストの右側に置かれたセミコロンは、それ以降から行末までがコメントであることを示す。これは、仕様の規定に対して有用な注釈をつけるための簡便な方法である。
OCTET = <すべての8ビット文字> CHAR = <すべてのASCII文字(octets 0 - 127)> UPALPHA = <すべてのASCIIの大文字(AからZまで)> LOALPHA = <すべてのASCIIの小文字("a"から"z"まで)> ALPHA = UPALPHA | LOALPHA DIGIT = <すべてのASCII数字("0"から"9"まで)> CTL = <すべてのASCIIコントロール文字(octets 0 - 31)及びDEL(127)> CR = <ASCII CR, キャリッジリターン(13)> LF = <ASCII LF, ラインフィード(10)> SP = <ASCII SP, スペース(32)> HTAB = <ASCII HT, タブ(9)> <"> = <ASCII ダブルクオータ> CRLF = LF (HTTP通信の場合) = CR LF (HTTPS通信の場合)
本プロトコルのヘッダーを複数の行に分割する場合には、継続行はスペースの並びで始まるようにしなければならない。連続したスペースは、意味的にはSPと同じ(改行による折り返しも含めて)である。
LWS = [CRLF] ( SP | HTAB )
多くの本プロトコルのヘッダーフィールドの値は、LWSまたは特殊文字により区切られる。これらの特殊文字をパラメーターの値として使用する場合には、引用符つきの文字列に入れておかなくてはならない。
word = token | quoted-string token = 1*<CTLsまたはtspecialsを除くすべてのCHAR> tspecials = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | SP | HTAB
テキストの文字列は、ダブルクオータまたは角括弧を用いて引用されている場合には、1つの単語として取り扱われる。
quoted-string = ( <"> *(qdtext) <"> ) | ( "<" *(qatext) ">" ) qdtext = <<">とCTLsを除くすべてのCHAR、ただしLWSは含めるものとする> qatext = <"<"、 ">"とCTLsを除く,すべてのCHAR、ただしLWSは含めるものとする>
以下のテキストルールは、記述的なフィールド内容に対してのみ用いられる。
text = <CTLsを除くすべてのOCTET、ただしLWSは含めるものとする>