Passa al contenuto principale

7. Estensione di lista ABNF: #rule

Un'estensione #rule alle regole ABNF di [RFC5234] è usata per migliorare la leggibilità nelle definizioni di alcuni valori dei campi di intestazione.

È definito un costrutto "#", simile a "*", per definire elenchi di elementi delimitati da virgole. La forma completa è "#element", che indica almeno e al massimo elementi, ciascuno separato da una singola virgola (",") e da spazi bianchi opzionali (OWS).

In qualsiasi produzione che usi il costrutto di lista, un mittente MUST NOT generare elementi di lista vuoti. In altre parole, un mittente MUST generare liste che soddisfino la seguente sintassi:

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

e:

#element => [ 1#element ]

e per n >= 1 e m > 1:

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

Per compatibilità con le regole di lista legacy, un destinatario MUST analizzare e ignorare un numero ragionevole di elementi di lista vuoti: un numero sufficiente a gestire gli errori comuni dei mittenti che uniscono i valori, ma non così elevato da poter essere usato come meccanismo di denial-of-service. In altre parole, un destinatario MUST accettare liste che soddisfino la seguente sintassi:

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

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

Gli elementi vuoti non contribuiscono al conteggio degli elementi presenti. Ad esempio, date queste produzioni ABNF:

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

Allora i seguenti sono valori validi per example-list (escluse le virgolette doppie, che sono presenti solo per delimitazione):

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

Al contrario, i seguenti valori sarebbero non validi, poiché la produzione example-list richiede almeno un elemento non vuoto:

""
","
", ,"

L'Appendice B mostra l'ABNF raccolto per i destinatari dopo che i costrutti di lista sono stati espansi.