4. Praktische Erwägungen
4.1. Spezifizieren von CBOR-Sequenzen in Concise Data Definition Language (CDDL)
In Concise Data Definition Language (CDDL) [RFC8610] werden CBOR-Sequenzen bereits als Inhalt von Bytefolgen unter Verwendung des Steueroperators ".cborseq" (Abschnitt 3.8.4 von [RFC8610]) unterstützt, indem ein Array als Controller-Typ verwendet wird:
my-embedded-cbor-seq = bytes .cborseq my-array
my-array = [* my-element]
my-element = my-foo / my-bar
Derzeit sieht CDDL keine bloßen CBOR-Sequenzen als Top-Level-Subjekt einer Spezifikation vor. Vorerst lautet der Vorschlag, ein Array für die Top-Level-Regel zu verwenden, wie es für den Steueroperator ".cborseq" verwendet wird, und englischen Text hinzuzufügen, der erklärt, dass es sich bei der Spezifikation tatsächlich um eine CBOR-Sequenz mit den Elementen des Arrays handelt:
; This defines an array, the elements of which are to be used
; in a CBOR Sequence:
my-sequence = [* my-element]
my-element = my-foo / my-bar
(Zukünftige Versionen von CDDL könnten eine Notation für Top-Level-CBOR-Sequenzen bereitstellen, z. B. durch Verwendung einer Gruppe als Top-Level-Regel in einer CDDL-Spezifikation.)
4.2. Diagnose-Notation
Die CBOR-Diagnose-Notation (siehe Abschnitt 6 von [RFC7049]) oder die erweiterte Diagnose-Notation (Anhang G von [RFC8610]) sehen derzeit ebenfalls keine bloßen CBOR-Sequenzen vor (letztere sieht CBOR-Sequenzen vor, die in eine Bytefolge eingebettet sind, gemäß Anhang G.3 von [RFC8610]).
In einem ähnlichen Geist wie die Empfehlung für CDDL oben empfiehlt diese Spezifikation, die CBOR-Datenelemente in ein Array einzuschließen. In einer informelleren Umgebung, in der die Grenzen, innerhalb derer die Notation verwendet wird, offensichtlich sind, ist es auch möglich, die äußeren Klammern für dieses Array wegzulassen, wie in diesen beiden Beispielen gezeigt:
[1, 2, 3]
1, 2, 3
Beachten Sie, dass es etwas schwierig ist, CBOR-Sequenzen der Länge null in der letzteren Form zu diskutieren.
4.3. Optimieren von CBOR-Sequenzen zum Überspringen von Elementen
In bestimmten Anwendungen ist es von größter Wichtigkeit, ein Element effizient überspringen zu können, ohne seine Unterstruktur decodieren zu müssen, oder Elemente effizient an Multithread-Decodierungsprozesse zu verteilen. Für diese Anwendungen können Bytefolgen (die Längeninformationen in Bytes enthalten), die eingebettetes CBOR enthalten, als Elemente einer CBOR-Sequenz verwendet werden:
; This defines an array of CBOR byte strings, the elements of which
; are to be used in a CBOR Sequence:
my-sequence = [* my-element]
my-element = bytes .cbor my-element-structure
my-element-structure = my-foo / my-bar
In gewissen Grenzen kann dies auch die Wiederherstellung von Elementen ermöglichen, die intern nicht wohlgeformt sind; die Einschränkung ist, dass die Sequenz von Bytefolgen als solche wohlgeformt sein muss.