JSON-LD 1.1 フレーミング

JSON-LD 構文のためのアプリケーションプログラミングインターフェイスの拡張

W3C 勧告

このバージョン:
https://www.w3.org/TR/2020/REC-json-ld11-framing-20200716/
最新公開バージョン:
https://www.w3.org/TR/json-ld11-framing/
最新の編集者草案:
https://w3c.github.io/json-ld-framing/
テストスイート:
https://w3c.github.io/json-ld-framing/tests/
実装レポート:
https://w3c.github.io/json-ld-api/reports/
以前のバージョン:
https://www.w3.org/TR/2020/PR-json-ld11-framing-20200507/
編集者:
Dave Longley (Digital Bazaar) (v1.0 および v1.1)
Gregg Kellogg (v1.0 および v1.1)
Pierre-Antoine Champin (LIRIS - Université de Lyon) (v1.1)
元編集者:
Manu Sporny (Digital Bazaar) (v1.0)
Markus Lanthaler (Google) (v1.0)
著者:
Dave Longley (Digital Bazaar) (v1.0)
Manu Sporny (Digital Bazaar) (v1.0)
Gregg Kellogg (v1.0 および v1.1)
Markus Lanthaler (Google) (v1.0)
Niklas Lindström (v1.0)
参加:
GitHub w3c/json-ld-framing
バグを報告
コミット履歴
プルリクエスト

公開後に報告された誤りや問題については、 正誤表を確認してください。

関連情報として 翻訳も参照してください。

この文書は、次の非規範的な形式でも利用できます: EPUB


概要

JSON-LD フレーミングにより、開発者は例によるクエリを行い、 JSON-LD 文書に特定のツリーレイアウトを強制できます。

この仕様は、 JSON-LD Framing 1.0 [JSON-LD10-FRAMING] で定義された機能の上位集合を記述しており、 特に注記がない限り、 この仕様で説明されるアルゴリズムは、以前のコミュニティ標準を用いて作成された文書と 完全に互換性があります。

この文書のステータス

この節では、公開時点におけるこの文書の ステータスを説明します。他の文書がこの文書に取って代わる 可能性があります。現在の W3C 公開物の一覧と、 この技術報告書の 最新リビジョンは、 https://www.w3.org/TR/ の W3C 技術報告書 インデックスにあります。

この文書は JSON-LD ワーキンググループによって開発され、JSON-LD コミュニティグループ最終報告書から派生したものです。

この文書で説明される機能を実演できる ライブ JSON-LD プレイグラウンドがあります。

この文書は、JSON-LD ワーキンググループによって 勧告として 公開されました。

この仕様に関する議論には、 GitHub Issues が推奨されます。 あるいは、メーリングリストにコメントを送信することもできます。 コメントは public-json-ld-wg@w3.org (アーカイブ) 宛てに送信してください。

ワーキンググループの 実装レポートを参照してください。

この文書は、W3C メンバー、ソフトウェア 開発者、および 他の W3C グループと関心を持つ関係者によってレビューされ、ディレクターにより W3C 勧告として承認されています。これは安定した文書であり、 参考資料として使用したり、別の文書から引用したりできます。勧告を作成する上での W3C の役割は、この仕様に注意を喚起し、その 広範な展開を促進することです。これにより Web の機能性と相互運用性が 向上します。

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

この文書は、 2019年3月1日付 W3C プロセス文書によって管理されます。

文書一式

この文書は、 JSON-LD ワーキンググループによって作成された 3つの JSON-LD 1.1 勧告のうちの1つです:

1. はじめに

この節は非規範的です。

JSON-LD は、JSON [RFC8259] で Linked Data [LINKED-DATA] をシリアライズするための軽量な構文です。 その設計により、既存の JSON を最小限の変更で Linked Data として解釈できます。 有向グラフを記述する Linked Data の他の表現と同様に、 1つの有向グラフは多くの異なるシリアライズを持つことができ、それぞれが まったく同じ情報を表します。開発者は通常、 JSON オブジェクトとして表現されるツリーを扱います。グラフを ツリーに対応付けることはできますが、最終結果のレイアウトは事前に指定する必要があります。 開発者は フレームを JSON-LD 文書に対して使用し、 グラフの決定的なレイアウトを 指定できます。

データの塊を区切り記号で囲むことは「フレーミング」と呼ばれます。 JSON-LD は、{} などの JSON 区切り記号を使用して、 特定の主語に関する文を分離します。JSON-LD では、文字列として表される 識別子を使用して、主語が他の主語を参照することもできます。

しかし、JSON-LD は情報の1つ以上のグラフを表すため、 複数の関連する主語に関する文を1つの文書全体にフレーミングする方法は 複数あります。実際、情報のグラフは、何らかの形で まとめられていない独立した文(別名 トリプル)の長いリストと 考えることができます。

JSON-LD Framing APIにより、 開発者はデータをどのようにフレーミングしたいかを正確に指定できます。 これにより、特定の主語に関する文がまとめられ、 {} によって区切られ、さらにそれらが関連する主語が、 アプリケーションの期待に一致する特定のツリー構造に「ネスト」されます。

1.1 この文書の読み方

この節は非規範的です。

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

関連文書である JSON-LD 1.1 仕様 [JSON-LD11] は、JSON-LD 文書の文法を規定しています。

この仕様の基本を理解するには、まず JSON に精通している必要があります。これは [RFC8259] で詳述されています。 また、この文書のすべてのアルゴリズムで使用される基礎構文である JSON-LD 1.1 Syntax 仕様 [JSON-LD11]、 および JSON-LD 1.1 API [JSON-LD11-API] を理解している必要があります。 API と、それがプログラミング環境でどのように動作することを意図しているかを理解するには、 JavaScript プログラミング言語 [ECMASCRIPT] および WebIDL [WEBIDL] の実用的な知識があると有用です。 JSON-LD が RDF にどのように対応付けられるかを理解するには、 基本的な RDF 概念 [RDF11-CONCEPTS] に 精通していると役立ちます。

この文書では、JSON-LD 1.0 版以降の変更を強調表示できます。 変更を するには選択してください。

1.2 貢献

この節は非規範的です。

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

1.3 表記上の規則

この節は非規範的です。

この仕様では、次の表記上の規則を使用します:

markup
マークアップ(要素、属性、プロパティ)、 機械処理可能な値(文字列、文字、メディアタイプ)、 プロパティ名、 またはファイル名は、赤橙色の等幅フォントで示されます。
variable
擬似コードまたはアルゴリズム記述内の変数は斜体で示されます。
定義
この仕様または他の仕様の別の箇所で使用される用語の定義は、 太字および斜体で示されます。
定義参照
この文書内の定義への参照は、 下線付きで示され、定義自体へのアクティブリンクにもなっています。
マークアップ定義参照
この文書内の定義への参照で、 参照自体もマークアップである場合は、下線付き、 赤橙色の等幅フォントで示され、定義自体へのアクティブリンクにもなっています。
外部定義参照
別の文書内の定義への参照は、 下線付き、斜体で示され、定義自体へのアクティブリンクにもなっています。
マークアップ外部定義参照
別の文書内の定義への参照で、 参照自体もマークアップである場合は、 下線付き、斜体の赤橙色の等幅フォントで示され、 定義自体へのアクティブリンクにもなっています。
ハイパーリンク
ハイパーリンクは下線付きで青色で示されます。
[参照]
文書参照(規範的または参考情報)は角括弧で囲まれ、 参考文献節にリンクされます。
勧告からの変更
以前の勧告から変更された節または語句は、 § 1.1 この文書の読み方のコントロールを使用して 強調表示される場合があります。
注記

注記は、緑色の左ボーダーと緑色の「注記」見出しを持つ薄緑色のボックスで示されます。 注記は常に参考情報です。

例は、カーキ色の左ボーダーを持つ薄いカーキ色のボックスで示され、
番号付きの「例」見出しがカーキ色で表示されます。
例は常に参考情報です。例の内容は等幅フォントで表示され、構文に色が付けられる場合があります。

例には、例を他の表現に変換した結果を
表示するためのタブ付きナビゲーションボタンが含まれる場合があります。

1.4 用語

この文書は、外部仕様で定義された次の用語を使用し、 JSON-LD に固有の用語を定義します。

他の仕様から取り込まれた用語

ECMAScript Language Specification [ECMASCRIPT]、 The JavaScript Object Notation (JSON) Data Interchange Format [RFC8259]、 Infra Standard [INFRA]、および Web IDL [WEBIDL] から取り込まれた用語

配列
JSON シリアライズでは、 配列構造は、 0個以上の値を囲む角括弧として表されます。 値はコンマで区切られます。 内部表現では、 リスト配列とも呼ばれます)は、 0個以上の値からなる順序付きコレクションです。 JSON-LD は JSON と同じ配列表現を使用しますが、 コレクションはデフォルトでは順序なしです。 通常の JSON 配列では順序が保持されますが、 特に定義されていない限り、通常の JSON-LD 配列では保持されません (JSON-LD 1.1 の Sets and Lists 節を参照)。
boolean
2つの可能な状態のいずれかを表すために使用される true および false の値。
JSON オブジェクト
JSON シリアライズでは、 オブジェクト構造は、 0個以上の名前/値ペア(またはメンバー)を囲む一対の中括弧として表されます。 名前は文字列です。 各名前の後には単一のコロンが続き、 名前と値を分離します。 単一のコンマが、値と後続の名前を区切ります。 JSON-LD では、オブジェクト内の名前は一意でなければなりません。

内部表現では、 JSON オブジェクトmap ([INFRA] を参照)として記述され、 キー/値ペアを持つ エントリで 構成されます。

アプリケーション プログラミングインターフェイスでは、 map は [WEBIDL] の record を使用して記述されます。

null
JSON-LD 内での null 値の使用は、値を無視またはリセットするために使用されます。 @context 内のmap エントリで、 値または値の @idnull である場合、 用語と IRI との関連付けを明示的に切り離します。 map エントリJSON-LD 文書の本文内にあり、 その値が null である場合、 そのmap エントリが定義されていない場合と同じ意味を持ちます。 展開形で @value@list、または @setnull に設定されている場合、 JSON オブジェクト全体が無視されます。
number
JSON シリアライズでは、number は、 ほとんどのプログラミング言語で使用されるものと似ていますが、 8進数および16進数形式は使用されず、先頭のゼロは 許可されません。 内部表現では、 number は、 その数値に非ゼロの小数部があるかどうかに応じて、 long または double のいずれかと 等価です([WEBIDL] を参照)。
スカラー
スカラーは、文字列numbertrue、または false のいずれかです。
文字列
文字列は、 0個以上の Unicode(UTF-8)文字の並びであり、 ダブルクォートで囲まれ、必要に応じてバックスラッシュエスケープを使用します。 文字は1文字の文字列として表されます。

