CBOR-LD 1.0

Linked Data向けCBORベースのシリアライズ

W3C作業草案

この文書についての詳細
このバージョン:
https://www.w3.org/TR/2026/WD-cbor-ld-10-20260708/
最新公開バージョン:
https://www.w3.org/TR/cbor-ld-10/
最新の編集者草案:
https://w3c.github.io/cbor-ld/
履歴:
https://www.w3.org/standards/history/cbor-ld-10/
コミット履歴
編集者:
Manu Sporny (Digital Bazaar)
Dave Longley (Digital Bazaar)
Wesley Smith (Digital Bazaar)
著者:
Manu Sporny (Digital Bazaar)
Dave Longley (Digital Bazaar)
フィードバック:
GitHub w3c/cbor-ld (プルリクエスト, 新しい課題, 未解決の課題)

要約

CBORは、コンパクトなバイナリデータのシリアライズおよびメッセージング形式です。この 仕様は、Linked DataをシリアライズするためのCBORベースの形式であるCBOR-LD 1.0を定義します。 このエンコーディングは、現在数億ものシステムにデプロイされている既存のJSON-LDエコシステムを 活用し、Linked Dataの効率的なエンコーディング方式を求める人々にコンパクトな シリアライズ形式を提供するよう設計されています。セマンティック圧縮方式を利用することで、 汎用的な圧縮方式よりも60%を超えて優れた圧縮率を実現できます。この形式は 主に、ストレージや帯域幅に制約のあるプログラミング環境でLinked Dataを使用する方法を提供し、 相互運用可能なセマンティックなワイヤレベルプロトコルを構築し、CBORベースのストレージエンジンで Linked Dataを効率的に保存することを目的としています。

この文書のステータス

この節は、公開時点におけるこの 文書のステータスを説明する。現在のW3C 公開文書およびこの技術報告の最新版の一覧は、 W3C標準および草案 インデックスにある。

この文書は実験的なものです。

この文書で説明されている機能を実証できる 参照実装があります。

この文書は、JSON-LD作業グループによって、 勧告 トラックを用いる 作業草案として公開されました。

作業草案としての公開は、 W3Cおよびそのメンバーによる 支持を意味するものではありません。

これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される可能性があります。 進行中の作業以外のものとしてこの文書を引用することは適切ではありません。

この文書は、 W3C 特許 ポリシーの下で活動するグループによって作成されました。 W3Cは、 このグループの成果物に関連して行われた 特許開示の公開リストを 管理しています。そのページには、 特許を開示するための手順も含まれています。ある特許が 必須クレームを含むと 実際に知っている個人は、 W3C特許ポリシー第6節に従って その情報を開示しなければなりません。

この文書は、 2025年8月18日版W3Cプロセス文書に従います。

1. 導入

この節は非規範的です。

CBORは、コンパクトなバイナリデータのシリアライズおよびメッセージング形式です。この 仕様は、Linked DataをシリアライズするためのCBORベースの形式であるCBOR-LD 1.0を定義します。 このエンコーディングは、現在数億ものシステムにデプロイされている既存のJSON-LDエコシステムを 活用し、Linked Dataの効率的なエンコーディング方式を求める人々にコンパクトな シリアライズ形式を提供するよう設計されています。セマンティック圧縮方式を利用することで、 汎用的な圧縮方式よりも60%を超えて優れた圧縮率を実現できます。この形式は 主に、ストレージや帯域幅に制約のあるプログラミング環境でLinked Dataを使用する方法を提供し、 相互運用可能なセマンティックなワイヤレベルプロトコルを構築し、CBORベースのストレージエンジンで Linked Dataを効率的に保存することを目的としています。

1.1 この文書の読み方

この節は非規範的です。

この文書は、CBORにおけるLinked Dataのシリアライズに関する詳細な仕様です。この文書は主に、次の読者を対象としています:

1.1.1 適合性

非規範的と記された節に加えて、この仕様内のすべての作成ガイドライン、図、例、注記は 非規範的です。この仕様のそれ以外のすべては規範的です。

この文書におけるキーワードMUSTは、 BCP 14 [RFC2119] [RFC8174] に記述されているように、 ここに示すとおりすべて大文字で現れる場合に限り、解釈されます。

1.2 貢献

この節は非規範的です。

この仕様の開発に参加する方法はいくつかあります:

1.3 設計目標と根拠

この節は非規範的です。

CBOR-LDは、次の設計目標を満たします:

単純さ
既存のJSON-LD実装があれば、実装は容易であるべきです。
効率的なストレージ
エンコーディング処理は、積極的にコンパクトなLinked Dataバイナリ 形式を生成するべきです。
汎用アルゴリズム
エンコーディングアルゴリズムは汎用化されていなければなりません。
セマンティック圧縮
エンコーディング形式は、Linked Data URL(用語および 値)の圧縮を最大化するべきです。ここに注目することで、アルゴリズムが汎用圧縮アルゴリズムよりも 優れた圧縮率を達成できるようになります。
生のバイナリ
Baseエンコードされたバイナリ値、およびその他の圧縮可能なデータ型は、 汎用性を犠牲にせずに可能な場合、Baseエンコード形式から生のバイナリ形式に 変換されるべきです。

同様に、次のものは非目標です。

この仕様に取り組む中で、次の落とし穴が特定されました:

2. 基本概念

この節は非規範的です。

大まかに言うと、CBOR-LDは、追加の圧縮のために 次の仕組みを利用できる、JSON-LD向けのコンパクトなバイナリシリアライズです:

コーデックは、型付き値を汎用的な方法で圧縮するための基本的なプリミティブです。セマンティック圧縮は JSON-LD用語を圧縮するためのものです。レジストリ辞書は、ユースケース固有の方法で型付き値を圧縮する ためのものです。これらはいずれも任意です — CBOR-LDは、 これらの圧縮戦略のいずれか、すべて、またはいずれも使用せずに利用できます。まとめると、特定のユースケースで 使用されるこれらの戦略の集合は、処理モデルとして知られます。

3. セマンティック圧縮

この節は非規範的です。

セマンティック圧縮は、コンパクトなCBOR-LDペイロードを作成するための強力なツールです。中核となる考え方は、 外部JSON-LDコンテキストオブジェクトの情報内容を用いてJSON-LD用語を圧縮することです。 これらの外部コンテキストオブジェクトは、ペイロードの作成者と消費者の双方が利用できるため、 これは可逆的な方法で行われます。

