2. Formato di Sequenza CBOR
Formalmente, una Sequenza CBOR è una sequenza di byte definita ricorsivamente come una delle seguenti:
-
una sequenza vuota (lunghezza zero) di byte
-
la sequenza di byte che costituisce un elemento dati CBOR codificato [RFC7049] seguito da una Sequenza CBOR.
In breve, concatenando zero o più elementi dati CBOR codificati si genera una Sequenza CBOR. (Di conseguenza, concatenando zero o più Sequenze CBOR si ottiene anche una Sequenza CBOR.)
Non esiste un indicatore di fine sequenza. (Se se ne desidera uno, la codifica CBOR di un array dei valori del modello di dati CBOR codificati, impiegando una codifica a lunghezza definita o indefinita, come singolo elemento dati CBOR può essere in realtà la rappresentazione più appropriata.)
Le Sequenze CBOR, a differenza delle Sequenze di Testo JSON [RFC7464], non utilizzano un marcatore tra gli elementi. Ciò è possibile perché gli elementi dati codificati in CBOR sono auto-delimitanti e la fine può sempre essere calcolata. (Si noti che, mentre la prima forma solo oggetto/array di JSON era anch'essa auto-delimitante, questo ha smesso di essere il caso quando i valori semplici come i numeri singoli sono diventati documenti JSON validi.)
La decodifica di una Sequenza CBOR funziona come segue:
-
Se la Sequenza CBOR è una sequenza vuota di byte, il risultato è una sequenza vuota di valori del modello di dati CBOR.
-
Altrimenti, si deve decodificare un singolo elemento dati CBOR dai byte della Sequenza CBOR e inserire il valore del modello di dati CBOR risultante all'inizio del risultato della ripetizione ricorsiva di questo processo di decodifica con i byte rimanenti. (Un decodificatore in streaming fornirebbe quindi semplicemente zero o più valori del modello di dati CBOR, ciascuno non appena i byte che lo compongono sono disponibili.)
Ciò significa che se un qualsiasi elemento dati nella sequenza non è ben formato, non è possibile decodificare in modo affidabile il resto della sequenza. (Un'implementazione potrebbe essere in grado di riprendersi da alcuni errori in una sequenza di byte che è quasi, ma non interamente, un elemento dati CBOR codificato ben formato. La gestione dei dati malformati esula dallo scopo di questa specifica.)
Ciò significa anche che il formato della Sequenza CBOR può rilevare in modo affidabile il troncamento dei byte che compongono l'ultimo elemento dati CBOR nella sequenza, ma non può rilevare elementi dati CBOR interamente mancanti alla fine. Un decodificatore di Sequenza CBOR utilizzato per consumare dati di Sequenza CBOR in streaming può semplicemente mettere in pausa per ulteriori dati (ad esempio, sospendendo e riprendendo successivamente la decodifica) nel caso in cui venga ricevuto un elemento finale troncato.