Internationalized Resource Identifiers (IRIs) [RFC3987] から取り込まれた用語

IRI
scheme と、path および任意の queryfragment セグメントを含む IRI の絶対形式。
IRI 参照
Internationalized Resource Identifier の一般的な用法を表します。 IRI 参照は、 絶対または 相対であり得ます。 ただし、そのような参照から得られる「IRI」には、 絶対 IRI のみが含まれます。 すべての相対 IRI 参照は、 その絶対形式に解決されます。
相対 IRI 参照
相対 IRI 参照は、他の IRI 参照に対して相対的な IRI であり、 通常は文書の基底 IRI に対して相対的です。 プロパティ@type の値、 および語彙相対として定義された用語の値は、 語彙マッピングに対して解決され、 基底 IRIに対してではないことに注意してください。

RDF 1.1 Concepts and Abstract Syntax [RDF11-CONCEPTS]、RDF Schema 1.1 [RDF-SCHEMA]、および Linked Data Design Issues [LINKED-DATA] から取り込まれた用語

基底 IRI
基底 IRIは、コンテキストで確立された IRI、 またはJSON-LD 文書の 場所に基づくものです。 基底 IRIは、相対 IRI 参照IRI に変換するために使用されます。
空白 ノード
グラフ内の ノードであり、 IRIでも リテラルでもないもの。 空白 ノードは、 本質的に一時的なものであるか、 linked data graph の外部からリンクする必要のある情報を含まないため、 参照解除可能な識別子を含みません。 JSON-LD では、 空白ノードには接頭辞 _: で始まる識別子が割り当てられます。
空白ノード 識別子
空白ノード 識別子は、 JSON-LD 文書のスコープ内で空白ノードの識別子として使用できる文字列です。 空白ノード識別子は _: で始まります。
データセット
RDF グラフのコレクションを表すデータセットであり、 正確に1つのデフォルトグラフと 0個以上の名前付きグラフを含みます。
データ型 IRI
データ型 IRIは、 字句形式が リテラル値にどのように対応付けられるかを決定する データ型を識別する IRI です。
デフォルト グラフ
データセットデフォルトグラフは、 名前を持たない RDF グラフであり、空である場合があります。
グラフ名
名前付きグラフを識別する IRI または 空白 ノード
言語タグ付き 文字列
言語タグ付き 文字列は、 [BCP47] で定義される文字列と空でない言語タグで構成されます。 言語タグは、 [BCP47] の 2.2.9 Classes of Conformance 節に従って整形式でなければなりません。 プロセッサーは言語タグを 小文字に正規化してもよいです。
Linked Data
それぞれがlinked data graphまたはデータセットの表現を含む文書の集合。
リスト
リストは、 IRI空白ノード、およびリテラルの順序付きシーケンスです。
リテラル
文字列またはnumberのような値として表される オブジェクト。 暗黙的または明示的にデータ型 IRIを含み、データ型が rdf:langString である場合は、任意の言語タグを含みます。
名前付き グラフ
名前付き グラフは、 IRIまたは空白 ノードによって識別されるlinked data graphです。
ノード
RDF グラフ内のノードであり、 少なくとも1つのトリプル主語またはオブジェクトです。 ノードは、同じ トリプル内であっても、 主語オブジェクトの 両方の役割をグラフ内で担うことができる点に注意してください。
オブジェクト
オブジェクトは、 少なくとも1つの入ってくるエッジを持つノードであり、 linked data graph内にあります。
プロパティ
linked data graph内の有向弧の名前。 すべてのプロパティは方向性を持ち、 IRIまたは空白ノード 識別子でラベル付けされます。 可能な限り、プロパティIRIでラベル付けされるべきです。
注記
プロパティにラベルを付けるために空白ノード 識別子を使用することは廃止されており、 JSON-LD の将来のバージョンで削除される可能性があります。
また、[RDF11-CONCEPTS] の 述語も参照してください。
RDF グラフ
ラベル付き有向グラフ、 すなわち、有向弧によって接続されたノードの集合。 linked data graphとも呼ばれます。
リソース
IRI空白 ノード、またはリテラルによって示される リソースであり、 世界(「議論領域」)内の何かを表します。
主語
主語は、 少なくとも1つの出ていくエッジを持つノードであり、 linked data graph内で、 プロパティを通じてオブジェクトノードに関連付けられています。
トリプル
主語述語、およびオブジェクトを含む RDF グラフの構成要素であり、 RDF グラフの ノード-弧-ノードのセグメントを表します。

JSON-LD 固有の用語定義

アクティブ コンテキスト
処理アルゴリズムの実行中に用語を解決するために使用される コンテキスト
基底方向
基底 方向は、文字列に直接関連付けられた方向がない場合に使用される方向です。 コンテキスト内で、 値が "ltr""rtl"、または null のいずれかの文字列でなければならない @direction キーを使用して設定できます。 規範的な説明については、JSON-LD 1.1 の Context Definitions 節を参照してください。
コンテキスト
JSON-LD 1.1 の The Context 節で説明され、 JSON-LD 1.1 の Context Definitions 節で規範的に規定される、 JSON-LD 文書を 解釈するための規則の集合。
デフォルトオブジェクト
デフォルト オブジェクトは、@default キーを持つ map です。
フレーム
照合規則および埋め込み規則を使用して、別の JSON-LD 文書を変換する形式を記述する JSON-LD 文書。 フレーム文書では、照合および変換プロセスを記述するために、 追加のキーワードと特定のmap エントリを使用できます。
フレーム オブジェクト
フレームオブジェクトは、フレーム内の map 要素であり、 入力内のノード オブジェクトまたは値オブジェクトのいずれかに一致する フレームの特定の部分を表します。 規範的な説明については、JSON-LD 1.1 の Frame Objects 節を参照してください。
JSON-LD 文書
JSON-LD 文書は、 RDF データセットのシリアライズです。 形式的な説明については、JSON-LD 1.1 の JSON-LD Grammar 節を参照してください。
JSON-LD 内部表現
JSON-LD 内部表現は、 JSON 構文構造を、直接処理に適した中核データ構造へ変換した結果です: 配列map文字列numberboolean、およびnull
JSON-LD プロセッサー
JSON-LD プロセッサーは、 JSON-LD 1.1 Processing Algorithms and API で定義されたアルゴリズムを実行できるシステムです。 形式的な説明については、JSON-LD 1.1 API の Conformance 節を参照してください。
JSON-LD 値
JSON-LD 値は、文字列numbertrue または false型付き 値、 または言語タグ付き 文字列です。 これはRDF リテラルを表します。
キーワード
JSON-LD に固有の文字列であり、 JSON-LD 1.1 の Syntax Tokens and Keywords 節で説明され、 JSON-LD 1.1 の Keywords 節で規範的に規定されます。
ノード オブジェクト
ノード オブジェクトは、 JSON-LD 文書によってシリアライズされた グラフ内の ノードの 0個以上のプロパティを表します。 map は、 JSON-LD コンテキストの外側に存在し、かつ:
  • @value@list、または @set キーワードを含まない、または
  • JSON-LD 文書内の最上位のmapであって、 @graph@context 以外のエントリを 含まないものではない。
そのキーがキーワードでないノード オブジェクトエントリは、 そのノード オブジェクトプロパティとも呼ばれます。 規範的な説明については、JSON-LD 1.1 の Node Objects 節を参照してください。
ノード参照
@id キーのみを持つノードを参照するために使用される ノード オブジェクト
処理 モード
処理モードは、 JSON-LD 文書がどのように処理されるかを定義します。 デフォルトでは、すべての文書はこの仕様に適合しているものと想定されます。 コンテキスト内の @version エントリを使用して異なるバージョンを定義することにより、 発行者は、JSON-LD 1.0 [JSON-LD10] に適合するプロセッサーが JSON-LD 1.1 文書を誤って処理し、異なる出力を生成する可能性を避けることができます。 API は、処理モードjson-ld-1.0 に設定するためのオプションを提供します。 これにより、JSON-LD 1.1 の機能が有効化されるのを防ぎ、 またはコンテキスト内の @version エントリが明示的に 1.1 に設定されている場合にエラーになります。 この仕様は、json-ld-1.1 処理モードを通じて JSON-LD 1.0を拡張します。
スコープ付きコンテキスト
スコープ付き コンテキストは、 @context エントリを使用する 展開済み用語定義の一部です。 これは埋め込みコンテキストと同じ形式を持ちます。 用語が型として使用される場合、それは 型スコープ付き コンテキストを定義し、 プロパティとして使用される場合、それは プロパティスコープ付き コンテキストを定義します。
型付き値
型付き 値は、 文字列である値と、 IRIである型で構成されます。
値 オブジェクト
値 オブジェクトは、@value エントリを持つ map です。 規範的な説明については、JSON-LD 1.1 の Value Objects 節を参照してください。
語彙 マッピング
語彙マッピングは、コンテキスト内で @vocab キーを使用して設定されます。 その値は、IRIコンパクト IRI用語、または null でなければなりません。 規範的な説明については、JSON-LD 1.1 の Context Definitions 節を参照してください。

1.4.1 アルゴリズム用語

次の用語は、特定のアルゴリズム内で使用されます。

アクティブ プロパティ
プロセッサーが処理時に使用する、現在アクティブなプロパティまたはキーワードアクティブプロパティは、 元の字句形式で表され、 アクティブコンテキスト内の強制マッピングを見つけるために使用されます。
明示的包含フラグ
出力に含めるプロパティは、 一致するフレーム内で明示的に宣言されていなければならないことを指定するフラグ。
フレーミング状態
オブジェクト埋め込み フラグ全要求 フラグオブジェクト埋め込みが適切かどうかを判断するために内部的に使用される 埋め込みフラグ 明示的 包含フラグ、 およびデフォルト省略 フラグの値を含む map
入力フレーム
フレーミングアルゴリズムに提供される最初のフレーム
IRI コンパクション
IRIまたは キーワードを表す 文字列 varを、 直接指定されるか、この用語を使用するアルゴリズムステップのスコープから来る active contextを使用してコンパクト化するプロセスを説明する際の 言語を減らすために、さまざまなアルゴリズム内のマクロとして使用されます。 明示的に指定された場合は、任意の value が使用されます。 指定がない限り、vocab フラグのデフォルトは truereverse フラグのデフォルトは false です。
  1. IRI Compaction algorithmを使用した結果を返します。 その際、active contextvarvalue(提供されている場合)、 vocab、 および result を渡します。