一般的なセマンティック圧縮処理では、JSON-LD Documentを取得し、 次を行います:

  1. JSON-LDを圧縮できるかどうかを判断する(URI経由でコンテキストを参照するJSON-LD文書内の @context値を見つける。埋め込みコンテキスト値は圧縮できない)。
  2. JSON-LDコンテキストを処理し、CBOR-LD term-codec map — 圧縮可能な すべての用語のリストを構築する。リストを(Unicodeコードポイント順に)ソートする。 各用語にバイト値を関連付け、0から開始して順に増やす。
  3. JSON-LD DocumentをCBOR-LDにエンコードする。これは、各キーを term-codec map内の用語に関連付けられたバイト値で置き換えることで構成される。
  4. 元のJSON-LDが必要になった場合、CBOR-LDからJSON-LDへのデコードは、 各CBORバイト値をterm-codec map内の関連付けられたキーで置き換えることで構成される。

4. CBOR-LD用CBORタグ

CBOR-LDペイロードは、バイナリレベルでCBOR-LDであると識別できる必要があります。CBORは本来、 これを「タグ」機能によってサポートしています — これは、グローバルレジストリを介して ペイロードの残りを記述する、バイナリデータ内のヘッダー値です。

CBORタグ0xCB1D(タグ値51997)は、CBOR-LDで使用するために IANA CBORタグレジストリに登録されています。このタグ値の直後に続くデータは、 圧縮ペイロードを作成するために使用されたレジストリエントリーを識別します。

CBOR-LDペイロードは、タグ0xCB1Dでタグ付けされた項目が 2要素の配列であり、最初の要素が major type 0 integerMUSTあるように構造化されていなければなりません。 この整数はCBOR-LD Registry Entry IDです。バイナリ構造は tag([registryEntryId, payload])です。

その後、CBOR-LD Registry Entry IDの値を使用して、CBOR-LD Registry内の CBOR-LD Registry Entryを検索します。

4.1 CBOR-LD Registry

単一のCBORタグ値を使用しながら、消費に必要な異なる 圧縮テーブル素材を必要とするCBOR-LDの可能なユースケースを無制限に拡張できるように、 次を定義します。

CBOR-LD Registryは、CBOR-LDペイロードの消費者が展開に必要なterm-codec mapを再構築するために 必要な情報を提供するグローバルなリストです。CBOR-LD Registry Entryには、次が含まれます:

文字列"callerProvidedTable"はtypeTablesに現れることがあり、このユース ケースでは、グローバルに定義されていない Type Tableが必要であることを示します。

4.1.1 Registry

現在のCBOR-LD Registryはこちらにあります。

エントリーを登録するには、READMEの手順に従ってください。このレジストリはW3C JSON-LD Community Groupが所有しています。

5. アルゴリズム

この節では、JSON-LDをCBOR-LDへ変換し、その逆も行うために必要なアルゴリズムを規定します。 この節のアルゴリズムの大部分はセマンティック圧縮機能に関連しており、CBOR-LDペイロードが セマンティック圧縮を使用しない場合のCBOR-LDとJSON-LDの間の変換では使用されません。

5.1 エンコードとデコード

5.1.1 JSON-LDから CBOR-LDへのエンコードアルゴリズム

このアルゴリズムは、マップtypeTable、整数registryEntryId、および JSON-LD 文書jsonldDocumentを入力として受け取り、16進文字列 cborldBytesを返します。

  1. registryEntryId5.6.1 CBOR タグ構造取得アルゴリズムに渡した結果をprefixに設定する。
  2. stateを空のマップに設定する。
  3. registryEntryIdに関連付けられたレジストリエントリーがセマンティック 圧縮を必要とする場合:
    1. state.strategyを"compression"に設定する。
    2. state.typeTabletypeTableに設定する。
    3. state.registryEntryIdregistryEntryIdに設定する。
    4. state5.2.1 変換アルゴリズムを初期化するに渡した結果に設定する。
    5. statejsonldDocumentinputDocumentとして5.2.2 文書変換アルゴリズムに渡した結果を outputに設定する。
    6. suffixoutputのCBORエンコーディングに設定する。
  4. そうでない場合、suffixjsonldDocumentのCBORエンコーディングに設定する。
  5. prefixの前にsuffixを付加したものの16進エンコーディングを cborldBytesに設定する。
  6. cborldBytesを返す。

5.1.2 CBOR-LDから JSON-LDへのデコードアルゴリズム

このアルゴリズムは、CBOR-LDペイロードcborldBytesを受け取り、JSON-LD文書 jsonldDocumentを返します。

  1. state を空のマップに設定する。
  2. cborldBytes5.6.2 レジストリエントリ ID 取得アルゴリズムに渡した結果に result を設定する。
  3. state.registryEntryIdresult.registryEntryId に設定し、suffixresult.suffix に設定する。
  4. state.registryEntryId に関連付けられたレジストリエントリが セマンティック圧縮を使用する場合:
    1. state.strategy を "decompression" に設定する。
    2. registryEntryId に関連付けられた CBOR-LD Varint Registry Entry 内の typeTables 配列にある各エントリ type: map について、そのエントリを state.typeTable に追加し、state.reverseTypeTable 内の type の値を inverseMap に設定する。ここで inverseMap は、対応関係を反転した map である。
    3. state5.2.1 変換初期化アルゴリズムに渡した結果に state を設定する。
    4. suffix をバイト列からマップへ復号した結果に input を 設定する。
    5. stateinputinputDocuments として 5.2.2 文書変換アルゴリズムに渡した結果に jsonldDocument を設定する。
  5. そうでなければ、cborldBytes を解析した結果に jsonldDocument を設定する。
  6. jsonldDocument を返す。

5.2 変換アルゴリズム

この節のアルゴリズムは、データ形式間で入力を抽象的に変換する「converter」の振る舞いを 説明します。この節で後述する"compression"および"decompression"戦略のような「strategy」と 組み合わせて使用すると、これらのアルゴリズムは具象データ形式間の変換としてインスタンス化できます。 "compression"戦略はJSON-LDからCBOR-LDへ変換し、"decompression" 戦略はCBOR-LDからJSON-LDへ変換します。

5.2.1 変換を初期化する アルゴリズム

このアルゴリズムはマップstateを受け取り、返します。

  1. state5.4.1 コンテキストローダー初期化アルゴリズムに渡した結果に設定する。
  2. 空のマップtermMapおよび previousActiveContext5.3.1 アクティブコンテキスト初期化アルゴリズムに 渡した結果をstate.initialActiveContextに設定する。
  3. state.typesEncodedAsBytesを空の集合に設定する。
  4. "none"、"http://www.w3.org/2001/XMLSchema#date"、 "http://www.w3.org/2001/XMLSchema#dateTime"、 および"url"をstate.typesEncodedAsBytesに追加する。
  5. stateを返す。

