2. CBOR-Sequenzformat
Formal ist eine CBOR-Sequenz eine Bytefolge, die rekursiv als eines der folgenden definiert ist:
-
eine leere (Länge null) Bytefolge
-
die Bytefolge, die ein codiertes CBOR-Datenelement [RFC7049] bildet, gefolgt von einer CBOR-Sequenz.
Kurz gesagt, das Verketten von null oder mehr codierten CBOR-Datenelementen erzeugt eine CBOR-Sequenz. (Folglich führt auch das Verketten von null oder mehr CBOR-Sequenzen zu einer CBOR-Sequenz.)
Es gibt keinen Sequenzende-Indikator. (Wenn einer gewünscht wird, kann die CBOR-Codierung eines Arrays der zu codierenden CBOR-Datenmodellwerte unter Verwendung einer Codierung mit fester oder unbestimmter Länge als einzelnes CBOR-Datenelement tatsächlich die angemessenere Darstellung sein.)
CBOR-Sequenzen verwenden im Gegensatz zu JSON-Textsequenzen [RFC7464] keine Markierung zwischen Elementen. Dies ist möglich, weil CBOR-codierte Datenelemente selbstbegrenzend sind und das Ende immer berechnet werden kann. (Beachten Sie, dass, während die frühe Nur-Objekt/Array-Form von JSON ebenfalls selbstbegrenzend war, dies nicht mehr der Fall war, als einfache Werte wie einzelne Zahlen zu gültigen JSON-Dokumenten wurden.)
Das Decodieren einer CBOR-Sequenz funktioniert wie folgt:
-
Wenn die CBOR-Sequenz eine leere Bytefolge ist, ist das Ergebnis eine leere Sequenz von CBOR-Datenmodellwerten.
-
Andernfalls muss man ein einzelnes CBOR-Datenelement aus den Bytes der CBOR-Sequenz decodieren und den resultierenden CBOR-Datenmodellwert am Anfang des Ergebnisses der rekursiven Wiederholung dieses Decodierprozesses mit den verbleibenden Bytes einfügen. (Ein Streaming-Decoder würde daher einfach null oder mehr CBOR-Datenmodellwerte liefern, jeden sobald die Bytes, aus denen er besteht, verfügbar sind.)
Dies bedeutet, dass, wenn ein Datenelement in der Sequenz nicht wohlgeformt ist, es nicht möglich ist, den Rest der Sequenz zuverlässig zu decodieren. (Eine Implementierung kann möglicherweise einige Fehler in einer Bytefolge beheben, die fast, aber nicht vollständig, ein wohlgeformtes codiertes CBOR-Datenelement ist. Der Umgang mit fehlerhaften Daten liegt außerhalb des Geltungsbereichs dieser Spezifikation.)
Dies bedeutet auch, dass das CBOR-Sequenzformat das Abschneiden der Bytes, aus denen das letzte CBOR-Datenelement in der Sequenz besteht, zuverlässig erkennen kann, aber es kann nicht vollständig fehlende CBOR-Datenelemente am Ende erkennen. Ein CBOR-Sequenz-Decoder, der zum Verarbeiten von Streaming-CBOR-Sequenzdaten verwendet wird, kann im Falle des Empfangs eines abgeschnittenen letzten Elements einfach auf weitere Daten warten (z. B. durch Aussetzen und späteres Fortsetzen der Decodierung).