JSON-LD 入力
アルゴリズムへの入力として提供される JSON-LD データ構造。
平坦化された主語の map
Node Map Generation algorithmの結果である主語の map。
オブジェクト埋め込みフラグ
ノードオブジェクトを そのIRIで参照する代わりに、 出力内に直接埋め込むべきであることを指定するフラグ。
デフォルト省略フラグ
JSON-LD 入力には存在しないが、 入力 フレームには存在するプロパティを、 出力から省略すべきであることを指定するフラグ。
グラフ省略フラグ
フレーミング出力が常に @graph エントリ内に含まれるか、 または複数のノードオブジェクトを表すために必要な場合のみ含まれるかを決定するフラグ。
全要求フラグ
入力フレーム内に存在するすべてのプロパティが、 デフォルト値を持つか、 フレームが一致するためにJSON-LD 入力内に存在しなければならないことを 指定するフラグ。

1.5 構文トークンとキーワード

この仕様は、JSON-LD 1.1 Syntax 仕様 [JSON-LD11] で定義されているものに、 いくつかのキーワードフレーミングキーワード)を追加します:

@default
フレーミングで、 フレーミングされたノードオブジェクトがそのようなプロパティを含まない場合に、 出力プロパティのデフォルト値を設定するために使用されます。
@embed
フレーミングで、 特定のフレーム内のオブジェクト埋め込み フラグの値を上書きするために使用されます。 @embed の有効な値は次のとおりです:
@always
循環参照を引き起こす場合を除き、 ノードオブジェクトを常にプロパティ値として 埋め込みます。
@once
特定のノードオブジェクト内では、 1つの値だけを埋め込むべきであり、 他のプロパティの他の値はノード参照を使用します。これは、 @embedオブジェクト埋め込みフラグも 指定されていない場合のデフォルト値です。
注記
埋め込む対象として選ばれる特定のノードオブジェクトは、 順序に依存します。ordered フラグが true の場合、 これは最初に出現したノードオブジェクトになります。 それ以外の場合は、任意のノードオブジェクトである可能性があります。
@never
一致する値をシリアライズするときは、常にノード参照を使用します。

@embed のその他の値はすべて無効であり、 invalid @embed value エラーが検出され、処理が中止されたことを示します。

@explicit
フレーミングで、 特定のフレーム内の明示的 包含フラグの値を上書きするために使用されます。
@null
フレーミングで、null の値を返すべき場合に使用されます。 その値は、そうでなければ コンパクション時に削除されます。
@omitDefault
フレーミングで、 特定のフレーム内のデフォルト省略 フラグの値を上書きするために使用されます。
@requireAll
フレーミングで、 特定のフレーム内の全要求 フラグの値を上書きするために使用されます。

すべての JSON-LD トークンおよびキーワードは大文字小文字を区別します。

2. 機能

この節は非規範的です。

JSON-LD 1.1 は、 JSON-LD 1.0 [JSON-LD10] と互換性のある新機能を導入しますが、 JSON-LD 1.0 プロセッサーで処理されると異なる結果を生成する可能性があります。 プロセッサーは、 processingMode API オプションが 明示的に json-ld-1.0 に設定されていない限り、デフォルトで json-ld-1.1 になります。 発行者は、JSON-LD 1.0 プロセッサーが JSON-LD 1.1 機能を誤って解釈しないようにするため、 コンテキスト内で 1.1 に設定した @version map エントリを使用することが推奨されます。

2.1 フレーミング

この節は非規範的です。

フレーミングは、JSON-LD 文書内のデータを形作るために使用され、 例となるフレーム文書を使用します。 これは、 平坦化された データを照合し、結果のデータがどのように形作られるべきかの例を示すために使用されます。 照合は、フレーム内に存在する プロパティを使用して、 共通の値を共有するデータ内のオブジェクトを見つけることで行われます。照合は、 フレーム内に存在するすべてのプロパティを使用して行うことも、フレーム内の任意のプロパティを使用して行うこともできます。 照合されたプロパティ値を使用してオブジェクトを連鎖させることにより、 オブジェクトを互いに埋め込むことができます。

フレームには、 結果として得られるフレーミング済み出力をコンパクト化するために使用される コンテキストも含まれます。

たとえば、次の JSON-LD フレームを想定します:

2: サンプルライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "contains": {
    "@type": "Book",
    "contains": {
      "@type": "Chapter"
    }
  }
}

このフレーム文書は、 型が Library のオブジェクトを最上位に配置し、 contains プロパティを使用してライブラリオブジェクトにリンクされた 型が Book のオブジェクトをプロパティ値として埋め込む 埋め込み構造を記述します。また、 型が Chapter のオブジェクトを、参照元の Book オブジェクト内に、 Book オブジェクトの埋め込み値として配置します。

フレームコンポーネントに一致する平坦化されたオブジェクト集合を使用する場合:

3: 平坦化されたライブラリオブジェクト
{
  "@context": {
    "@vocab": "http://example.org/",
    "contains": {"@type": "@id"}
  },
  "@graph": [{
    "@id": "http://example.org/library",
    "@type": "Library",
    "location": "Athens",
    "contains": "http://example.org/library/the-republic"
  }, {
    "@id": "http://example.org/library/the-republic",
    "@type": "Book",
    "creator": "Plato",
    "title": "The Republic",
    "contains": "http://example.org/library/the-republic#introduction"
  }, {
    "@id": "http://example.org/library/the-republic#introduction",
    "@type": "Chapter",
    "description": "An introductory chapter on The Republic.",
    "title": "The Introduction"
  }]
}

フレームアルゴリズムは、フレームの構造に従う新しい文書を作成できます:

処理 モードjson-ld-1.0 でない場合、または グラフ省略フラグtrue の場合、 最上位の @graph エントリは省略される場合があります。

5: フレーミングされたライブラリオブジェクト
{
  "@context": {"@vocab": "http://example.org/"},
  "@id": "http://example.org/library",
  "@type": "Library",
  "location": "Athens",
  "contains": {
    "@id": "http://example.org/library/the-republic",
    "@type": "Book",
    "creator": "Plato",
    "title": "The Republic",
    "contains": {
      "@id": "http://example.org/library/the-republic#introduction",
      "@type": "Chapter",
      "description": "An introductory chapter on The Republic.",
      "title": "The Introduction"
    }
  }
}

フレーミングアルゴリズムは、まず入力フレームと文書の両方を展開することで これを行います。その後、 平坦化された 主語の mapを作成します。フレーム内の最も外側の ノードオブジェクトは、 map 内のオブジェクトとの照合に使用されます。この場合、 @typeLibrary であり、 そのプロパティの値と照合するために使用される別のフレームを持つ contains プロパティを持つ ノードオブジェクトを探します。 入力文書には、そのようなノード オブジェクトが正確に1つ含まれています。contains の値にも ノードオブジェクトがあり、 これはさらに、Library オブジェクトの contains 値である 主語の集合と照合するためのフレームとして扱われます。 以下同様です。

2.1.1 プロパティによる照合

この節は非規範的です。

型による照合に加えて、フレームは1つ以上のプロパティで照合できます。

たとえば、次のフレームは @type ではなく、 プロパティ値に基づいてオブジェクトを選択します。

6: プロパティ照合を伴うライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "location": "Athens",
  "contains": {
    "title": "The Republic",
    "contains": {
      "title": "The Introduction"
    }
  }
}

プロパティ値は各ノードオブジェクトに固有であるため、 これは @type で選択した場合と同じフレーミング結果を生成します。

照合を、列挙されたプロパティのすべてを含むノードオブジェクトに制限する方法と、 いずれかを含むノードオブジェクトに制限する方法については、 § 2.3.5 全要求フラグを参照してください。

2.1.2 ワイルドカード照合

この節は非規範的です。

空のmap ({}) はwildcardとして使用されます。これは、 特定の値に依存せず、対象のノードオブジェクト内に存在する場合に プロパティと一致します。

たとえば、次のフレームは @type ではなく、 プロパティのワイルドカード化に基づいてオブジェクトを選択します。

8: ワイルドカード照合を伴うライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "location": {},
  "contains": {
    "creator": {},
    "contains": {
      "description": {}
    }
  }
}

照合されたプロパティは各ノードオブジェクトに固有であるため、 これは @type で選択した場合と同じフレーミング結果を生成します。

2.1.3 プロパティの不在による照合

この節は非規範的です。

空の配列 ([]) はmatch noneに使用されます。これは、対象のノードオブジェクト内にプロパティが存在しない場合にのみ、 ノードオブジェクトと一致します。

たとえば、次のフレームは @type ではなく、 プロパティの不在に基づいてオブジェクトを選択します。

10: 不在照合を伴うライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "creator": [],
  "title": [],
  "contains": {
    "location": [],
    "description": [],
    "contains": {
      "location": []
    }
  }
}

これは @type で選択した場合と同じフレーミング結果を生成します。 除外されたプロパティが各ノードオブジェクトを一意に識別するためです。 明示的に除外されたプロパティには、値 null を持つ追加プロパティが 追加されることに注意してください。

2.1.4 値による照合

この節は非規範的です。

フレームは、特定のプロパティ値の存在に基づいて照合できます。 これらの値自体もwildcardsを使用でき、 特定の値または値の集合、言語タグ、型、または基底方向に基づいて照合できます。

例として、より複雑な値表現を持つ多言語版のライブラリ例を使用します。

12: 多言語ライブラリオブジェクト
{
  "@context": {
    "@vocab": "http://example.org/",
    "contains": {"@type": "@id"}
  },
  "@graph": [{
    "@id": "http://example.org/library",
    "@type": "Library",
    "location": [
      {"@value": "Athens", "@language": "en"},
      {"@value": "Αθήνα", "@language": "grc"},
      {"@value": "Athína", "@language": "el-Latn"}
    ],
    "contains": "http://example.org/library/the-republic"
  }, {
    "@id": "http://example.org/library/the-republic",
    "@type": "Book",
    "creator": [
      {"@value": "Plato", "@language": "en"},
      {"@value": "Πλάτων", "@language": "grc"},
      {"@value": "Plátōn", "@language": "el-Latn"}
    ],
    "title": [
      {"@value": "The Republic", "@language": "en"},
      {"@value": "Πολιτεία", "@language": "grc"},
      {"@value": "Res Publica", "@language": "el-Latn"}
    ],
    "contains": "http://example.org/library/the-republic#introduction"
  }, {
    "@id": "http://example.org/library/the-republic#introduction",
    "@type": "Chapter",
    "description": "An introductory chapter on The Republic.",
    "title": "The Introduction"
  }]
}

