RFC5322 (formato messaggio Internet) Errore regola ABNF?

1

Recentemente ho studiato Internet Message Format in origine RFC2822 e rFC5322 . Stavo guardando la definizione di spazio vuoto di piegatura .

Each header field is logically a single line of characters comprising the field name, the colon, and the field body. For convenience however, and to deal with the 998/78 character limitations per line, the field body portion of a header field can be split into a multiple-line representation; this is called "folding". The general rule is that wherever this specification allows for folding white space (not simply WSP characters), a CRLF may be inserted before any WSP.

For example, the header field:

Subject: This is a test

can be represented as:

Subject: This
  is a test

La definizione della regola è nella notazione ABNF e come segue:

FWS = ([*WSP CRLF] 1*WSP) / obs-FWS ; Folding white space

WSP è uno spazio bianco, CRLF è ritorno a capo e avanzamento riga In ABNF [] non può essere presente o non può essere presente che non è ciò che dice il testo.
La definizione della regola significa:

FWS è uno o più spazi bianchi facoltativamente preceduti da (zero o più spazi bianchi e ritorno a capo e avanzamento riga)
Ciò significa che solo uno o più spazi bianchi è uno spazio bianco pieghevole. È corretto?

    
posta Romeno 30.04.2018 - 16:20
fonte

2 risposte

2

Sia le specifiche che la tua comprensione sono corrette, ma le specifiche sono leggermente confuse. La regola FWS non rappresenta solo spazi bianchi ripiegati , ma spazi bianchi che possono includere anche pieghe. Allo stesso modo, la regola CFWS non denota semplicemente un commento con uno spazio vuoto di piegatura, ma qualsiasi posizione in cui sono consentiti spazi bianchi e / o commenti e / o piegature.

Questa pratica di combinare più regole è comune nelle grammatiche in cui le regole codificano esplicitamente la precedenza. Per esempio. un linguaggio aritmetico può consentire la moltiplicazione e l'aggiunta. Questo potrebbe quindi essere specificato come

Addition = Addition "+" Multiplication / Multiplication
Multiplication = Multiplication "*" Number / Number

In questo esempio, Addition non si limita a far corrispondere un'espressione di addizione, ma anche qualsiasi numero letterale. Nella RFC citata, CFWS consente analogamente un commento o FWS, e FWS consente uno spazio vuoto di piegatura o qualsiasi altro spazio bianco - sebbene la grammatica utilizzi un gruppo facoltativo [...] che non rende abbastanza chiara questa alternativa.

    
risposta data 30.04.2018 - 17:19
fonte
1

Quando ci mostri:

FWS = ([*WSP CRLF] 1*WSP) / obs-FWS 

quello che ti manca è obs-FWS 1 .

obs-FWS = 1*WSP *(CRLF 1*WSP)

È l'alternativa obsoleta consentita dall'operatore "/" 2 in ABNF

Elements separated by a forward slash ("/") are alternatives.
Therefore,

 foo / bar

will accept <foo> or <bar>.

Se comprendi l'operatore "*" 3 :

The operator "*" preceding an element indicates repetition. The full form is:

 <a>*<b>element

where <a> and <b> are optional decimal values, indicating at least <a> and at most <b> occurrences of the element.

Default values are 0 and infinity so that *<element> allows any number, including zero; 1*<element> requires at least one; 3*3<element> allows exactly 3; and 1*2<element> allows one or two.

e la sequenza opzionale ("[" e "]") operatori 4

Square brackets enclose an optional element sequence:

 [foo bar]

is equivalent to

 *1(foo bar).

Dovresti essere in grado di vedere che entrambe le alternative accettano come FWS un singolo WSP 5 o più WSP. Quindi sì, "solo uno o più spazi bianchi è uno spazio bianco pieghevole".

Il bit interessante è come si occupa di CRLF. Nessuna delle due alternative accetta CRLF ripetuto senza WSP che li separa.

    
risposta data 30.04.2018 - 18:15
fonte

Leggi altre domande sui tag