5.2.2 文書変換アルゴリズム

このアルゴリズムは、マップstateおよびマップまたは マップの配列inputDocumentsを受け取り、マップstateとマップまたは マップの配列outputMapsを含むマップを返します。

  1. inputDocumentsが配列の場合、inputsinputDocumentsに設定する。そうでない場合、inputs[inputDocuments]に設定する。
  2. outputMapsを空の配列に設定する。
  3. inputs内のinputごとに:
    1. outputを空のマップに設定する。
    2. stateinputoutput、および state.initialActiveContextactiveContextとして 5.2.3 汎用変換アルゴリズムに渡した結果をresultに設定する。
    3. result.outputoutputMapsに追加する。
    4. stateresult.stateに設定する。
  4. inputDocumentsが配列の場合、outputMapsを返す。そうでない場合、 outputMapsの最初の要素を返す。

5.2.3 汎用変換 アルゴリズム

このアルゴリズムは、マップinputoutputstate、および activeContext を入力として受け取り、マップstateおよびoutputを含むマップを返します。

  1. state.strategyが"compression"に設定されている場合:
    1. stateactiveContextinput、および outputを渡して 5.2.5.1 圧縮用コンテキスト変換アルゴリズム を実行した結果をcontextConversionResultに設定する。
    2. activeContextcontextConversionResult.activeContextに、 outputcontextConversionResult.outputに、statecontextConversionResult.stateに設定する。
  2. そうでない場合、stateactiveContextinput、およびoutputを渡して 5.2.6.1 展開用コンテキスト変換アルゴリズムを実行した結果である resultresult.activeContextactiveContextに、result.statestateに設定する。
  3. state.strategyが"compression"に設定されている場合、 stateactiveContextinput、および outputを渡して 5.2.5.4 圧縮用オブジェクト型取得アルゴリズムを実行した結果である resultについて、stateresult.stateに、objectTypesresult.objectTypesに設定する。
  4. そうでない場合、stateactiveContextinput、および outputを渡して5.2.6.4 展開用オブジェクト型取得 アルゴリズムを実行した結果であるresultについて、stateresult.stateに、objectTypesresult.objectTypesに設定する。
  5. activeContextobjectTypes5.3.4 型スコープ付きコンテキスト適用アルゴリズムに渡した結果を activeContextに設定する。
  6. state.strategyが"compression"に設定されている場合、 stateinput、およびactiveContextを渡して 5.2.5.3 圧縮用入力エントリー取得アルゴリズムを実行した結果である resultについて、stateresult.stateに、 termEntriesresult.termEntriesに設定する。
  7. そうでない場合、stateinput、output、および activeContextを渡して 5.2.6.3 展開用入力エントリー取得アルゴリズムを 実行した結果であるresultについて、stateresult.stateに、 outputresult.outputに、termEntriesresult.termEntriesに設定する。
  8. termEntries内の[termInfo, value]ごとに:
    1. termtermInfo.termに設定する。
    2. activeContextterm5.3.3 プロパティスコープ付きコンテキスト適用アルゴリズムに 渡した結果をvalueActiveContextに設定する。
    3. pluraltermInfo.pluralの値に設定し、 termTypetermInfo.def内の@typeの値に設定する。
    4. pluraltrueに設定されている場合、valuesvalueの値に設定する。そうでない場合、valuesvalueの値を単一要素として含む配列に設定する。
    5. outputsを空の配列に設定する。
    6. values内のunconvertedValueごとに:
      1. statetermTypeunconvertedValuevalueとして、valueActiveContextactiveContextとして渡し、5.2.4 値変換アルゴリズムを 実行した結果をresultに設定する。
      2. stateresult.stateに設定し、 result.outputoutputsに追加する。
    7. pluraltrueに設定されている場合、 outputValuesoutputsに設定する。そうでない場合、outputValuesoutputsの最初の要素に設定する。
    8. state.strategyが"compression"に設定されている場合、 termInfo.termIdの値が output内でoutputValuesにマップされるよう設定する。 そうでない場合、termInfo.termの値がoutput内で outputValuesにマップされるよう設定する。
  9. resultを空のマップに設定する。
  10. result.statestateに、result.outputoutputに設定する。
  11. resultを返す。

5.2.4 値変換アルゴリズム

このアルゴリズムは、マップstateactiveContexttermInfo、および 値valuetermTypeを受け取ります。 これは、マップstateおよびoutputを含むresultオブジェクトを返します。

  1. valuenullの場合、nullを返す。
  2. state.strategyが"compression"に設定されている場合、statetermTypetermInfo、およびvalue5.2.5.2 圧縮用値変換アルゴリズムに渡した結果をoutputに設定する。
  3. そうでない場合、statetermTypetermInfo、およびvalue5.2.6.2 展開用値変換アルゴリズムに渡した結果をoutputに設定する。
  4. outputが定義されている場合、stateoutputを含む マップであるresultを返す。
  5. valueが配列の場合:
    1. outputsを空の配列に設定する。
    2. valueの各elementについて:
      1. activeContextstatetermInfotermType、およびelementvalueとして渡し、5.2.4 値変換アルゴリズムを 実行した結果をresultとする。stateresult.stateに設定し、 result.outputoutputsに追加する。
    3. resultを空のマップに設定する。result.statestateに、result.outputoutputsに設定する。
    4. resultを返す。
  6. outputを空のマップに設定する。
  7. stateactiveContextvalueinputとして、およびoutputを渡し、 5.2.3 汎用変換アルゴリズムを実行した結果を resultに設定する。
  8. resultを返す。

5.2.5 圧縮戦略 アルゴリズム

この節のアルゴリズムは、前に定義した「conversion」アルゴリズムとともに使用して JSON-LDをCBOR-LDへ変換するための"compression"戦略を定義します。

5.2.5.1 圧縮用コンテキスト変換アルゴリズム