値の属性で照合することにより、その属性を持つフレームを照合し、 一致するプロパティ値に結果を制限できます。 この場合、Library オブジェクトと Book オブジェクトを、 ラテン文字化ギリシャ語(el-Latn)の値のみに基づいてフレーミングします:

13: 言語照合を伴うライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "location": {"@value": {}, "@language": "el-Latn"},
  "contains": {
    "creator": {"@value": {}, "@language": "el-Latn"},
    "title": {"@value": {}, "@language": "el-Latn"},
    "contains": {
      "title": "The Introduction"
    }
  }
}

これは次のフレーミング結果を生成します:

2.1.5 @id による照合

この節は非規範的です。

フレームは、特定の識別子(@id)に一致する場合に照合できます。 これは、特定の @id 値で照合するフレームを使用し、 元の平坦化されたライブラリオブジェクト 入力で説明できます:

15: @id 照合を伴うライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@id": "http://example.org/library",
  "contains": {
    "@id": "http://example.org/library/the-republic",
    "contains": {
      "@id": "http://example.org/library/the-republic#introduction"
    }
  }
}

これは次のフレーミング結果を生成します:

フレームは識別子の配列からも照合できます。 フレーム内では、@id配列値を持つことが許容され、 その個々の値はIRIとして扱われます。

17: 配列 @id 照合を伴うライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@id": ["http://example.org/home", "http://example.org/library"],
  "contains": {
    "@id": ["http://example.org/library/the-republic"],
    "contains": {
      "@id": ["http://example.org/library/the-republic#introduction"]
    }
  }
}

これは次のフレーミング結果を生成します:

2.1.6 空のフレーム

この節は非規範的です。

空のフレームは任意のノードオブジェクトに一致し、 それらのオブジェクトが他の場所に埋め込まれている場合でも、 最上位でシリアライズされます。

19: 空のフレーム
{
  "@context": {"@vocab": "http://example.org/"}
}

これは次のフレーミング結果を生成します:

2.2 デフォルト内容

この節は非規範的です。

フレームは、入力ファイルに存在しないプロパティを指定できます。 明示的包含 フラグfalse の場合、フレーミングアルゴリズムは 結果にプロパティと値を追加します。ノードオブジェクトまたは 値オブジェクト内の @default プロパティ、 または @type の値としてのものは、 結果として得られる出力文書で使用するデフォルト値を提供します。 @default 値がない場合、そのプロパティは null 値で出力されます。(これを避ける方法については § 2.3.3 デフォルト省略フラグを参照)。

注記

フレーム内のプロパティの値は、出力文書ではそれ以外には使用されません。 その目的は、フレーム照合とデフォルト値の検出です。 次の例の Library に対する description 値に注意してください。

21: @default 値を伴うサンプルライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "description": "A great Library.",
  "contains": {
    "@type": "Book",
    "description": {"@default": "A great book."},
    "contains": {
      "@type": "Chapter"
    }
  }
}

デフォルト値は、他のプロパティと同様に @type に対しても使用できます。 この場合、@type を持たない一致したノードオブジェクトは、 フレームから デフォルト オブジェクトの値を取得します。 デフォルト オブジェクトは、単一のIRIである値を持ちます。 複数のIRIが 指定されている場合、最初のものだけがデフォルト型として使用されます。

このフレームは、特定のプロパティ値を持つオブジェクトと照合し、 一致したオブジェクトに対して @type のデフォルトを提供します。

23: @default 型を伴うサンプルライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "contains": {
    "@type": {"@default": "Book"},
    "creator": "Plato",
    "contains": {
      "@type": {"@default": "Chapter"},
      "description": "An introductory chapter on The Republic."
    }
  }
}

@type に特定の値が欠落しているが、 他のプロパティ値に基づいて一致するデータ。

24: 型なしライブラリオブジェクト
{
  "@context": {
    "@vocab": "http://example.org/",
    "contains": {"@type": "@id"}
  },
  "@graph": [{
    "@id": "http://example.org/library",
    "@type": "Library",
    "contains": "http://example.org/library/the-republic"
  }, {
    "@id": "http://example.org/library/the-republic",
    "creator": "Plato",
    "title": "The Republic",
    "contains": "http://example.org/library/the-republic#introduction"
  }, {
    "@id": "http://example.org/library/the-republic#introduction",
    "description": "An introductory chapter on The Republic.",
    "title": "The Introduction"
  }]
}

2.3 フレーミングフラグ

この節は非規範的です。

フレーミングは、API オプションを使用するか、 § 1.5 構文トークンとキーワードで説明されているように、 フレーム内にフレーミングキーワードを追加することで制御できます。

注記

キーワードを使用して設定されたフレーミングフラグは、 それが現れるフレーム、およびフレームオブジェクトが存在しないオブジェクトに対して作成される 暗黙のフレームにのみ効果があります。

2.3.1 オブジェクト埋め込みフラグ

この節は非規範的です。

オブジェクト埋め込みフラグは、 参照されたノードオブジェクトを、 参照元オブジェクトのプロパティ値として埋め込むか、 ノード参照として保持するかを決定します。 オブジェクト埋め込みフラグの初期値は、 embed オプションを使用して設定されます。 オブジェクト埋め込みフラグのデフォルト値 @once に基づく次のフレームを考えます:

26: 暗黙の @embed を @once に設定したサンプルライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library"
}

オブジェクト埋め込みフラグのデフォルトが @once であるため (明示的包含フラグfalse であることに加えて)、 列挙されていないプロパティは出力に追加され、 デフォルトの空フレームを使用して暗黙的に埋め込まれます。 その結果、上記の フレーミングされたライブラリオブジェクトで使用されたものと同じ出力が生成されます。 ただし、ordered フラグが true であると想定します。

しかし、@embed プロパティが値 @never で明示的に追加された場合、 BookChapter の値は除外されます。

28: 明示的な @embed を @never に設定したサンプルライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "contains": {
    "@type": "Book",
    "@embed": "@never"
  }
}

@once が値を展開しない場合を示すため、 書籍が二重に索引付けされた別のライブラリ例を考えます。

30: 二重索引を伴う平坦化されたライブラリオブジェクト
{
  "@context": {
    "@vocab": "http://example.org/",
    "books": {"@type": "@id"},
    "contains": {"@type": "@id"}
  },
  "@graph": [{
    "@id": "http://example.org/library",
    "@type": "Library",
    "books": "http://example.org/library/the-republic",
    "contains": "http://example.org/library/the-republic"
  }, {
    "@id": "http://example.org/library/the-republic",
    "@type": "Book",
    "creator": "Plato",
    "title": "The Republic",
    "contains": "http://example.org/library/the-republic#introduction"
  }, {
    "@id": "http://example.org/library/the-republic#introduction",
    "@type": "Chapter",
    "description": "An introductory chapter on The Republic.",
    "title": "The Introduction"
  }]
}

デフォルトの @embed@once である同じフレームでフレーミングすると、 ordered フラグが true の場合、 "books" プロパティだけが内容を持ち、 "contains" プロパティは参照を使用します。

"@embed": "@always" を使用するフレームを使用すると、 両方のプロパティに展開された値が含まれます。

32: 明示的な @embed を @always に設定したサンプルライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "@embed": "@always"
}

2.3.2 明示的包含フラグ

この節は非規範的です。

明示的 包含フラグは、出力文書に含めるプロパティを決定するために使用されます。 デフォルト値は false です。これは、関連するフレーム内にない、 入力ノードオブジェクト内に存在するプロパティも 出力オブジェクトに含まれることを意味します。 true の場合、入力フレーム内に存在するプロパティのみが 出力に配置されます。 明示的包含フラグの初期値は、 explicit オプションを使用して設定されます。

たとえば、入力からいくつかのプロパティを含めるが、 他のプロパティを省略する、ライブラリフレームの拡張版を考えます。

34: @explicit を true に設定したサンプルライブラリフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "description": {},
  "contains": {
    "@type": "Book",
    "@explicit": true,
    "title": {},
    "contains": {
      "@type": "Chapter"
    }
  }
}

結果の出力では、フレームオブジェクトに 明示的に列挙されていない Book のプロパティが除外されます:

Library オブジェクトには、nulldescription プロパティが含まれることに注意してください。これは、 フレーム内で "description": {} を使用して明示的に要求されているためです。 creator プロパティは明示的でないため、出力には存在しません。

2.3.3 デフォルト省略フラグ

この節は非規範的です。

デフォルト省略フラグは、 フレームで記述されたプロパティが入力文書に存在しない場合に、 フレーミングが出力を生成する方法を変更します。 デフォルト省略フラグの初期値は、 omitDefault オプションを使用して設定されます。 詳細については、§ 2.2 デフォルト内容を参照してください。

次の入力文書を考えます:

36: サンプル親子関係データ
{
  "@context": {
    "@vocab": "http://example.org/",
    "child": {"@type": "@id"}
  },
  "@graph": [{
    "@id": "http://example.org#John",
    "@type": "Person",
    "name": "John",
    "child": "http://example.org#Jane"
  }, {
    "@id": "http://example.org#Jane",
    "@type": "Person",
    "name": "Jane"
  }]
}

デフォルト省略フラグが有用な場合を示すため、 @omitDefault を使用しない次のフレームを考えます:

37: @omitDefault なしのサンプル親子関係フレーム
{
  "@context": {
    "@vocab": "http://example.org/",
    "child": {"@type": "@id"}
  },
  "@type": "Person",
  "child": {
    "@embed": "@always"
  }
}

結果の出力には、値 null を持つ "child" プロパティが含まれます。 これは常に望ましいとは限りません:

フレーム内の child プロパティの下にオプション "@embed": "@always" が指定されているため、 そのプロパティを持たない一致に対して "child": null が出力に現れることに注意してください。 これは望ましくない場合があります。 このデフォルトの null 出力が発生するのを防ぐために、 次のように @omitDefault を true に設定できます:

39: @omitDefault を伴うサンプル親子関係フレーム
{
  "@context": {
    "@vocab": "http://example.org/",
    "child": {"@type": "@id"}
  },
  "@type": "Person",
  "child": {
    "@embed": "@always",
    "@omitDefault": true
  }
}

これにより、次の(望ましい)出力が得られます:

2.3.4 グラフ省略フラグ

この節は非規範的です。

グラフ省略フラグは、 単一のノードオブジェクトを含む フレーミング済み出力が @graph 内に含まれるかどうかを決定します。 グラフ省略フラグの初期値は、 omitGraph オプションを使用するか、 処理 モードに基づいて設定されます。処理モードjson-ld-1.0 の場合、出力は常に @graph エントリを含みます。それ以外の場合、 @graph エントリは、 コンパクションと整合するように、複数のノードオブジェクトを記述する場合にのみ使用されます。 詳細については、§ 4.1 フレーミングアルゴリズムを参照してください。

