4. 実用上の考慮事項
4.1. Concise Data Definition Language (CDDL) でのCBORシーケンスの指定
Concise Data Definition Language (CDDL) [RFC8610] では、CBORシーケンスは、コントローラータイプとして配列を採用することにより、".cborseq" 制御演算子([RFC8610] のセクション 3.8.4)を使用してバイト文字列の内容としてすでにサポートされています。
my-embedded-cbor-seq = bytes .cborseq my-array
my-array = [* my-element]
my-element = my-foo / my-bar
現在、CDDL は仕様のトップレベルの主題として、装飾のない CBOR シーケンスを提供していません。今のところ、".cborseq" 制御演算子で使用されているように、トップレベルのルールに配列を使用し、仕様が実際にはその配列の要素を持つ CBOR シーケンスに関するものであることを説明する英文テキストを追加することが提案されています。
; 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
(CDDL の将来のバージョンでは、トップレベルの CBOR シーケンスの表記法が提供される可能性があります。たとえば、CDDL 仕様のトップレベルのルールとしてグループを使用するなどです。)
4.2. 診断表記
CBOR診断表記([RFC7049] のセクション6を参照)または拡張診断表記([RFC8610] の付録G)も、現時点では装飾のないCBORシーケンスを提供していません(後者は、[RFC8610] の付録G.3に従ってバイト文字列に埋め込まれたCBORシーケンスを提供します)。
上記のCDDLの推奨事項と同様の精神で、本仕様ではCBORデータ項目を配列で囲むことを推奨しています。表記が使用される境界が明白な、より非公式な設定では、これら2つの例に示すように、この配列の外側の括弧を省略することも可能です。
[1, 2, 3]
1, 2, 3
後者の形式で長さゼロのCBORシーケンスについて議論することは多少難しいことに注意してください。
4.3. 要素をスキップするためのCBORシーケンスの最適化
特定のアプリケーションでは、サブ構造をデコードする必要なく要素を効率的にスキップできること、または要素をマルチスレッドデコードプロセスに効率的に分散できることが、最も重要です。これらのアプリケーションでは、埋め込まれたCBORを含むバイト文字列(バイト単位の長さ情報を運ぶ)を、CBORシーケンスの要素として使用できます。
; 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
制限内で、これにより内部的に整形式ではない要素からの回復も可能になる場合があります。制限とは、バイト文字列のシーケンス自体は整形式である必要があるということです。