このアルゴリズムは、マップstateactiveContextinput、 およびoutputを受け取り、 マップoutputstate、およびactiveContextを含む マップresultを返します。

  1. stateactiveContext、およびinputを渡して 5.3.2 埋め込みコンテキスト適用アルゴリズムを実行した結果を applyEmbeddedResultに設定する。
  2. activeContextapplyEmbeddedResult.activeContextに、 stateapplyEmbeddedResult.stateに設定する。
  3. inputに"@context"のエントリーがない場合:
    1. resultを空のマップに設定する。
    2. result.statestateに、 result.activeContextactiveContextに設定する。
    3. resultを返す。
  4. contextinput内の"@context"の値に設定する。
  5. encodedContextsを空の配列に設定する。
  6. contextが配列の場合、isArraytrueに、 contextscontextに設定する。 そうでない場合、isArrayfalseに、contexts[context]に設定する。
  7. contexts内のcontextValueごとに:
    1. state.typeTablecontextValueを渡して 5.5.1.1 コンテキストエンコーダー作成 を実行した結果をencoderDataに設定する。
    2. encoderDataが空のマップの場合、contextValueencodedContextsに追加する。
    3. そうでない場合、encoderDataの値を encodedContextsに追加する。
  8. isArraytrueの場合、idstate.keywordsMap内の "@context"の値に1を加えた値に設定し、 output内のidの値をencodedContextsに設定する。
  9. そうでない場合、idstate.keywordsMap内の"@context"の値に設定し、 output内の idの値をencodedContextsの最初の要素に設定する。
  10. result.outputoutputに、result.statestateに、result.activeContextactiveContextに設定する。
  11. resultを返す。
5.2.5.2 圧縮用値変換アルゴリズム

このアルゴリズムは、マップstateおよびtermInfo、ならびに値 valueToEncodeおよびtermTypeを受け取り、 マップencoderDataを返します。

  1. valueToEncodeがオブジェクトの場合、返る。
  2. そうでない場合、statetermInfovalueToToEncode、および termTypeを渡して5.5.2.1 値エンコーダー作成を 実行した結果をresultに設定する。
  3. resultを返す。
5.2.5.3 圧縮用入力エントリー取得アルゴリズム

このアルゴリズムは、マップstateactiveContext、および inputを受け取り、マップstateおよび配列entriesを返します。

  1. entriesを空の配列として初期化する。
  2. 配列keysを、辞書順にソートされたinputのキーに設定する。
  3. keys内のkeyごとに:
    1. keyが"@context"の場合、続行する。
    2. valueinput内のkeyの値に設定する。
    3. valueが配列の場合、pluraltrueに設定する。 そうでない場合、pluralfalseに設定する。
    4. keystate.termToId内のエントリーがない場合、 termIdkeyに設定する。
    5. そうでない場合、pluraltrueの場合、 termIdstate.termToId内のkeyの値に1を加えた値に設定する。
    6. そうでない場合、termIdstate.termToId内のkeyの値に設定する。
    7. activeContext.termMapkeyのエントリーがある場合、definitionactiveContext.termMap内のkeyの値に設定する。 そうでない場合、 definitionを空のマップに設定する。
    8. entryTermを新しいマップに設定する。
    9. entryTerm内の"term"の値を keyの値に設定する。termIdplural、および definitionentryTermに追加する。
    10. 2つの要素entryTermおよび valueを持つ配列entryを作成する。
    11. entryentriesに追加する。
  4. entriesおよびstateを含むマップresultを返す。
5.2.5.4 圧縮用オブジェクト型取得アルゴリズム

このアルゴリズムは、マップactiveContextおよびinputを受け取り、集合 objectTypesを返します。

  1. objectTypesを空の集合に設定する。
  2. activeContext.typeTerms内のtermごとに:
    1. terminput内のエントリーがある場合:
      1. typesinput内のtermの値に設定する。
      2. types内の各値をobjectTypesに追加する。
  3. objectTypesを返す。

5.2.6 展開 戦略アルゴリズム

この節のアルゴリズムは、前に定義した「conversion」アルゴリズムとともに使用して CBOR-LDをJSON-LDへ変換するための"decompression"戦略を定義します。

5.2.6.1 展開用コンテキスト変換アルゴリズム

このアルゴリズムは、マップstateactiveContextinput、 およびoutputを受け取り、 マップoutputstate、および activeContextを含むマップ resultを返します。

  1. state.reverseTypeTableを渡して 5.5.1.3 コンテキストデコーダー作成を 実行した結果をdecoderDataに設定する。
  2. contextTermIdstate.keywordsMap内の"@context"の値に設定する。
  3. contextTermIdinput内のエントリーがある場合、 decoderDatainput内のcontextTermIdの値をvalueとして 5.5.1.4 コンテキストをデコードするに 渡した結果をoutput内の"@context"の値に設定する。
  4. contextTermIdPluralcontextTermIdの値に1を加えた値に設定する。
  5. contextTermIdPluralinput内のエントリーがある場合:
    1. 前のチェック中にcontextTermIdにもinput内のエントリーがあった場合、 ERR_INVALID_ENCODED_CONTEXTエラーを投げる。
    2. encodedContextsinput内のcontextTermIdPlural の値に設定する。encodedContextsが 配列でない場合、ERR_INVALID_ENCODED_CONTEXTエラーを投げる。
    3. contextsを空の配列に設定する。
    4. encodedContexts内の各valueToDecodeについて、 decoderDatavalueToDecodevalueとして5.5.1.4 コンテキストをデコードするに渡した結果を contextsに追加する。
    5. output内の"@context"の値をcontextsに設定する。
  6. activeContextoutputinputとして、および stateを渡し、 5.3.2 埋め込みコンテキスト適用アルゴリズムを実行した結果を embeddedContextResultに設定する。
  7. resultを空のマップに設定する。
  8. result.stateembeddedContextResult.stateに、result.activeContextembeddedContextResult.activeContextに設定する。
  9. resultを返す。
5.2.6.2 展開用値変換アルゴリズム

このアルゴリズムは、マップstateおよびtermInfo、ならびに値 termTypevalueToDecodeを受け取り、値 decodedValueを返します。

  1. valueがマップの場合、返る。
  2. valueToDecodestatetermInfo、およびtermTypeを渡して 5.5.2.3 値デコーダー作成を実行した結果を decoderDataに設定する。
  3. decoderDataを渡して5.5.2.4 値をデコードするを実行した結果を decodedValueに設定する。
  4. decodedValueを返す。
5.2.6.3 展開用入力エントリー取得アルゴリズム

