メインコンテンツまでスキップ

2. Rule Definition (ルール定義)

2.1. Rule Naming (ルール命名)

ルールの名前は、名前自体にすぎません。つまり、アルファベット文字で始まり、その後にアルファベット、数字、およびハイフン (ダッシュ) の組み合わせが続く文字列です。

ルール名は大文字小文字を区別しません。

ルール名 <rulename>, <Rulename>, <RULENAME>, および <rUlENamE> はすべて同じルールを指します。

元のBNFとは異なり、山括弧 ("<", ">") は必須ではありません。ただし、ルール名の使用を識別するのに役立つ場合は、ルール名の周りに山括弧を使用してもよい (MAY) です。これは通常、自由形式の文章におけるルール名の参照、または以下の繰り返しに関する議論で示されているように、空白で区切られていない文字列に結合する部分的なルールを区別する場合に限定されます。

2.2. Rule Form (ルール形式)

ルールは次のシーケンスで定義されます:

name = elements crlf

ここで、<name> はルールの名前、<elements> は1つ以上のルール名または終端仕様 (Terminal Specifications)、<crlf> は行末インジケータ (キャリッジリターンの後にラインフィード) です。

等号 (=) は、名前とルールの定義を分離します。要素 (Elements) は、本文書で定義されているさまざまな演算子 (代替や繰り返しなど) に従って組み合わされた、1つ以上のルール名および/または値定義のシーケンスを形成します。

視覚的な便宜のため、ルール定義は左揃えされます。ルールが複数行を必要とする場合、継続行はインデントされます。左揃えとインデントは、ABNFルールの最初の行に対して相対的であり、文書の左余白と一致する必要はありません。

2.3. Terminal Values (終端値)

ルールは終端値 (Terminal Values) の文字列に解決され、これは時に文字 (Characters) と呼ばれます。ABNFでは、文字は単に非負整数です。特定のコンテキストでは、値から文字セット (ASCIIなど) への特定のマッピング (エンコーディング) が指定されます。

終端は1つ以上の数値文字で指定され、それらの文字の基数解釈が明示的に示されます:

b = 2進数
d = 10進数
x = 16進数

したがって:

CR  = %d13        ; 10進数でのキャリッジリターン
CR = %x0D ; 16進数でのキャリッジリターン

リテラルテキスト文字列は引用符で囲んで直接指定されます。

これらの文字列は大文字小文字を区別せず、文字セットはUS-ASCIIです。

したがって:

command = "command string"

は次と同等です:

command = "Command" / "COMMAND" / "command"

などなど。

連結値

このような値の連結文字列は、文字を区切るためにピリオド (".") を使用してコンパクトに指定できます:

CRLF = %d13.10    ; キャリッジリターンラインフィードシーケンス

値範囲

値の範囲は、ハイフン ("-") を使用して指定できます:

DIGIT = %x30-39   ; 0-9
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z

2.4. External Encodings (外部エンコーディング)

終端値文字の外部表現は、ストレージまたは伝送環境の制約に応じて異なります。したがって、同じABNFベースの文法は、7ビットUS-ASCII環境用、バイナリオクテット環境用、および16ビットUnicodeが使用される場合のさらに別の外部エンコーディングなど、複数の外部エンコーディングを持つ可能性があります。エンコーディングの詳細はABNFの範囲外ですが、付録Bは、インターネットの多くで一般的であった7ビットUS-ASCII環境の定義を提供しています。

外部エンコーディングを構文から分離することにより、同じ構文に対して代替エンコーディング環境を使用できることが意図されています。

注意: ABNF文字列は大文字小文字を区別し、リテラルテキスト文字列は大文字小文字を区別しません。これは、スキーム名が大文字小文字を区別しないが、パスコンポーネントが大文字小文字を区別する特定のタイプのURI仕様にとって重要です。