Aller au contenu principal

7. Extension de liste ABNF : #rule

Une extension #rule apportée aux règles ABNF de [RFC5234] est utilisée pour améliorer la lisibilité dans les définitions de certaines valeurs de champ d'en-tête.

Une construction « # » est définie, de façon semblable à « * », pour définir des listes d'éléments délimitées par des virgules. La forme complète est « #element », indiquant au moins et au plus éléments, chacun séparé par une seule virgule (« , ») et un espace blanc facultatif (OWS).

Dans toute production qui utilise la construction de liste, un expéditeur MUST NOT générer d'éléments de liste vides. Autrement dit, un expéditeur MUST générer des listes satisfaisant la syntaxe suivante :

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

et :

#element => [ 1#element ]

et pour n >= 1 et m > 1 :

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

Pour la compatibilité avec les règles de liste héritées, un destinataire MUST analyser et ignorer un nombre raisonnable d'éléments de liste vides : assez pour gérer les erreurs courantes d'expéditeurs qui fusionnent des valeurs, mais pas assez pour qu'ils puissent être utilisés comme mécanisme de déni de service. Autrement dit, un destinataire MUST accepter les listes satisfaisant la syntaxe suivante :

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

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

Les éléments vides ne contribuent pas au décompte des éléments présents. Par exemple, étant donné ces productions ABNF :

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

les valeurs suivantes sont alors valides pour example-list (guillemets doubles non compris, ceux-ci n'étant présents que pour la délimitation) :

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

En revanche, les valeurs suivantes seraient invalides, puisqu'au moins un élément non vide est requis par la production example-list :

""
","
", ,"

Appendix B présente la grammaire ABNF collectée pour les destinataires, après développement des constructions de liste.