Zum Hauptinhalt springen

7. ABNF-Listenerweiterung: #rule

Eine #rule-Erweiterung der ABNF-Regeln von [RFC5234] wird verwendet, um die Lesbarkeit in den Definitionen einiger Header-Feldwerte zu verbessern.

Ein Konstrukt "#" ist definiert, ähnlich wie "*", zum Definieren durch Kommas begrenzter Listen von Elementen. Die vollständige Form ist "#element", was mindestens und höchstens Elemente anzeigt, die jeweils durch ein einzelnes Komma (",") und optionalen Whitespace (OWS) getrennt sind.

In jeder Produktion, die das Listenkonstrukt verwendet, darf ein Absender KEINE leeren Listenelemente erzeugen. Mit anderen Worten, ein Absender MUSS Listen erzeugen, die die folgende Syntax erfüllen:

1#element => element *( OWS "," OWS element )

und:

#element => [ 1#element ]

und für n >= 1 und m > 1:

<n>#<m>element => element <n-1>*<m-1>( OWS "," OWS element )

Zur Kompatibilität mit alten Listenregeln muss ein Empfänger eine angemessene Anzahl leerer Listenelemente parsen und ignorieren: genug, um gängige Fehler von Absendern zu behandeln, die Werte zusammenfassen, aber nicht so viel, dass sie als Denial-of-Service-Mechanismus verwendet werden könnten. Mit anderen Worten, ein Empfänger MUSS Listen akzeptieren, die die folgende Syntax erfüllen:

#element => [ ( "," / element ) *( OWS "," [ OWS element ] ) ]

1#element => *( "," OWS ) element *( OWS "," [ OWS element ] )

Leere Elemente tragen nicht zur Anzahl der vorhandenen Elemente bei. Beispielsweise sind mit diesen ABNF-Produktionen:

example-list      = 1#example-list-elmt
example-list-elmt = token ; see Section 3.2.6

die folgenden Werte gültige Werte für example-list (ohne die doppelten Anführungszeichen, die nur zur Abgrenzung vorhanden sind):

"foo,bar"
"foo ,bar,"
"foo , ,bar,charlie "

Im Gegensatz dazu wären die folgenden Werte ungültig, da die Produktion example-list mindestens ein nicht leeres Element erfordert:

""
","
", ,"

Anhang B zeigt die gesammelte ABNF für Empfänger, nachdem die Listenkonstrukte expandiert wurden.