このアルゴリズムは、マップstateactiveContext、および inputを受け取り、マップstateおよび配列 entriesを返します。

  1. entriesを空の配列に初期化する。
  2. input内のキー値ペアkeyおよびvalueごとに:
    1. keystate.keywordsMap内の"@context"の値、またはその値に1を加えた値である場合、 続行する。
    2. そうでなく、keyが文字列の場合、pluralをfalseに、 termkeyに設定する。
    3. そうでない場合:
      1. keyが奇数の場合、pluralをtrueに設定する。そうでない場合、 pluralをfalseに設定する。
      2. pluraltrueの場合、termstate.idToTerm内の idから1を引いた値に設定する。 その値にエントリーがない場合、エラー ERR_UNKNOWN_CBORLD_TERM_IDを投げる。
      3. そうでない場合、termstate.idToTerm内のidの値に設定する。 その値にエントリーがない場合、エラーERR_UNKNOWN_CBORLD_TERM_IDを投げる。
    4. definitionactiveContext.termMap内のtermの値に設定する。
    5. entryTermを新しいマップに設定する。
    6. entryTerm内の"termId"の値を keyの値に設定する。termplural、および definitionentryTermに追加する。
    7. 2つの要素entryTermおよび valueを持つ配列entryを作成する。
    8. entryentriesに追加する。
  3. entries内の各要素のtermの値でentriesをソートする。
  4. entriesおよびstateを含むマップresultを返す。
5.2.6.4 展開用オブジェクト型取得アルゴリズム

