RFC 5234 - Augmented BNF for Syntax Specifications: ABNF
Erweiterte BNF für Syntaxspezifikationen: ABNF
Veröffentlichungsdatum: Januar 2008
Status: Internetstandard (STD 68)
Autoren: D. Crocker (Brandenburg InternetWorking), P. Overell (THUS plc.)
Veraltet: RFC 4234
Zusammenfassung (Abstract)
Internet-Technische Spezifikationen müssen oft eine formale Syntax (Formal Syntax) definieren. Im Laufe der Jahre hat sich eine modifizierte Version der Backus-Naur-Form (BNF), genannt Erweiterte BNF (ABNF, Augmented BNF), bei vielen Internet-Spezifikationen als beliebt erwiesen. Die aktuelle Spezifikation dokumentiert ABNF. Sie schafft ein Gleichgewicht zwischen Kompaktheit und Einfachheit mit angemessener Darstellungskraft. Die Unterschiede zwischen Standard-BNF und ABNF betreffen Benennungsregeln (Naming Rules), Wiederholung (Repetition), Alternativen (Alternatives), Reihenfolgeunabhängigkeit (Order-Independence) und Wertebereiche (Value Ranges). Diese Spezifikation liefert auch zusätzliche Regeldefinitionen und Kodierung für einen Kern-Lexikalanalysator (Core Lexical Analyzer) des Typs, der mehreren Internet-Spezifikationen gemeinsam ist.
Status dieses Memos (Status of This Memo)
Dieses Dokument spezifiziert ein Internet Standards Track Protokoll für die Internet-Gemeinschaft und bittet um Diskussion und Vorschläge zur Verbesserung. Bitte beziehen Sie sich auf die aktuelle Ausgabe der „Internet Official Protocol Standards" (STD 1) für den Standardisierungsstatus und Status dieses Protokolls. Die Verbreitung dieses Memos ist unbegrenzt.
Inhaltsverzeichnis (Table of Contents)
- 1. Introduction (Einführung)
- 2. Rule Definition (Regeldefinition)
- 2.1. Rule Naming (Regelbenennung)
- 2.2. Rule Form (Regelform)
- 2.3. Terminal Values (Terminalwerte)
- 2.4. External Encodings (Externe Kodierungen)
- 3. Operators (Operatoren)
- 3.1. Concatenation (Verkettung)
- 3.2. Alternatives (Alternativen)
- 3.3. Incremental Alternatives (Inkrementelle Alternativen)
- 3.4. Value Range Alternatives (Wertebereichsalternativen)
- 3.5. Sequence Group (Sequenzgruppe)
- 3.6. Variable Repetition (Variable Wiederholung)
- 3.7. Specific Repetition (Spezifische Wiederholung)
- 3.8. Optional Sequence (Optionale Sequenz)
- 3.9. Comment (Kommentar)
- 3.10. Operator Precedence (Operatorrangfolge)
- 4. ABNF Definition of ABNF (ABNF-Definition von ABNF)
- 5. Security Considerations (Sicherheitsüberlegungen)
- 6. References (Referenzen)
- 6.1. Normative References (Normative Referenzen)
- 6.2. Informative References (Informative Referenzen)
Anhänge (Appendices)
- Appendix A. Acknowledgements (Danksagungen)
- Appendix B. Core ABNF of ABNF (Kern-ABNF von ABNF)
- B.1. Core Rules (Kernregeln)
- B.2. Common Encoding (Gemeinsame Kodierung)
ABNF-Kernkonzepte
Was ist ABNF?
ABNF (Augmented BNF) ist eine Metasprache (Metalanguage), die zur Definition von Syntax verwendet wird und in Internet-Protokollspezifikationen weit verbreitet ist. Sie ist eine Erweiterung der klassischen Backus-Naur-Form (BNF).
Grundlegende Syntax
Regeldefinition:
rulename = elements
Beispiel:
postal-address = name-part street zip-part
name-part = *(personal-part SP) last-name [SP suffix] CRLF
Kernoperatoren
| Operator | Syntax | Beschreibung | Beispiel |
|---|---|---|---|
| Verkettung | Rule1 Rule2 | Sequenzielle Verkettung | "http" "://" |
| Alternativen | Rule1 / Rule2 | Eines auswählen | "yes" / "no" |
| Inkr. Alternative | Rule1 =/ Rule2 | Alternative hinzufügen | digit =/ "A" |
| Wertebereich | %c##-## | Zeichenbereich | %x30-39 (0-9) |
| Optional | [Rule] | Null oder einmal | ["s"] |
| Wiederholung | *Rule | Null oder mehr | *DIGIT |
| Spez. Wdh. | nRule | Genau n mal | 3DIGIT |
| Bereichs-Wdh. | n*mRule | n bis m mal | 1*3DIGIT |
| Gruppierung | (Rule1 Rule2) | Regeln gruppieren | ("http" / "https") |
| Kommentar | ; comment | Kommentar | ; Dies ist ein Kommentar |
Kernregeln (Core Rules)
ABNF definiert einen Satz von Kernregeln, die in verschiedenen Spezifikationen häufig verwendet werden:
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DQUOTE = %x22 ; " (doppeltes Anführungszeichen)
SP = %x20 ; Leerzeichen
HTAB = %x09 ; horizontaler Tabulator
WSP = SP / HTAB ; Leerraum
LWSP = *(WSP / CRLF WSP) ; linearer Leerraum
VCHAR = %x21-7E ; sichtbare (druckbare) Zeichen
CHAR = %x01-7F ; beliebiges 7-Bit US-ASCII-Zeichen
OCTET = %x00-FF ; 8-Bit-Daten
CTL = %x00-1F / %x7F ; Steuerzeichen
CR = %x0D ; Wagenrücklauf
LF = %x0A ; Zeilenvorschub
CRLF = CR LF ; Wagenrücklauf Zeilenvorschub
BIT = "0" / "1"
Praktische Beispiele
Beispiel 1: Einfache Regel
greeting = "Hello" SP name
name = 1*ALPHA
Entspricht: Hello John, Hello Alice
Beispiel 2: E-Mail-Adresse (vereinfacht)
email = local-part "@" domain
local-part = 1*(ALPHA / DIGIT / "." / "-" / "_")
domain = subdomain *("." subdomain)
subdomain = 1*(ALPHA / DIGIT / "-")
Entspricht: [email protected], [email protected]
Beispiel 3: HTTP-Version
HTTP-version = "HTTP/" 1*DIGIT "." 1*DIGIT
Entspricht: HTTP/1.1, HTTP/2.0
Beispiel 4: URI-Schema
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
Entspricht: http, https, ftp, mailto
Wiederholungsoperatoren erklärt
| Notation | Bedeutung | Beispiel | Entspricht |
|---|---|---|---|
*Rule | 0 oder mehr | *DIGIT | "", "1", "123" |
1*Rule | 1 oder mehr | 1*DIGIT | "1", "123" |
2*4Rule | 2 bis 4 mal | 2*4DIGIT | "12", "123", "1234" |
3Rule | Genau 3 mal | 3DIGIT | "123" |
[Rule] | 0 oder 1 mal | ["s"] | "", "s" |
Operatorrangfolge
Von höchster bis niedrigster:
- Regelnamen, Gruppen -
rulename,(group) - Wiederholung -
*,n*m,n - Wertebereich, Zeichenketten -
%c##-##,"string" - Verkettung -
Rule1 Rule2 - Alternativen -
Rule1 / Rule2
Beispiel:
foo = "a" *("b" / "c")
Entspricht: a, ab, ac, abc, abb, acc, abbc, ...
Terminalwertdarstellung
Zeichenketten
command = "GET" / "POST"
Numerische Werte (Hexadezimal)
CR = %x0D ; Wagenrücklauf
LF = %x0A ; Zeilenvorschub
Numerische Bereiche
DIGIT = %x30-39 ; 0-9
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
Sequenzwerte
CRLF = %x0D.0A ; Wagenrücklauf Zeilenvorschub Sequenz
ABNF vs BNF Vergleich
| Merkmal | BNF | ABNF |
|---|---|---|
| Regeldefinition | ::= | = |
| Alternativen | ` | ` |
| Gruppierung | <> | () |
| Optional | - | [] |
| Wiederholung | - | *, n*m |
| Terminalwerte | Anführungszeichen | Anführungszeichen + numerisch |
| Kommentare | Variiert | ; |
Praktische Anwendungen
ABNF wird weithin verwendet zur Definition von:
- HTTP (RFC 7230, 7231, usw.)
- URI (RFC 3986)
- SMTP (RFC 5321)
- SIP (RFC 3261)
- JSON (RFC 7159)
- Fast alle IETF-Protokolle
Verwandte Ressourcen (Related Resources)
- Offizieller Text:
https://www.rfc-editor.org/rfc/rfc5234.txt - Offizielle Seite:
https://datatracker.ietf.org/doc/html/rfc5234 - Standard: STD 68
- Veraltet: RFC 4234
- Verwandte RFCs:
- RFC 2234 (Frühere Version von ABNF)
- RFC 7405 (Groß-/Kleinschreibungsunterstützung in ABNF)
Wichtiger Hinweis: ABNF ist ein fundamentales Werkzeug für Internet-Protokollspezifikationen. Das Verständnis von ABNF ist entscheidend für das Lesen und Implementieren von RFC-Spezifikationen!