2. Definizioni, Convenzioni e Grammatica BNF Generica (Definitions, Conventions, and Generic BNF Grammar)
Sebbene i meccanismi MIME siano specificati in prosa in questo insieme di documenti, molti sono anche descritti formalmente utilizzando la notazione BNF aumentata (Augmented BNF Notation) di RFC 822. Gli implementatori devono avere familiarità con questa notazione per comprendere questo insieme di documenti e si rimanda a RFC 822 per una spiegazione completa della notazione BNF aumentata.
Parte del BNF aumentato in questo insieme di documenti fa riferimento per nome alle regole di sintassi definite in RFC 822. Una grammatica formale completa (Formal Grammar) viene quindi ottenuta combinando le appendici grammaticali raccolte da ogni documento in questo insieme con quella di RFC 822 più le modifiche a RFC 822 definite in RFC 1123 (che modificano specificamente la sintassi per return, date e mailbox).
Tutti i valori numerici e di ottetto in questo insieme di documenti sono dati in notazione decimale. Tutti i valori di tipo media (Media Type), i valori di sottotipo e i nomi di parametri come definiti sono insensibili al maiuscolo/minuscolo (Case-insensitive). Tuttavia, i valori dei parametri sono sensibili al maiuscolo/minuscolo (Case-sensitive) salvo diversa indicazione per il parametro specifico.
NOTA DI FORMATO: Note come questa forniscono informazioni aggiuntive non essenziali che i lettori possono saltare senza perdere nulla di essenziale. Lo scopo principale di queste note non essenziali è trasmettere informazioni sulla motivazione di questo insieme di documenti, o collocare questi documenti nel giusto contesto storico o evolutivo. In particolare, tali informazioni possono essere saltate da coloro che si concentrano esclusivamente sulla costruzione di un'implementazione conforme, ma possono essere utili a coloro che desiderano comprendere perché sono state fatte determinate scelte di progettazione.
2.1. CRLF
Il termine CRLF, in questo insieme di documenti, si riferisce alla sequenza di ottetti corrispondenti ai due caratteri US-ASCII CR (valore decimale 13) e LF (valore decimale 10) che, presi insieme, in questo ordine, denotano un'interruzione di riga (Line Break) nella posta RFC 822.
2.2. Set di Caratteri (Character Set)
Il termine «set di caratteri (Character Set)» è usato in MIME per riferirsi a un metodo di conversione di una sequenza di ottetti in una sequenza di caratteri. Si noti che la conversione incondizionata e inequivocabile nell'altra direzione non è richiesta, in quanto non tutti i caratteri possono essere rappresentabili da un dato set di caratteri e un set di caratteri può fornire più di una sequenza di ottetti per rappresentare una particolare sequenza di caratteri.
Questa definizione è intesa a consentire vari tipi di codifiche di caratteri, da semplici mappature a tabella singola come US-ASCII a complessi metodi di commutazione di tabelle come quelli che utilizzano le tecniche di ISO 2022. Tuttavia, la definizione associata a un nome di set di caratteri MIME deve (MUST) specificare completamente la mappatura da eseguire. In particolare, l'uso di informazioni di profilazione esterne (External Profiling Information) per determinare la mappatura esatta non è consentito.
NOTA: Il termine «set di caratteri (Character Set)» era originariamente usato per descrivere cose come US-ASCII e ISO-8859-1 che consistono in un piccolo insieme di caratteri e una semplice mappatura uno-a-uno da singoli ottetti a singoli caratteri. I set di caratteri codificati multi-ottetto (Multi-octet Coded Character Sets) e le tecniche di commutazione rendono la situazione molto più complicata. Ad esempio, alcune comunità usano il termine «codifica di caratteri (Character Encoding)» per ciò che MIME chiama un «set di caratteri», mentre usano la frase «set di caratteri codificati (Coded Character Set)» per denotare una mappatura astratta da numeri interi (non ottetti) a caratteri.
2.3. Messaggio (Message)
Il termine «messaggio (Message)», quando non ulteriormente qualificato, significa sia il messaggio (completo o «di livello superiore») trasferito su una rete, sia un messaggio incapsulato in un corpo di tipo "message/rfc822" o "message/partial".
2.4. Entità (Entity)
Il termine «entità (Entity)» si riferisce specificamente ai campi di intestazione definiti da MIME e al contenuto sia di un messaggio che di una delle parti in un corpo multipart. La specificazione di tali entità è l'essenza di MIME. Poiché il contenuto di un'entità è spesso chiamato «corpo (Body)», ha senso parlare del corpo di un'entità. Qualsiasi tipo di campo può essere presente nell'intestazione di un'entità, ma solo quei campi i cui nomi iniziano con "content-" hanno effettivamente un significato relativo a MIME. Si noti che questo non significa che non abbiano alcun significato - un'entità che è anche un messaggio ha campi di intestazione non-MIME il cui significato è definito da RFC 822.
2.5. Parte del Corpo (Body Part)
Il termine «parte del corpo (Body Part)» si riferisce a un'entità all'interno di un'entità multipart.
2.6. Corpo (Body)
Il termine «corpo (Body)», quando non ulteriormente qualificato, significa il corpo di un'entità, cioè il corpo sia di un messaggio che di una parte del corpo.
NOTA: Le quattro definizioni precedenti sono chiaramente circolari. Questo è inevitabile, poiché la struttura complessiva di un messaggio MIME è effettivamente ricorsiva.
2.7. Dati a 7 bit (7bit Data)
I «dati a 7 bit (7bit Data)» si riferiscono a dati rappresentati tutti come linee relativamente corte con 998 ottetti o meno tra le sequenze di separazione di linea CRLF [RFC-821]. Nessun ottetto con valori decimali maggiori di 127 è consentito e nemmeno i NUL (ottetti con valore decimale 0). Gli ottetti CR (valore decimale 13) e LF (valore decimale 10) si verificano solo come parte di sequenze di separazione di linea CRLF.
2.8. Dati a 8 bit (8bit Data)
I «dati a 8 bit (8bit Data)» si riferiscono a dati rappresentati tutti come linee relativamente corte con 998 ottetti o meno tra le sequenze di separazione di linea CRLF [RFC-821], ma possono essere usati ottetti con valori decimali maggiori di 127. Come con i «dati a 7 bit», gli ottetti CR e LF si verificano solo come parte di sequenze di separazione di linea CRLF e nessun NUL è consentito.
2.9. Dati Binari (Binary Data)
I «dati binari (Binary Data)» si riferiscono a dati dove è consentita qualsiasi sequenza di ottetti.
2.10. Righe (Lines)
Le «righe (Lines)» sono definite come sequenze di ottetti separate da sequenze CRLF. Questo è coerente sia con RFC 821 che con RFC 822. «Righe» si riferisce solo a un'unità di dati in un messaggio, che può o non può corrispondere a qualcosa che è effettivamente visualizzato da un agente utente (User Agent).
Riepilogo della Terminologia:
| Termine | Descrizione |
|---|---|
| Set di Caratteri (Character Set) | Metodo di conversione di sequenze di ottetti in sequenze di caratteri |
| Messaggio (Message) | Messaggio RFC 822 o messaggio incapsulato |
| Entità (Entity) | Campi di intestazione MIME e contenuto |
| Parte del Corpo (Body Part) | Entità all'interno di un'entità multipart |
| Corpo (Body) | Contenuto di un'entità |
| Dati a 7 bit (7bit Data) | Solo US-ASCII, nessun ottetto di bit alto, righe corte |
| Dati a 8 bit (8bit Data) | Ottetti di bit alto consentiti, righe corte |
| Dati Binari (Binary Data) | Qualsiasi sequenza di ottetti consentita |
| Righe (Lines) | Sequenze di ottetti separate da CRLF |
Concetti Chiave:
- La struttura MIME è ricorsiva (le entità possono contenere entità)
- I nomi dei parametri sono insensibili al maiuscolo/minuscolo, ma i valori sono solitamente sensibili
- CRLF è l'unica forma di separatore di riga
- I dati sono classificati in tipi a 7 bit, 8 bit e binari