このアルゴリズムは、マップstateactiveContextinputを 入力として受け取り、 マップstateおよび集合objectTypesを返します。

  1. objectTypesを空の集合に設定する。
  2. activeContext.typeTerms内のtermごとに:
    1. termstate.termToId内のエントリーがない場合、 termIdtermに設定する。
    2. そうでない場合、termIdstate.termToId内のtermの値に設定する。
    3. termIdtermIdに1を加えた値も input内に存在しない場合、続行する。
    4. そうでなく、termIdinput内に存在する場合、 valueinput内のtermIdの値に設定する。
    5. そうでない場合、valueinput内のtermIdに1を加えた値の値に設定する。
    6. keyが文字列の場合、pluralをfalseに、 termkeyに設定する。
    7. そうでない場合:
      1. keyが奇数の場合、pluralをtrueに設定する。そうでない場合、 pluralをfalseに設定する。
      2. pluraltrueの場合、termstate.idToTerm内の idから1を引いた値に設定する。 その値にエントリーがない場合、エラー ERR_UNKNOWN_CBORLD_TERM_IDを投げる。
      3. そうでない場合、termstate.idToTerm内のidの値に設定する。 その値にエントリーがない場合、エラーERR_UNKNOWN_CBORLD_TERM_IDを投げる。
    8. definitionactiveContext.termMap内のtermの値に設定する。
    9. termInfoを新しいマップに設定する。
    10. termtermIdplural、および definitiontermInfoに追加する。
    11. valueが配列でない場合、valuesvalueを 単一要素として含む配列に設定する。 そうでない場合、valuesvalueの値に設定する。
    12. values内の各valueについて:
      1. valuetermInfostate、および"@vocab"を termTypeとして渡して 5.5.2.3 値デコーダー作成を実行した結果をdecoderDataに設定する。
      2. decoderDataが存在する場合、decoderDataを渡して 5.5.2.4 値をデコードするを実行した結果を `objectTypesに追加する。
      3. そうでない場合、valueobjectTypesに追加する。
  3. objectTypesを返す。

5.3 アクティブコンテキスト処理

この節のアルゴリズムは、圧縮または展開の任意の時点で、JSON-LD 文書に関連付けられたコンテキスト文書のどの構成要素が使用されているかを 判断する方法を説明します。これらのアルゴリズムには、CBOR-LDで埋め込みコンテキスト、 型スコープ付きコンテキスト、およびプロパティスコープ付きコンテキストを適用する方法が含まれます。 これは、この仕様で後に定義されるContext Loadingアルゴリズムとは対照的です。Context Loadingアルゴリズムは、CBOR-LD 圧縮技法の中核である、用語から整数へのマッピングを構築する方法を説明します。 Active Context ProcessingアルゴリズムとContext Loadingアルゴリズムを合わせることで、CBOR-LDとの間で変換する際に JSON-LDコンテキスト文書をどのように処理すべきかを規定します。

5.3.1 アクティブ コンテキスト初期化アルゴリズム

このアルゴリズムは、マップpreviousActiveContextおよびtermMapを受け取り、 マップactiveContextを返します。これは使用中のアクティブコンテキストを更新し、 '@type'のすべてのエイリアスを見つけます。

  1. activeContextを新しいマップに設定する。
  2. activeContext.previousActiveContextpreviousActiveContextに設定する。
  3. activeContext.termMaptermMapに設定する。
  4. activeContext.typeTermsを配列['@type']に設定する。
  5. termMap内の[term, def]ごとに:
    1. def内の"@id"の値が"@type"である場合、termactiveContext.typeTermsに追加する。
  6. activeContextを返す。

5.3.2 埋め込み コンテキスト適用アルゴリズム

このアルゴリズムは、マップstateactiveContext、およびinputを 入力として受け取り、 マップstateおよびactiveContextを含むマップresultを返します。

  1. stateactiveContext.termMapactiveTermMapとして、またinput内の'@context'の値を contextsとして 5.3.5 用語 マップ更新アルゴリズムに渡した結果をtermMapUpdateResultに設定する。
  2. statetermMapUpdateResult.stateに設定する。
  3. termMaptermMapUpdateResult.activeTermMapに設定する。
  4. termMapactiveContextpreviousActiveContextとして渡し、 5.3.1 アクティブコンテキスト初期化アルゴリズムを実行した結果を newActiveContextに設定する。
  5. resultを新しいマップに設定し、result.activeContextnewActiveContextに、 result.statestateに設定する。
  6. resultを返す。

5.3.3 プロパティスコープ付きコンテキスト適用アルゴリズム

このアルゴリズムは、マップstateactiveContext、および文字列 termを入力として受け取り、 マップstateおよびactiveContextを含むマップresultを返します。

  1. activeContextを渡して5.3.6 用語マップ復元アルゴリズムを 実行した結果をrevertedTermMapに設定する。
  2. termDefactiveContext.termMap内のtermの値に設定する。contextstermDef内の"@context"の値に設定する。
  3. staterevertedTermMapactiveTermMapとして、truepropertyScopeとして、および contexts5.3.5 用語 マップ更新アルゴリズムに渡した結果をtermMapUpdateResultに設定する。
  4. statetermMapUpdateResult.stateに設定する。
  5. termMaptermMapUpdateResult.activeTermMapに設定する。
  6. termMapactiveContextpreviousActiveContextとして渡し、 5.3.1 アクティブコンテキスト初期化アルゴリズムを実行した結果を newActiveContextに設定する。
  7. resultを新しいマップに設定し、result.activeContextnewActiveContextに、 result.statestateに設定する。
  8. resultを返す。

5.3.4 型 スコープ付きコンテキスト適用アルゴリズム

このアルゴリズムは、マップstateactiveContext、および集合 objectTypesを入力として受け取り、 マップstateおよびactiveContextを含むマップresultを返します。

  1. objectTypesSortedを空の配列に設定する。
  2. objectTypesの要素を辞書順にソートし、その要素を順に objectTypesSortedに追加する。
  3. newTermMapactiveContext.termMapに設定する。
  4. objectTypesSorted内のtypeごとに:
    1. typeDefnewTermMap内のtypeの値に設定する。 contextstypeDef内の"@context"の値に設定する。
    2. statenewTermMapactiveTermMapとして、contexts、およびtruetypeScopeとして 5.3.5 用語マップ更新アルゴリズムに渡した結果をtermMapUpdateResultに設定する。
    3. statetermMapUpdateResult.stateに設定し、 newTermMaptermMapUpdateResult.activeTermMapに設定する。
  5. newTermMaptermMapとして、activeContextpreviousActiveContextとして渡し、 5.3.1 アクティブコンテキスト初期化アルゴリズムを実行した結果を newActiveContextに設定する。
  6. resultを新しいマップに設定し、result.activeContextnewActiveContextに、 result.statestateに設定する。
  7. resultを返す。

5.3.5 用語マップ更新アルゴリズム

このアルゴリズムは、マップstateactiveTermMap、およびマップまたは配列 contexts、ならびにブール値typeScopepropertyScopeを入力として受け取ります。これらはいずれも、指定されない場合は falseを既定値とします。これはマップstate およびactiveTermMapを返します。

  1. contextsが配列でない場合、contextsを、以前のcontextsの値を 唯一の要素として持つ配列に設定する。
  2. allowProtectedOverridepropertyScopeの値に設定する。
  3. propagateDefaulttypeScopeの値の否定に設定する。
  4. contexts内のcontextIdentifierごとに:
    1. stateおよび contextIdentifierを渡して5.4.2 コンテキスト読み込みアルゴリズムを 実行した結果をloadResultに設定する。
    2. entryloadResult.entryに、 contextentry.contextに、stateloadResult.stateに設定する。
    3. @propagatecontext内に現れる場合、propagatecontext内の@propagateの値に設定する。 そうでない場合、propagatepropagateDefaultの値に設定する。
    4. newTermMapを空のマップに設定する。entry.termMap内の [key, value]ごとに:
      1. valueの内容を新しいマップ newValueに浅くコピーし、propagatenewValueに追加する。
      2. newTermMap内のkeyの値を newValueに設定する。
    5. activeTermMap内の[term, activeDef]ごとに:
      1. defnewTermMap内のtermの値とする。
      2. defが定義されている場合:
        1. activeDef内のprotectedの値が trueである場合:
          1. allowProtectedOverridefalseに設定され、かつdefactiveDefと同一でない場合、 エラーERR_PROTECTED_TERM_REDEFINITIONを投げる。
          2. そうでない場合、 newTermMap内のtermの値を、 activeDefからの値と、 def.propagateの値に設定された propagateを含むマップに設定する。
      3. そうでなく、termcontext内に現れる場合、 newTermMap内のtermの値を activeDefからのすべての値を含むマップに設定する。
    6. activeTermMapの値をnewTermMapの値に設定する。
  5. resultを空のマップに設定する。
  6. result.statestateに、 result.activeTermMapactiveTermMapに設定する。
  7. resultを返す。

5.3.6 用語マップ復元アルゴリズム

このアルゴリズムは、マップactiveContextを入力として受け取り、マップ newTermMapを返します。

  1. newTermMapを空のマップに設定する。
  2. nonPropagatingTermsを空の配列に設定する。
  3. activeContext内の[term, def]ごとに:
    1. def.propagatefalseに設定されている場合、 termnonPropagatingTermsに追加し、このループの次の反復に進む。
    2. そうでない場合、newTermMap内のtermの値を defに設定する。
  4. nonPropagatingTerms内のtermごとに:
    1. currentContextactiveContext.previousActiveContextに設定する。
    2. defcurrentContext.termMap内のtermの値に設定する。
    3. defがundefinedでなく、def.propagatefalseに設定されている間:
      1. currentContextactiveContext.previousActiveContextに設定する。
      2. defcurrentContext.termMap内のtermの値に設定する。
    4. defがundefinedでない場合、newTermMap内のtermの値を defに設定する。
  5. newTermMapを返す。

5.4 コンテキスト読み込み

この節のアルゴリズムは、CBOR-LD圧縮技法の中核として使用される、 用語と整数の間のマッピングを構築する方法を定義します。

5.4.1 コンテキストローダー初期化アルゴリズム

このアルゴリズムはマップstateを受け取り、返します。

  1. state.contextMapを新しいマップに設定する。
  2. state.nextTermIdを100に設定する。
  3. state.keywordsMapを、JSON-LDキーワードから関連付けられた 整数値への次のマップに設定する:
    {
      '@context' => 0,
      '@type' => 2,
      '@id' => 4,
      '@value' => 6,
      '@direction' => 8,
      '@graph' => 10,
      '@included' => 12,
      '@index' => 14,
      '@json' => 16,
      '@language' => 18,
      '@list' => 20,
      '@nest' => 22,
      '@reverse' => 24,
      '@base' => 26,
      '@container' => 28,
      '@default' => 30,
      '@embed' => 32,
      '@explicit' => 34,
      '@none' => 36,
      '@omitDefault' => 38,
      '@prefix' => 40,
      '@preserve' => 42,
      '@protected' => 44,
      '@requireAll' => 46,
      '@set' => 48,
      '@version' => 50,
      '@vocab' => 52,
      '@propagate' => 54
    }
  4. state.keywordsMap内の各エントリーをstate.termToIdに追加する。
  5. state.strategyが"decompression"に設定されている場合、 state.idToTermstate.termToIdの逆マップ(すなわち、整数からJSON-LDキーワードへのマップ)に設定する。
  6. stateを返す。

5.4.2 コンテキスト読み込みアルゴリズム

このアルゴリズムは、マップstateとコンテキストマップまたはURL contextIdentifierを受け取り、 マップstateおよびentryを含むマップである resultを返します。

  1. state.contextMapcontextIdentifierのエントリーがある場合:
    1. resultを空のマップに初期化する。
    2. result.statestateに設定する。
    3. result.entrystate.contextMap内のcontextIdentifierの値に設定する。
    4. resultを返す。
  2. contextが文字列の場合:
    1. 関連付けられたコンテキストオブジェクトを取得し、contextを そのオブジェクト内の"@context"の値に設定する。
    2. contextUrlcontextIdentifierの値に設定する。
  3. そうでない場合、contextcontextIdentifierに設定する。
  4. statecontext、および設定されている場合はcontextUrlを渡して 5.4.3 コンテキスト追加アルゴリズムを実行した結果を resultに設定する。
  5. resultを返す。

5.4.3 コンテキスト追加アルゴリズム

このアルゴリズムは、マップstate、コンテキストオブジェクトcontext、およびコンテキスト URLcontextUrlを受け取り、 マップstateおよびentryを含むマップであるresultを返します。

  1. contextに"@import"エントリーがある場合:
    1. importUrlを`context内の"@import"の値に設定する。
    2. state.contextMapimportUrlのエントリーがない場合:
      1. importUrlに関連付けられたコンテキストオブジェクトを取得し、 importContextをそのオブジェクト内の "@context"の値に設定する。
      2. stateimportContextcontextとして、 およびimportUrlcontextUrlとして渡して 5.4.3 コンテキスト追加アルゴリズムを実行した結果を importedContextAdditionResultに設定する。
      3. stateimportedContextAdditionResult.stateに、 importEntryimportedContextAdditionResult.entryに設定する。
    3. そうでない場合、importEntrystate.contextMap内のimportUrlの値に設定する。
    4. contextを、contextからのすべてのエントリーと importEntry.contextを含むマップに設定する。
  2. termMapを空のマップに設定する。
  3. entryを、contextおよびtermMapを含むオブジェクトに設定する。
  4. sortedTermsを、context内のキーを辞書順にソートした結果に設定する。
  5. "@protected"にcontext内のエントリーがある場合、isProtectedtrueに、そうでない場合はfalseに設定する。
  6. sortedTerms内のtermごとに:
    1. termstate.keywordsMap内のエントリーがある場合、このループの 次の反復に進む。
    2. definitioncontext内のtermの値に設定する。
    3. definitionnullの場合、この ループの次の反復に進む。
    4. definitionが文字列の場合:
      1. newDefinitionを空のマップに設定する。
      2. newDefinition内の"@id"の値をdefinitionに設定する。
      3. definitionの値をnewDefinitionに設定する。
    5. definition内のprotectedの値を isProtectedに設定する。
    6. termMap内のtermの値をdefinitionに設定する。
    7. termstate.termToId内のエントリーがない場合:
      1. termIdstate.nextTermIdに設定する。
      2. state.nextTermIdを2増やす。
      3. state.termToId内のtermの値を termIdに設定する。
      4. state.idToTerm内のtermIdの値を termに設定する。
  7. contextUrlが定義されている場合、 state.contextMap内のcontextUrlの値をentryに設定する。
  8. そうでない場合、state.contextMap内のcontextの値 をentryに設定する。
  9. resultを空のマップに設定する。
  10. result.statestateに、result.entryentryに設定する。
  11. resultを返す。