結果は元の平坦化されたライブラリオブジェクトの例と同じですが、 最上位に @graph があります。 例 5は、 グラフ省略フラグtrue に設定した結果を示しています。これは、 処理 モードがデフォルトの json-ld-1.1 に設定されている場合のデフォルト値です。 最上位オブジェクトは、処理 モードjson-ld-1.0 に設定するか、 グラフ省略 フラグfalse に設定することによって、 @graph 内に囲むことができます。

2.3.5 全要求フラグ

この節は非規範的です。

全要求フラグは、 フレーム照合で、入力文書のノードオブジェクトが フレームに一致するタイミングを決定するために使用されます。 照合時に、オブジェクトは @type および他のプロパティを含む場合があります。 全要求 フラグの値が false(デフォルト)の場合、 オブジェクト内の任意のプロパティ値がフレームオブジェクト内の node patternに一致すると照合が成立します。 フラグ値が true の場合、ノードが一致するには、 フレーム オブジェクト内のすべてのプロパティが ノード オブジェクト内に存在しなければなりません。

次のフレームは、プロパティの不在を含む複数のプロパティで照合します。 平坦化されたライブラリオブジェクトの例を使用すると、 title と description、または title と creator プロパティの両方を含む オブジェクトで照合できます。 @requireAllfalse に設定して使用した場合、 すべてのプロパティではなく、任意のプロパティの存在で照合できます。

42: @requireAll を伴うフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "contains": {
    "@requireAll": true,
    "creator": {},
    "title": {},
    "contains": {
      "@requireAll": true,
      "description": {},
      "title": {}
    }
  }
}

これは、再び目的のフレーミング出力を再現します:

2.4 逆方向フレーミング

この節は非規範的です。

フレームは、出力オブジェクト内の関係を反転するために、 @reverse、または @reverse を使用して定義された用語の値を含むことができます。 たとえば、ライブラリの例は次のフレームを使用して反転できます:

44: 反転ライブラリフレーム
{
  "@context": {
    "@vocab": "http://example.org/",
    "within": {"@reverse": "contains"}
  },
  "@type": "Chapter",
  "within": {
    "@type": "Book",
    "within": {
      "@type": "Library"
    }
  }
}

上記の平坦化されたライブラリ例を使用すると、結果は次のようになります:

注記

通常のプロパティと逆方向プロパティの間には非対称性があります。 通常、ノードオブジェクトをフレーミングする場合、 明示的 包含フラグが設定されていない限り、 ノードのすべてのプロパティが出力に含まれますが、逆方向プロパティは含まれません。 これは、それらが実際にはノードのプロパティではないためです。

逆方向プロパティを出力に含めるには、それらをフレームに明示的に追加します。 逆方向関係が存在しない場合、それは単に出力から除外されることに注意してください。

2.5 名前付きグラフのフレーミング

この節は非規範的です。

フレームは @graph を含むことができ、これにより JSON-LD 文書内に含まれる 名前付きグラフの情報を、 適切なグラフコンテキスト内で公開できます。 デフォルトでは、フレーミングは入力内のすべてのグラフにわたる すべてのノードオブジェクトで構成される merged graphを使用します。フレーム内で @graph を使用することにより、 出力文書は入力文書内に含まれる名前付き グラフからの情報を具体的に含むことができます。

次の例では、ライブラリテーマのバリエーションを使用し、 情報がデフォルトグラフと、 http://example.org/graphs/books という名前のグラフに分割されています:

46: 名前付きグラフを伴うフレーム
{
  "@context": {"@vocab": "http://example.org/"},
  "@type": "Library",
  "contains": {
    "@id": "http://example.org/graphs/books",
    "@graph": {
      "@type": "Book"
    }
  }
}
47: 名前付きグラフを伴う平坦化入力
[{
  "@context": {"@vocab": "http://example.org/"},
  "@id": "http://example.org/graphs/books",
  "@graph": [{
    "@id": "http://example.org/library/the-republic",
    "@type": "http://example.org/Book",
    "http://example.org/contains": {
      "@id": "http://example.org/library/the-republic#introduction"
    },
    "http://example.org/creator": "Plato",
    "http://example.org/title": "The Republic"
  }, {
    "@id": "http://example.org/library/the-republic#introduction",
    "@type": "http://example.org/Chapter",
    "http://example.org/description": "An introductory chapter on The Republic.",
    "http://example.org/title": "The Introduction"
  }]
}, {
  "@context": {"@vocab": "http://example.org/"},
  "@id": "http://example.org/library",
  "@type": "http://example.org/Library",
  "http://example.org/contains": {"@id": "http://example.org/graphs/books"},
  "http://example.org/name": "Library"
}]

3. 適合性

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

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

この仕様への適合を主張できる製品のクラスは1つあります: JSON-LD プロセッサーです。

適合する JSON-LD プロセッサーとは、 この仕様で定義されたアルゴリズムと整合する方法で フレーミング操作を実行できるシステムです。

JSON-LD プロセッサーは、不正な形式のIRIまたは言語タグを修正しようとしては MUST NOT なりません。 ただし、検証警告を発行しても MAY です。IRI は、 相対 IRI と絶対 IRI との間の変換以外では変更されません。

processingMode API オプションを使用して指定されない限り、 処理モードは、 ローカルコンテキスト内の @version エントリを使用して設定され、 展開コンパクションを含むアルゴリズムの挙動に影響します。 一度設定されると、別の処理モードに変更しようとすることはエラーであり、 プロセッサーは 処理 モードの競合 エラーを生成し、以降の処理を中止しなければ MUST なりません。

この仕様のアルゴリズムは、一般に効率性よりも明確さに重点を置いて記述されています。 したがって、JSON-LD プロセッサーは、 最終結果が仕様のアルゴリズムによって得られる結果と区別できない限り、 この仕様で示されたアルゴリズムを任意の望ましい方法で実装しても MAY です。

キーワードに対する操作を記述する アルゴリズムステップでは、それらのステップはキーワード の別名にも適用されます。

注記

実装者は、 JSON-LD フレーミングテストスイートの テストケースに合格することで、この仕様への適合レベルを部分的に確認できます。 ただし、テストスイート内のすべてのテストに合格しても、 この仕様への完全な適合を意味するわけではありません。それは、その実装が テストスイートでテストされた側面に適合していることのみを意味します。

4. フレーミング

次の節では、JSON-LD 文書をフレーミングするためのアルゴリズムを説明します。 フレーミングとは、情報のグラフを表現する JSON-LD 文書を受け取り、 特定のグラフレイアウト (フレームと呼ばれる)を適用する処理です。

フレーミングは、ノード map 生成アルゴリズムを使用して、 JSON-LD 文書内で定義された各オブジェクトを平坦化された主語の mapに配置し、 それらをフレーミングアルゴリズムで操作できるようにします。

この節で説明されるすべてのアルゴリズムは、 言語ネイティブなデータ構造上で動作することを意図しています。すなわち、 テキストベースの JSON 文書へのシリアライズは、これらのアルゴリズムのいずれに対しても 入力または出力として要求されません。

JSON データ構造への参照は、アルゴリズムを記述する目的で、 それらの内部表現を使用して解釈されます。

4.1 フレーミングアルゴリズム

4.1.1 概要

有効なJSON-LD フレームは、 有効なJSON-LD 文書の上位集合であり、 展開を通じて保持される追加内容を許可します。 JSON-LD 1.1 Syntax 仕様 [JSON-LD11] で定義された 文法は、 次のように拡張されます:

4.1.2 アルゴリズム

フレーミングアルゴリズムは、 5つの必須入力変数と1つの任意入力変数を取ります。 必須入力は、 フレーミング状態 (state)、 フレーミングする subjects のリスト、 入力フレーム (expanded frame)、 部分的なフレーム結果を収集するために使用される parent、 および active property です。 任意入力変数は ordered フラグです。