5.5 コーデック

この節のコーデックは、JSON-LD内の個々の値をCBORへ、またその逆へどのように変換すべきかを 正確に規定します。これらは前節のアルゴリズムで使用され、CBOR-LDがプリミティブ型と 非プリミティブ型の両方をCBORとして効率的に エンコードできるようにします。

5.5.1 コンテキストコーデック

5.5.1.1 コンテキストエンコーダー作成

このアルゴリズムは、マップtypeTableおよび値contextValueを受け取り、 マップencoderDataを返します。

  1. encoderDataを空のマップに初期化する。
  2. contextValueが文字列でない場合、返る。
  3. そうでない場合、contextTabletypeTable内の"context"の値に設定する。
  4. encoderData.contextcontextValueに、 encoderData.contextTablecontextTableに設定する。
  5. encoderDataを返す。
5.5.1.2 コンテキストをエンコードする

このアルゴリズムはマップencoderDataを受け取り、CBORバイナリデータを返します。

  1. encoderData.contextencoderData.contextTable内のエントリーがある場合、 encoderData内のencoderData.contextの値を Major Type 0(符号なし整数)オブジェクトとしてCBORエンコードしたものを返す。
  2. そうでない場合、 encoderData.contextの値をMajor Type 3 (テキスト文字列)オブジェクトとしてCBORエンコードしたものを返す。
5.5.1.3 コンテキストデコーダー作成

このアルゴリズムはマップreverseTypeTableを受け取り、 マップencoderDataを返します。

  1. reverseContextTablereverseTypeTable内の"context"の値に設定する。
  2. decoderDataを空のマップに初期化する。
  3. decoderData.reverseContextTablereverseContextTableの値に設定し、 decoderDataを返す。
5.5.1.4 コンテキストをデコードする

このアルゴリズムは、マップdecoderDataおよび値valueを受け取り、 値を返します。

  1. valueが数値でない場合、valueを返す。
  2. そうでなく、decoderData.reverseContextTablevalueのエントリーがある場合、 そのエントリーの値を返す。
  3. そうでない場合、エラーERR_UNDEFINED_COMPRESSED_CONTEXTを投げる。

5.5.2 値コーデック

5.5.2.1 値エンコーダー作成

このアルゴリズムは、マップstateおよびtermInfo、ならびに値 termTypeおよびvalueToEncodeを受け取り、マップencoderData またはvalueToEncodeを返します。

  1. isUrlfalseに設定する。
  2. termInfo.termが"@id"または"@type"の場合、isUrltrueに設定する。
  3. termInfo.def内の"@id"の値が"@id"または"@type"である場合、 isUrlをtrueに設定する。
  4. termTypeが"@id"または"@vocab"である場合、isUrltrueに設定する。
  5. isUrltrueである場合、tableTypeを"url"に設定する。
  6. そうでなく、termTypeが定義されている場合、tableTypetermTypeに設定する。
  7. そうでない場合、tableTypeを"none"に設定する。
  8. state.typeTabletableTypeのエントリーがある場合:
    1. subTablestate.typeTable内のtableTypeの値に設定する。
    2. subTablevalueToEncodeのエントリーがある場合:
      1. intValuesubTable内のvalueToEncodeの値に設定する。 includeSignfalseに設定する。
      2. state.typesEncodedAsBytestableTypeのエントリーがある場合、convertToBytestrueに設定する。 そうでない場合、convertToBytesfalseに設定する。
    3. そうでなく、tableTypeが"none"でなく、valueToEncodeが 整数である場合:
      1. intValuevalueToEncodeの値に設定する。
      2. convertToBytesおよびincludeSigntrueに設定する。
    4. intValueが定義されている場合:
      1. encoderDataを空のマップに初期化する。
      2. encoderData.intValueintValueの値に、encoderData.convertToBytesconvertToBytesの値に、 encoderData.includeSignincludeSignの値に設定する。
      3. encoderDataを返す。
  9. tableTypestate.processingModeTypeEncoders内のエントリーがある場合、 encoderDataを、そのエントリーのコーデックに関連付けられた Create Encoderアルゴリズムを呼び出した結果に設定する。
  10. encoderDataが定義されている場合、encoderDataを返す。
  11. valueToEncodeを返す。