このアルゴリズムは、parent配列である場合には要素を parent に追加することで、または parentmapである場合には、 parent 内の active property に関連付けられた配列へ追加することで、 parent に要素を追加します。 parent配列である場合、 active propertynull でなければ MUST ならず、 それがmapである場合、 null であっては MUST NOT なりません。

  1. frame配列である場合、 frame をその配列の値に設定します。 これは有効なフレームでなければ MUST なりません。 frame が無効であると判定された場合、 invalid frame エラーが検出され、処理は中止されます。
    1. Framemapでなければ MUST なりません。
    2. frame@id エントリを持つ場合、その値は、 値として単一の空のmapを含む 配列、 有効なIRI、 またはすべての値が有効なIRIである 配列のいずれかで なければ MUST なりません。
    3. frame@type エントリを持つ場合、その値は、 値として単一の空のmapを含む 配列、 キーが @default であるエントリを持つ mapを含む 配列、 有効なIRI、 またはすべての値が有効なIRIである 配列のいずれかで なければ MUST なりません。
  2. state 内の オブジェクト埋め込みフラグ明示的 包含フラグ、および 全要求フラグから フラグ embedexplicit、および requireAll を初期化し、 frame 内の @embed@explicit、および @requireAll の任意のプロパティ値で上書きします。
  3. statesubjectsframe、および requireAll を用いて、フレーム照合アルゴリズムにより subjectsframe に対してフィルターして、 一致した主語のリストを作成します。
  4. 一致した主語の集合から、id と関連付けられたノードオブジェクト node のそれぞれについて、 任意の ordered フラグが true である場合には id の辞書順で:
    1. output を、@idid を持つ新しいmapに初期化します。
    2. state 内の埋め込みフラグfalse であり、 state 内の graph name および id に関連付けられた 既存の埋め込みノードが parent 内にある場合、 この node について追加処理を実行しません。
    3. そうでなければ、state 内の埋め込みフラグtrue であり、 embed@never であるか、埋め込みによって 循環参照が作成される場合、 outputparent に追加し、 この node について追加処理を実行しません。
    4. そうでなければ、state 内の埋め込みフラグtrue であり、 embed@once であり、 state 内の graph name および id に関連付けられた 既存の埋め込みノードが parent 内にある場合、 outputparent に追加し、 この node について追加処理を実行しません。
    5. state 内の graph mapid のエントリを持つ場合:
      1. frame@graph エントリを持たない場合、 state 内の graph name@merged でない限り、 recursetrue に設定し、 subframe を新しい空のmapに設定します。
      2. そうでなければ、subframeframe 内の @graph の最初のエントリに設定し、 存在しない場合は新しい空のmapに設定し、 id@merged または @default でない限り、 recursetrue に設定します。
      3. recursetrue の場合:
        1. state 内の graph name の値を id に設定します。
        2. state 内の埋め込みフラグの値を false に設定します。
        3. state のコピーを使用してアルゴリズムを呼び出します。 その際、graph name の値を id に設定し、 埋め込みフラグの値を false に設定し、 state 内の graph map から id に関連付けられたキーを subjects とし、 subframeframe とし、 outputparent とし、@graphactive property とします。
    6. frame@included エントリを持つ場合、 埋め込みフラグの値を false に設定した state のコピーを使用して アルゴリズムを呼び出し、 subjectsframeoutputparent とし、@includedactive property とします。
    7. node 内の各 property および objects について、 任意の ordered フラグが true である場合には property の辞書順で:
      1. propertyキーワードである場合、 propertyobjectsoutput に追加します。
      2. そうでなければ、propertyframe 内になく、 explicittrue である場合、 プロセッサーproperty の値を output に追加しては MUST NOT ならず、次の ステップはスキップされます。
      3. objects 内の各 item について:
        1. item がプロパティ @list を持つmapである場合、 リスト内の各 listitem は順に処理され、 出力内の新しいリストmapに追加されます:
          1. listitemノード 参照である場合、 アルゴリズムを呼び出します。 その際、 埋め込みフラグの値を true に設定した state のコピーを使用しlistitem からの @id の値を、 新しい subjects 配列内の唯一の項目とし、 frame 内の @list からの最初の値を frame とし、 listparent とし、@listactive property とします。 frame が存在しない場合、 @embed@explicit、 および @requireAll のプロパティを持つ新しい mapを使用して 新しい frame を作成し、 それらは embedexplicit、および requireAll から取得されます。
          2. そうでなければ、listitem のコピーを list 内の @list に追加します。
        2. itemノード 参照である場合、 アルゴリズムを呼び出します。 その際、 埋め込みフラグの値を true に設定した state のコピーを使用しitem からの @id の値を、 新しい subjects 配列内の唯一の項目とし、 frame 内の property からの最初の値を frame とし、 outputparent とし、propertyactive property とします。 frame が存在しない場合、新しい frame を 新しいmapを使用して作成し、 @embed@explicit、および @requireAll のプロパティを embedexplicit、および requireAll から取得します。
        3. そうでなければ、item のコピーを output 内のアクティブ プロパティに追加します。
      4. frame 内の、キーワードでない 各 property および objects で、 (`@type 以外) output 内にないものについて:
        1. itemobjects 内の最初の値とします。これは フレームオブジェクトでなければ MUST なりません。
        2. property frameobjects 内の最初の値に設定します。 値が objects の場合は、新しく作成された フレームオブジェクトに設定します。 property framemapでなければ MUST なりません。
        3. property frame が値 true@omitDefault を含む場合、または @omitDefault を含まず、state 内の デフォルト省略フラグの値が true である場合、 property および property frame をスキップします。
        4. propertyoutput に追加し、 プロパティ @preserve を持つ新しい mapを値とします。 その値は、存在する場合は frame 内の @default の値のコピー、 そうでなければ文字列 @null です。
      5. frame がプロパティ @reverse を持つ場合、 frame 内の @reverse の値である 各 reverse property および sub frame について:
        1. output 内に @reverse プロパティを作成し、 新しいmap reverse dict をその値とします。
        2. 平坦化された主語の map内の各 reverse id および node で、 reverse property プロパティを持ち、 id@id を持つノード 参照を含むものについて:
          1. reverse propertyreverse dict に追加し、 新しい空の配列を その値とします。
          2. アルゴリズムを呼び出します。 その際、 埋め込みフラグの値を true に設定した state のコピーを使用しreverse id を 新しい subjects 配列内の唯一の項目とし、 sub frameframe とし、 nullactive property とし、 reverse dict 内の reverse property配列値を parent とします。
      6. 前のステップで要求されるように output が設定されたら、 outputparent に追加します。

4.2 フレーム照合アルゴリズム

フレーム照合アルゴリズムは、フレーミングアルゴリズムの一部として使用され、 特定のノードオブジェクトフレームで設定された基準に一致するかどうかを決定します。 一般に、ノードオブジェクトは @type@id による照合を満たす場合、または複数の異なるプロパティのいずれかに一致する場合、 フレームに一致します。 全要求フラグtrue の場合、フレームが一致するには、すべてのプロパティがデフォルトを持つか 一致していなければなりません。

注記

照合は展開済みノードオブジェクトに対して行われるため、すべての値は 配列の形式になります。

ノード照合は、JSON 構成要素の組み合わせを使用して、任意ゼロ、または いくつかの特定の値を照合します:

[] (match none)
空の配列は値がないこと、またはそれ自体が空の配列である値に一致します。
[フレームオブジェクト] (node pattern)
非空のフレームオブジェクトであり、 再帰的なノード照合を使用して特定の値を照合するために使用されます。
[IRI+]
IRIの形式の1つ以上の文字列であり、 @type および @id による照合に使用され、 列挙された IRI のいずれかに一致できるようにします。
[値オブジェクト] (value pattern)
値オブジェクトであり、 特定の値を照合するために使用されます。値オブジェクト内では、 @value@type、および @language の値も、 1つ以上の文字列値の配列であってよく、 @language の値は大文字小文字を区別せずに比較されます
{} (wildcard)
空のオブジェクトを含む配列 (フレーミングキーワードである任意のプロパティを除外した後)は、 存在する任意の値に一致し、値が存在しない場合には一致しません。

フレーム照合アルゴリズムは、フレーミング状態 (state)、 平坦化された主語の mapから照合する主語のリスト (subjects)、 照合対象のフレーム (frame)、および requireAll フラグを取り、 subjects 内の各 node を次のようにフィルターして、 一致した主語のリストを返します:

フレームの照合時には、@id および @type を含むすべてのプロパティが考慮されますが、 他のキーワードは考慮されません。

  1. フレームがプロパティを持たない場合、node は一致します。
  2. requireAlltrue の場合、node は、 frame 内のすべてのプロパティ (property) が次の条件のいずれかに一致するときに一致します。 または、requireAllfalse の場合、 frame 内のいずれかのプロパティ (property) が次の条件のいずれかに一致するときに一致します。 node 内の frame からの各 propertyvalues について:
    1. property@id である場合:
      1. フレーム内の @id プロパティが values 内の任意のIRIを含む場合、 property は一致します。
      2. そうでなければ、frame 内の @type プロパティが wildcard または match none である場合、property は一致します。
      注記
      フレーミングは平坦化された主語の mapに対して動作し、 平坦化の作用により、すべての主語が @id プロパティを持つことが保証されます。したがって、 "@id": [] パターンは どのノードオブジェクトにも決して一致しません。 "@id": [{}] パターンは 任意のノードオブジェクトに一致し、 frame 内で @id プロパティをまったく指定しないことと同等です
    2. そうでなければ、property@type である場合:
      1. フレーム内の @type プロパティが values 内の任意のIRIを含む場合、 property は一致します。
      2. そうでなければ、values が空でなく、 frame 内の @type プロパティが wildcard である場合、property は一致します。
      3. そうでなければ、values が空であり、 frame 内の @type プロパティが match none である場合、property は一致します。
      4. そうでなければ、フレーム内の @type プロパティが デフォルトオブジェクトである場合、 property は一致します。
      5. そうでなければ、property は一致しません。
    3. property@id または @type であり一致しない場合、 node は一致せず、処理は終了します。
    4. そうでなければ、frame 内の property の値は 空であるか、有効なフレームを含む 配列でなければ MUST なりません。
    5. values が空または存在せず、 frame 内の property の値が、 任意の値を持つ @default エントリのみを含む mapであり、 node 内の他のいずれかのプロパティが非デフォルト一致を持つ場合、 property は一致します。
    6. values が空でなく、frame 内の property の値が match none である場合、node は一致せず、 以降の照合は中止されます。
    7. そうでなければ、values が空でなく、 frame 内の property の値が wildcard である場合、property は一致します。
    8. そうでなければ、frame 内の property の値が value pattern (value pattern) である場合: プロパティ照合は値照合アルゴリズムを使用して決定されます。
    9. そうでなければ、frame 内の property の値の1つである 任意の node pattern (node pattern) について:
      1. value subjects を、values からの ノードオブジェクト値と一致する、 平坦化された主語の mapからの主語のリストとします。
      2. matched subjects を、 statesubjects としての value subjectsframe としての node pattern、および requireAll フラグを使用して、このアルゴリズムを再帰的に呼び出した結果とします。
      3. matched subjects が空でない場合、property は一致します。
    10. そうでなければ、property は一致しません。

4.3 値パターン照合 アルゴリズム

値パターン照合アルゴリズムは、フレーミングおよび フレーム照合アルゴリズムの一部として使用されます。値オブジェクトは、 @value@type、および @language 上の match none および wildcard パターンを使用して値パターンに一致します。さらに、各値 オブジェクトプロパティについて 配列形式を使用して定義された値の集合に、 特定の値が一致することを許可します。

このアルゴリズムは、value pattern (pattern) と 値オブジェクト (value) を パラメーターとして取ります。 Value は、次のアルゴリズムを使用して pattern と一致します:

  1. v1t1、および l1 を、 value 内の @value@type、および @language の値とします。存在しない場合は null とし、 @language の値は小文字に正規化されます
  2. v2t2、および l2 を、 value pattern 内の @value@type、および @language の値とします。存在しない場合は null とし、 @language の文字列値は小文字に正規化されます
  3. patternwildcard である場合、または次の場合、Valuepattern に一致します:
    1. v1v2 内にある、または v1null でなく、 v2wildcard であり、かつ
    2. t1t2 内にある、または t1null でなく、 t2wildcard、 または null である、または t1null であり t2null または match none であり、かつ
    3. l1l2 内にある、または l1null でなく、 l2wildcard、 または null である、または l1null であり l2null または match none である場合。

5. アプリケーションプログラミング インターフェイス

この API は、開発者が JSON-LD データを、 さまざまなプログラミング言語でより扱いやすい多様な出力形式へ変換できる クリーンな仕組みを提供します。プログラミング環境で JSON-LD API が提供される場合、 以下の API 全体を実装しなければ MUST なりません。

JSON-LD API は、さまざまな遅延操作の結果を表すために Promise を使用します。 Promise は [ECMASCRIPT] で定義されています。 仕様内での一般的な使用については、[promises-guide] を参照できます。 実装は、一般に同じメソッド、引数、およびオプションを使用し、 同じ結果を返す限り、それぞれのネイティブ環境に適した方法で実装することを 選択しても MAY です。

注記

インターフェイスは [Exposed=JsonLd] として示され、 これによりグローバルインターフェイスが作成されます。 JSON-LD における WebIDL の使用は、ブラウザー内での使用に適していますが、 そのような使用に限定されるものではありません。

5.1 JsonLdProcessor

JSON-LD Processor インターフェイスは、開発者が JSON-LD 変換メソッドへアクセスするために使用する 高水準のプログラミング構造です。以下の定義は、JSON-LD 1.1 API [JSON-LD11-API] で定義された インターフェイスの実験的拡張です。

実装は入力パラメーターを変更しないことを強調しておくことが重要です。 エラーが検出された場合、Promise は、 適切なcodeを持つ JsonLdFramingErrorで拒否され、 処理は停止されます。

WebIDL/*
 * The JsonLd interface is created to expose the JsonLdProcessor interface.
 */
[Global=JsonLd, Exposed=JsonLd]
interface JsonLd {};

[Exposed=JsonLd]
interface JsonLdProcessor {
  constructor();
  static Promise<JsonLdRecord> frame(
    JsonLdInput input,
    JsonLdInput frame,
    optional JsonLdOptions options = {});
};

JsonLdProcessor インターフェイスの frame() メソッドは、 フレーミングアルゴリズムのステップに従って、 与えられた inputframeを用いて フレーミングします:

  1. 新しい Promise promise を作成して返します。その後、以下のステップが非同期に実行されます。
  2. 提供されたinputRemoteDocument である場合、 remote documentinputに 初期化します。
  3. そうでなければ、提供されたinput がリモート文書のIRIを表す 文字列である場合、 LoadDocumentCallback を使用して、それを remote document として待機して参照解除します。その際、 inputurl として渡し、 options からの extractAllScripts オプションを extractAllScripts として渡します。
  4. expanded input を、 expand メソッドを使用した結果に設定します。その際、 remote document、 または remote document が存在しない場合は inputinput として、 また options を使用し、 orderedfalse に設定します
  5. 提供されたframeRemoteDocument である場合、 remote frameframeに 初期化します。
  6. そうでなければ、提供されたframe がリモート文書のIRIを表す 文字列である場合、 LoadDocumentCallback を使用して、それを remote frame として待機して参照解除します。その際、 frameurl として渡し、 options からの extractAllScripts オプションを extractAllScripts として渡します。
  7. expanded frame を、 expand メソッドを使用した結果に設定します。その際、 remote frame、 または remote frame が存在しない場合は frameinput として、 options を使用し、 frameExpansion オプションを true に設定し、 かつorderedfalse に設定します
  8. context を、存在する場合は remote frame または frame からの @context の値に設定し、 そうでなければ新しい空のコンテキストに 設定します。
  9. context base を、利用可能であれば remote frame からの documentUrl に設定し、 そうでなければoptions からの base オプションに設定します。
  10. active context を、 コンテキスト処理 アルゴリズムの結果に初期化します。その際、 新しい空のコンテキストactive context として、 contextlocal context として、 context basebase URL として渡します。
  11. context を使用してアクティブコンテキストを初期化します。 基底 IRI は、 設定されている場合、options からの base オプションに設定されます。 そうでなければ、 compactToRelative オプションが true の場合、利用可能であれば現在処理中の文書の IRI に設定され、 そうでなければ null に設定されます。
  12. inverse context を、 逆コンテキスト作成 アルゴリズムを実行した結果に初期化します。
  13. frame@graph に展開される 最上位プロパティを持つ場合、 frameDefault オプションを、値 true を持つ options に設定します。
  14. 新しいフレーミング 状態 (state) を空のmapに初期化します。
    1. state 内のオブジェクト埋め込み フラグを、 デフォルト値 @once を持つ embed に設定します。
    2. state 内の 埋め込みフラグfalse に設定します。
    3. state 内の明示的 包含フラグを、 デフォルト値 false を持つ explicit に設定します。
    4. state 内の全要求 フラグを、 デフォルト値 false を持つ requireAll に設定します。
    5. state 内のデフォルト省略 フラグを、 デフォルト値 false を持つ omitDefault に設定します。
    6. state 内の graph name を、 frameDefaulttrue の場合は @default、 そうでなければ false に設定します。
    7. state 内の graph map を、 expanded input に対して ノード map 生成 アルゴリズムを実行した結果に設定します。
      1. state 内の graph name@merged の場合、 graph map 内に @merged のエントリを追加し、 graph map を渡して ノード map のマージ アルゴリズムを実行した結果に設定します。
    8. state 内の subject map を、 graph map 内の graph name の値である 平坦化された 主語の mapに設定します。
  15. results を空の配列として初期化します。
  16. フレーミングアルゴリズムを呼び出し、 statesubjects として state 内の subject map からのキー、 expanded frameparent として results、 および active property として null を渡します。
  17. 処理モードjson-ld-1.0 でない場合、 results 内の各ノードオブジェクト@id エントリのうち、 そのエントリ値が results 内の任意のプロパティ値内に1回だけ現れる 空白ノード識別子 であるものを削除します。
  18. results 内の、キーが @preserve であるすべての エントリを再帰的に、 そのエントリの最初の値に置き換えます。
    注記
    エントリの値は単一の値を持つ配列になります。 これにより、@preserve を含む map は実質的にその値で置き換えられます。
  19. compacted results を、 compact メソッドを使用した結果に設定します。その際、 active contextinverse contextactive property として nullelement として results、, および compactArrays ordered フラグを options から渡します。
    1. compacted results が空の配列である場合、 それを新しいmapで置き換えます。
    2. そうでなければ、compacted results配列である場合、 それを単一のエントリを持つ 新しいmapで置き換えます。 そのキーは @graphIRI コンパクション の結果であり、値は compacted results です。
    3. @context エントリcompacted results に追加し、その値を 提供された context に設定します。
  20. compacted results 内のすべての @null 値を再帰的に null に置き換えます。 置き換え後、配列が値 null のみを含む場合、 その値を削除し、 空の配列を残します。
  21. omitGraphfalse であり、かつ compacted results が最上位の @graph エントリを持たない場合、またはその値が 配列でない場合、 compacted results を変更して、compacted results@context でないエントリを、 @graph配列値内に含まれる mapに配置します。 omitGraphtrue の場合、 最上位の @graph エントリは、複数の ノードオブジェクトを 含む場合にのみ使用されます。
  22. promisecompacted results で解決し、 compacted results内部表現から JSON シリアライズへ変換します。
input
フレーミングを実行する JSON-LD オブジェクトまたは JSON-LD オブジェクトの配列、あるいは フレーミングする JSON-LD 文書を参照する IRI
frame
input のデータを再配置するときに使用するフレームです。 mapの形式、または IRIとして指定されます。
options
たとえば入力文書の基底IRIなど、 フレーミングアルゴリズムに影響しても MAY よい オプションの集合。 JsonLdOptions 型は、デフォルトのオプション値を定義します。
WebIDLtypedef record<USVString, any> JsonLdRecord;

JsonLdRecord は、 JSON オブジェクトを解析した結果である、 任意のmap エントリを含めるために使用される mapの定義です。

WebIDLtypedef (JsonLdRecord or sequence<JsonLdRecord> or USVString or RemoteDocument) JsonLdInput;

JsonLdInput インターフェイスは、 入力値を参照するために使用されます。 それは JsonLdRecordJsonLdRecordssequence文字列、 すなわち有効な JSON 文書を取得するために参照解除できる IRIを表す文字列、 またはすでに参照解除された RemoteDocument であり得ます。

値が JsonLdRecord または JsonLdRecords の sequence である場合、 その値は等価な内部表現値として扱われます。 ここで、JsonLdRecordmapに等価であり、 JsonLdRecords の sequence は、 map配列に等価です。 map エントリは [INFRA] における等価物へ変換されます。

5.2 エラー処理

JsonLdFramingError 型は、 処理エラーを報告するために使用されます。

WebIDLdictionary JsonLdFramingError {
  JsonLdFramingErrorCode code;
  USVString? message = null;
};
enum JsonLdFramingErrorCode {
  "invalid frame",
  "invalid @embed value"
};

JSON-LD フレーミングは、 JSON-LD 1.1 処理アルゴリズムおよび API、すなわち JSON-LD 1.1 API [JSON-LD11-API] で定義された エラーインターフェイスおよびコードを拡張します。

code
この文書の各種アルゴリズムで説明される、特定のエラー型を表す文字列。
message
追加のデバッグ情報を含む任意のエラーメッセージ。 エラーメッセージの具体的な内容は、この仕様の範囲外です。

JsonLdFramingErrorCode は、 有効な JSON-LD フレーミングエラーコードの集合を表します。

invalid @embed value
@embed の値が、オブジェクト埋め込みフラグとして認識されるものではありません。
invalid frame
フレームが無効です。

5.3 データ構造

この節では、JSON-LD API 内で使用されるデータ型定義について説明します。

5.3.1 JsonLdContext

JsonLdContext 型は、 値を参照するために使用されます。 それはmapIRIを表す 文字列、 またはmap文字列の配列であり得ます。

JSON-LD 1.1 API [JSON-LD11-API] における JsonLdContext 定義を参照してください。

5.3.2 JsonLdOptions

JsonLdOptions 型は、 さまざまなオプションを JsonLdProcessor メソッドへ渡すために使用されます。

WebIDLdictionary JsonLdOptions {
  (JsonLdEmbed or boolean)  embed         = "@once";
  boolean                   explicit      = false;
  boolean                   omitDefault   = false;
  boolean                   omitGraph;
  boolean                   requireAll    = false;
  boolean                   frameDefault  = false;
  boolean                   ordered       = false;
};

enum JsonLdEmbed {
  "@always",
  "@once",
  "@never"
};

JSON-LD 1.1 API [JSON-LD11-API] で定義された これらのオプションに加えて、フレーミングは次の追加オプションを定義します:

embed
フレーミングアルゴリズムで使用される オブジェクト 埋め込みフラグの値を設定します。 真偽値 true はフラグを @once に設定し、 値 false はフラグを @never に設定します。
explicit
フレーミングアルゴリズムで使用される 明示的包含フラグの値を設定します。
frameDefault
merged graph をフレーミングする代わりに、デフォルトグラフのみをフレーミングします。
omitDefault
フレーミングアルゴリズムで使用される デフォルト省略 フラグの値を設定します。
omitGraph
フレーミングアルゴリズムで使用される グラフ省略フラグの値を設定します。明示的に設定されていない場合、 処理モードjson-ld-1.0 であれば false に、 それ以外の場合は true に設定されます。
ordered
true に設定されている場合、 指示された特定のアルゴリズム処理ステップは辞書順に順序付けられます。 false の場合、処理において順序は考慮されません。
requireAll
フレーミングアルゴリズムで使用される 全要求 フラグの値を設定します。

JsonLdEmbed は、 embed オプションの値を列挙します:

@always
循環参照を引き起こす場合を除き、常にノードオブジェクトをプロパティ値として 埋め込みます。
@never
一致する値をシリアライズするとき、常にノード参照を使用します。
@once
特定のノードオブジェクト内では、 単一の値だけが埋め込まれるべきであり、 他のプロパティの他の値はノード参照を使用します。 @embedオブジェクト埋め込みフラグも 指定されていない場合、これがデフォルト値です。

JSON-LD 1.1 API [JSON-LD11-API] における JsonLdOptions 定義を参照してください。

6. セキュリティに関する考慮事項

§ A. IANA に関する考慮事項セキュリティに関する考慮事項を参照してください。

7. プライバシーに関する考慮事項

[JSON-LD11] の プライバシーに関する考慮事項を参照してください。

8. 国際化に関する 考慮事項

[JSON-LD11] の 国際化に関する考慮事項を参照してください。

A. IANA に関する考慮事項

この節は、単に標準コミュニティレビューのために含まれており、 この仕様が W3C 勧告になった場合、 Internet Engineering Steering Group に提出されます。

JSON-LD フレームは、[JSON-LD11] で説明されているものと同じ MIME メディアタイプを、必須の profile パラメーターとともに使用します。

application/ld+json

タイプ名:
application
サブタイプ名:
ld+json
必須パラメーター:
なし
任意パラメーター:
profile

リソースを JSON-LD フレームとして識別する単一の URI。 profile は、profile に関する知識なしに処理される場合、リソース表現の意味を変更しません。 そのため、profile 付きリソースに関する知識を持つクライアントと持たないクライアントの両方が、 同じ表現を安全に使用できます。

http://www.w3.org/ns/json-ld#framed
JSON-LD フレームを指定するため。

JSON-LD フレーム文書を提供および要求するときは、 http://www.w3.org/ns/json-ld#framed を使用するべき SHOULD です。

エンコーディングに関する考慮事項:
RFC 8259、11節を参照してください。
セキュリティに関する考慮事項:
RFC 8259、12節 [RFC8259] を参照してください。

JSON-LD は有向グラフのための純粋なデータ交換形式であることを意図しているため、 シリアライズを解析するために JavaScript の eval() 関数のような コード実行機構に渡すべきでは SHOULD NOT ありません。(無効な)文書にはコードが含まれている場合があり、 実行されると、システムのセキュリティを損なう予期しない副作用につながる可能性があります。

JSON-LD 文書を処理するとき、リモートコンテキストへのリンクは通常自動的にたどられ、 それぞれについてユーザーからの明示的な要求なしにファイルが転送されます。 リモートコンテキストが第三者によって提供されている場合、 使用パターンや同様の情報を収集できる可能性があり、プライバシー上の懸念につながります。 JSON-LD 1.1 Processing Algorithms and API 仕様 [JSON-LD11-API] で定義された API など、特定の実装は、この挙動を制御するためのきめ細かな仕組みを提供できます。

HTTP などの安全でない接続を介して Web から読み込まれる JSON-LD コンテキストは、 攻撃者によって変更されるリスクがあり、その結果、 JSON-LD のアクティブコンテキストが セキュリティを損なう形で変更される可能性があります。 リモートコンテキストにミッションクリティカルな目的で依存するアプリケーションは、 システムに使用を許可する前に、そのリモートコンテキストを精査し、 キャッシュすることが推奨されます。

JSON-LD は長い IRI を短い用語に置換できるため、 JSON-LD 文書は処理時にかなり大きく展開される可能性があり、最悪の場合、 結果のデータが受信者のすべてのリソースを消費する可能性があります。 アプリケーションは、あらゆるデータを十分な懐疑心をもって扱うべきです。

JSON-LD は使用可能な IRI スキームに制限を設けておらず、 語彙相対 IRI は IRI 解決ではなく文字列連結を使用するため、 参照解除された場合に悪意を持って使用され得る IRI を構築することが可能です。

相互運用性に関する考慮事項:
該当なし
公開仕様:
https://www.w3.org/TR/json-ld11-framing
このメディアタイプを使用するアプリケーション:
有向グラフの交換を必要とする任意のプログラミング環境。 JSON-LD の実装は JavaScript、Python、Ruby、PHP、および C++ 向けに作成されています。
追加情報:
マジックナンバー:
該当なし
ファイル拡張子:
.jsonld
Macintosh ファイルタイプコード:
TEXT
詳細情報の問い合わせ先の氏名およびメールアドレス:
Ivan Herman <ivan@w3.org>
想定される用途:
一般
使用上の制限:
なし
著者:
Manu Sporny, Gregg Kellogg, Markus Lanthaler, Dave Longley
変更管理者:
W3C

application/ld+json とともに使用されるフラグメント識別子は、 RDF 1.1 Concepts and Abstract Syntax [RDF11-CONCEPTS] に従い、 RDF 構文におけるものと同様に扱われます。

B. IDL 索引

この節は非規範的です。

WebIDL/*
 * The JsonLd interface is created to expose the JsonLdProcessor interface.
 */
[Global=JsonLd, Exposed=JsonLd]
interface JsonLd {};

[Exposed=JsonLd]
interface JsonLdProcessor {
  constructor();
  static Promise<JsonLdRecord> frame(
    JsonLdInput input,
    JsonLdInput frame,
    optional JsonLdOptions options = {});
};

typedef record<USVString, any> JsonLdRecord;

typedef (JsonLdRecord or sequence<JsonLdRecord> or USVString or RemoteDocument) JsonLdInput;

dictionary JsonLdFramingError {
  JsonLdFramingErrorCode code;
  USVString? message = null;
};
enum JsonLdFramingErrorCode {
  "invalid frame",
  "invalid @embed value"
};

dictionary JsonLdOptions {
  (JsonLdEmbed or boolean)  embed         = "@once";
  boolean                   explicit      = false;
  boolean                   omitDefault   = false;
  boolean                   omitGraph;
  boolean                   requireAll    = false;
  boolean                   frameDefault  = false;
  boolean                   ordered       = false;
};

enum JsonLdEmbed {
  "@always",
  "@once",
  "@never"
};

C. 未解決の課題

この節は非規範的です。

以下は、公開時点で未解決だった課題の一覧です。

Issue 29: クラススコープ付き フレーミングを許可する defer-future-versionspec:enhancement

クラススコープ付きフレーミングを許可する。

Issue 38: 同じフレーム文書内の複数のフレーム? defer-future-versionspec:enhancementspec:substantive

同じフレーム文書内の複数のフレーム?

Issue 73: 関係の再フレーミング defer-future-version

関係の再フレーミング。

D. 2012年8月30日の 1.0 草案以降の 変更点

この節は非規範的です。

E. JSON-LD コミュニティグループ最終報告書以降の変更点

この節は非規範的です。

F. 2019年12月12日の 候補リリース以降の変更点

この節は非規範的です。

G. 2020年5月7日の 勧告案リリース以降の変更点

この節は非規範的です。

H. 謝辞

この節は非規範的です。

編集者は、この仕様の執筆および編集に多大な貢献をした以下の方々に、特に感謝します:

さらに、公開時点で以下の方々がワーキンググループのメンバーでした:

多くの技術的課題をメーリングリストおよび週次電話会議で検討した JSON-LD コミュニティグループの参加者にも、 多大な感謝を表します: Chris Webber, David Wood, Drummond Reed, Eleanor Joslin, Fabien Gandon, Herm Fisher, Jamie Pitts, Kim Hamilton Duffy, Niklas Lindström, Paolo Ciccarese, Paul Frazze, Paul Warren, Reto Gmür, Rob Trainer, Ted Thibodeau Jr., and Victor Charpenay.

I. 参考文献

I.1 規範的参考文献

[BCP47]
Tags for Identifying Languages. A. Phillips; M. Davis. IETF. September 2009. IETF Best Current Practice. URL: https://tools.ietf.org/html/bcp47
[ECMASCRIPT]
ECMAScript Language Specification. Ecma International. URL: https://tc39.es/ecma262/
[INFRA]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[JSON-LD10]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Marcus Langhaler. W3C. 16 January 2014. W3C Recommendation. URL: https://www.w3.org/TR/2014/REC-json-ld-20140116/
[JSON-LD11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 7 May 2020. W3C Proposed Recommendation. URL: https://www.w3.org/TR/json-ld11/
[JSON-LD11-API]
JSON-LD 1.1 Processing Algorithms and API. Gregg Kellogg; Dave Longley; Pierre-Antoine Champin. W3C. 7 May 2020. W3C Proposed Recommendation. URL: https://www.w3.org/TR/json-ld11-api/
[LINKED-DATA]
Linked Data Design Issues. Tim Berners-Lee. W3C. 27 July 2006. W3C-Internal Document. URL: https://www.w3.org/DesignIssues/LinkedData.html
[promises-guide]
Writing Promise-Using Specifications. Domenic Denicola. W3C. 9 November 2018. TAG Finding. URL: https://www.w3.org/2001/tag/doc/promises-guide
[RDF-SCHEMA]
RDF Schema 1.1. Dan Brickley; Ramanathan Guha. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/rdf-schema/
[RDF11-CONCEPTS]
RDF 1.1 Concepts and Abstract Syntax. Richard Cyganiak; David Wood; Markus Lanthaler. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/rdf11-concepts/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[RFC3987]
Internationalized Resource Identifiers (IRIs). M. Duerst; M. Suignard. IETF. January 2005. Proposed Standard. URL: https://tools.ietf.org/html/rfc3987
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://tools.ietf.org/html/rfc8174
[RFC8259]
The JavaScript Object Notation (JSON) Data Interchange Format. T. Bray, Ed.. IETF. December 2017. Internet Standard. URL: https://tools.ietf.org/html/rfc8259
[WEBIDL]
Web IDL. Boris Zbarsky. W3C. 15 December 2016. W3C Editor's Draft. URL: https://heycam.github.io/webidl/

I.2 参考情報としての参考文献

[JSON-LD10-FRAMING]
JSON-LD Framing 1.0. Manu Sporny; Gregg Kellogg; David Longley; Marcus Langhaler. W3C. 30 August 2012. Unofficial Draft. URL: https://json-ld.org/spec/ED/json-ld-framing/20120830/