5.5.2.2 値をエンコードする

このアルゴリズムはマップencoderDataを受け取り、CBORバイナリデータを返します。

  1. encoderData.convertToBytestrueである場合:
    1. intValueをバイトに変換した結果をbytesに設定する。 このとき、includeSignの値を使用して、 整数のバイナリ表現が符号付きか符号なしかを判断する。
    2. bytesをMajor Type 2(バイト文字列)オブジェクトとしてCBORエンコードしたものを返す。
  2. そうでない場合、intValueをMajor Type 0(符号なし 整数)オブジェクトとしてCBORエンコードしたものを返す。
5.5.2.3 値デコーダー作成

このアルゴリズムは、マップstateおよびtermInfo、ならびに値 termTypeおよびvalueToDecodeを受け取り、マップ decoderDataを返します。

  1. isUrlfalseに設定する。
  2. termInfo.termが"@id"または"@type"の場合、isUrltrueに設定する。
  3. termInfo.def内の"@id"の値が"@id"または"@type"である場合、 isUrltrueに設定する。
  4. termTypeが"@id"または"@vocab"である場合、isUrltrueに設定する。
  5. isUrltrueである場合、tableTypeを"url"に設定する。
  6. そうでなく、termTypeが定義されている場合、tableTypetermTypeに設定する。
  7. そうでない場合、tableTypeを"none"に設定する。
  8. state.reverseTypeTabletableTypeのエントリーがある場合:
    1. subTablestate.reverseTypeTable内のtableTypeの値に設定する。
    2. useTablefalseに設定する。
    3. valueToDecodeがバイト配列であり、 state.typesEncodedAsBytestableTypeのエントリーがある場合:
      1. useTabletrueに設定する。
      2. intValueを、 valueToDecodeバイトの符号なし整数変換に設定する。
    4. そうでなく、valueToDecodeが整数であり、 state.typesEncodedAsBytestableTypeのエントリーがない場合:
      1. useTabletrueに設定する。
      2. intValuevalueToDecodeに設定する。
    5. useTabletrueである場合:
      1. intValuesubTable内にない場合、エラー ERR_UNKNOWN_COMPRESSED_VALUEを投げる。
      2. そうでない場合、decodedsubTable内のintValueの値に設定する。
    6. そうでなく、valueToDecodeがバイト配列であり、tableType が"none"でない場合、 decodedvalueToDecodeの整数変換に設定する。
    7. decodedが定義されている場合、decoderDataを空の マップに初期化し、decoderData.decodeddecodedの値に設定し、decoderDataを返す。
  9. tableTypestate.processingModeTypeDecoders内のエントリーがある場合、 DecoderDataを、そのエントリーのコーデックに関連付けられた Create Decoderアルゴリズムを呼び出した結果に設定する。
  10. decoderDataが定義されている場合、decoderDataを返す。
  11. そうでなく、valueToDecodeが配列でない場合、 decoderDataを空のマップに初期化し、 decoderData.decodedvalueToDecodeに設定し、 decoderDataを返す。
5.5.2.4 値をデコードする

このアルゴリズムはマップdecoderDataを受け取り、値を返します。

  1. decoderData.decodedを返す。

5.6 CBORタグ処理

5.6.1 CBORタグ 構造取得アルゴリズム

このアルゴリズムは、整数registryEntryIdを入力として受け取り、バイト文字列 prefixを返します。
  1. registryEntryBytesregistryEntryIDのCBORエンコーディングに設定する。
  2. prefixを、registryEntryBytesをバイト文字列 0xD9CB1D82の末尾に追加した結果に設定する。
  3. prefixを返す。

5.6.2 レジストリーエントリーID 取得アルゴリズム

このアルゴリズムは、エンコードされたCBOR-LDペイロードcborldBytesを入力として受け取り、 デコードされる主データであるsuffix、およびsuffixを展開するために使用すべき registryEntryId値を返します。

  1. cborldbytes上のCBORタグが0xCB1D(タグ値51997)でない場合、 ERR_NON_CBOR_LD_TAGエラーを投げる。
  2. タグ付き項目が、最初の要素がCBOR整数である2要素の配列でない場合、 ERR_INVALID_PAYLOAD_STRUCTUREエラーを投げる。
  3. registryEntryIdの値を、タグ付き配列のインデックス0にある整数の値に設定する。
  4. suffixの値を、配列の2番目の要素の値に設定する。
  5. resultを空のマップに設定する。
  6. result.suffixsuffixの値に、 result.registryEntryIdregistryEntryIdの値に設定する。
  7. resultを返す。

6. セキュリティの考慮事項

この節は非規範的です。

7. プライバシーの考慮事項

この節は非規範的です。

8. IANAの考慮事項

この節は非規範的です。

8.1 CBORタグ

この仕様は、消費者がCBOR-LDペイロードを識別できるようにするためのCBORタグを登録します。 以下は暫定的なものであり、まだIANAによって批准されていません。

タグ: 51997

レジストリ: https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml

データ項目: 配列

セマンティクス: タグ値51997は、ペイロードがCBOR-LDであることを示します。

セマンティクスの説明: https://w3c.github.io/cbor-ld/#cbor-tags-for-cbor-ld

連絡先: Wesley Smith (wsmith@digitalbazaar.com)

A. 参考文献

A.1 規範参考文献

[RFC2119]
要求レベルを示すためにRFCで使用される キーワード. S. Bradner. IETF. 1997年3月. 現在のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC8174]
RFC 2119キーワードにおける大文字と小文字の曖昧性. B. Leiba. IETF. 2017年5月. 現在のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc8174/