公開後に報告された誤りや問題については、 正誤表を確認してください。
関連情報として 翻訳も参照してください。
この文書は、次の非規範的な形式でも利用できます: EPUB
Copyright © 2010-2020 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
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つです:
この節は非規範的です。
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により、
開発者はデータをどのようにフレーミングしたいかを正確に指定できます。
これにより、特定の主語に関する文がまとめられ、
{ と } によって区切られ、さらにそれらが関連する主語が、
アプリケーションの期待に一致する特定のツリー構造に「ネスト」されます。
この節は非規範的です。
この文書は、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 版以降の変更を強調表示できます。 変更を するには選択してください。
この節は非規範的です。
この仕様の開発に参加する方法はいくつかあります:
この節は非規範的です。
この仕様では、次の表記上の規則を使用します:
markupマークアップ定義参照 マークアップ外部定義参照注記は、緑色の左ボーダーと緑色の「注記」見出しを持つ薄緑色のボックスで示されます。 注記は常に参考情報です。
例は、カーキ色の左ボーダーを持つ薄いカーキ色のボックスで示され、 番号付きの「例」見出しがカーキ色で表示されます。 例は常に参考情報です。例の内容は等幅フォントで表示され、構文に色が付けられる場合があります。 例には、例を他の表現に変換した結果を 表示するためのタブ付きナビゲーションボタンが含まれる場合があります。
この文書は、外部仕様で定義された次の用語を使用し、 JSON-LD に固有の用語を定義します。
ECMAScript Language Specification [ECMASCRIPT]、 The JavaScript Object Notation (JSON) Data Interchange Format [RFC8259]、 Infra Standard [INFRA]、および Web IDL [WEBIDL] から取り込まれた用語
true および false の値。
内部表現では、 JSON オブジェクトは map ([INFRA] を参照)として記述され、 キー/値ペアを持つ エントリで 構成されます。
アプリケーション プログラミングインターフェイスでは、 map は [WEBIDL] の record を使用して記述されます。
@context 内のmap エントリで、
値または値の @id が null である場合、
用語と IRI との関連付けを明示的に切り離します。
map エントリが
JSON-LD
文書の本文内にあり、
その値が null である場合、
そのmap
エントリが定義されていない場合と同じ意味を持ちます。
展開形で @value、@list、または @set が null
に設定されている場合、
JSON
オブジェクト全体が無視されます。
true、または false のいずれかです。
Internationalized Resource Identifiers (IRIs) [RFC3987] から取り込まれた用語
@type の値、
および語彙相対として定義された用語の値は、
語彙マッピングに対して解決され、
基底 IRIに対してではないことに注意してください。
RDF 1.1 Concepts and Abstract Syntax [RDF11-CONCEPTS]、RDF Schema 1.1 [RDF-SCHEMA]、および Linked Data Design Issues [LINKED-DATA] から取り込まれた用語
_: で始まる識別子が割り当てられます。
_: で始まります。
rdf:langString である場合は、任意の言語タグを含みます。
"ltr"、"rtl"、または
null のいずれかの文字列でなければならない
@direction キーを使用して設定できます。
規範的な説明については、JSON-LD 1.1 の Context
Definitions 節を参照してください。
@default キーを持つ
map です。
true または false、
型付き
値、
または言語タグ付き
文字列です。
これはRDF
リテラルを表します。
@value、@list、または
@set キーワードを含まない、または
@graph と @context 以外のエントリを
含まないものではない。
@id キーのみを持つノードを参照するために使用される
ノード
オブジェクト。
@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 エントリを使用する
展開済み用語定義の一部です。
これは埋め込みコンテキストと同じ形式を持ちます。
用語が型として使用される場合、それは 型スコープ付き
コンテキストを定義し、
プロパティとして使用される場合、それは プロパティスコープ付き
コンテキストを定義します。
@value エントリを持つ
map です。
規範的な説明については、JSON-LD 1.1 の Value
Objects 節を参照してください。
@vocab キーを使用して設定されます。
その値は、IRI、コンパクト
IRI、用語、または
null でなければなりません。
規範的な説明については、JSON-LD 1.1 の Context
Definitions 節を参照してください。
次の用語は、特定のアルゴリズム内で使用されます。
true、
reverse フラグのデフォルトは false です。
@graph エントリ内に含まれるか、
または複数のノードオブジェクトを表すために必要な場合のみ含まれるかを決定するフラグ。
この仕様は、JSON-LD 1.1 Syntax 仕様 [JSON-LD11] で定義されているものに、 いくつかのキーワード(フレーミングキーワード)を追加します:
@default@embed@embed の有効な値は次のとおりです:
@always@once@embed も オブジェクト埋め込みフラグも
指定されていない場合のデフォルト値です。
@never@embed のその他の値はすべて無効であり、
invalid @embed value
エラーが検出され、処理が中止されたことを示します。
@explicit@nullnull の値を返すべき場合に使用されます。
その値は、そうでなければ
コンパクション時に削除されます。
@omitDefault@requireAllすべての JSON-LD トークンおよびキーワードは大文字小文字を区別します。
この節は非規範的です。
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 エントリを使用することが推奨されます。
この節は非規範的です。
フレーミングは、JSON-LD 文書内のデータを形作るために使用され、 例となるフレーム文書を使用します。 これは、 平坦化された データを照合し、結果のデータがどのように形作られるべきかの例を示すために使用されます。 照合は、フレーム内に存在する プロパティを使用して、 共通の値を共有するデータ内のオブジェクトを見つけることで行われます。照合は、 フレーム内に存在するすべてのプロパティを使用して行うことも、フレーム内の任意のプロパティを使用して行うこともできます。 照合されたプロパティ値を使用してオブジェクトを連鎖させることにより、 オブジェクトを互いに埋め込むことができます。
フレームには、 結果として得られるフレーミング済み出力をコンパクト化するために使用される コンテキストも含まれます。
たとえば、次の JSON-LD フレームを想定します:
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@type": "Book",
"contains": {
"@type": "Chapter"
}
}
}
このフレーム文書は、 型が Library のオブジェクトを最上位に配置し、 contains プロパティを使用してライブラリオブジェクトにリンクされた 型が Book のオブジェクトをプロパティ値として埋め込む 埋め込み構造を記述します。また、 型が Chapter のオブジェクトを、参照元の Book オブジェクト内に、 Book オブジェクトの埋め込み値として配置します。
フレームコンポーネントに一致する平坦化されたオブジェクト集合を使用する場合:
{
"@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 エントリは省略される場合があります。
{
"@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 内のオブジェクトとの照合に使用されます。この場合、
@type が Library であり、
そのプロパティの値と照合するために使用される別のフレームを持つ
contains プロパティを持つ
ノードオブジェクトを探します。
入力文書には、そのようなノード
オブジェクトが正確に1つ含まれています。contains の値にも
ノードオブジェクトがあり、
これはさらに、Library オブジェクトの contains 値である
主語の集合と照合するためのフレームとして扱われます。
以下同様です。
この節は非規範的です。
型による照合に加えて、フレームは1つ以上のプロパティで照合できます。
たとえば、次のフレームは @type ではなく、
プロパティ値に基づいてオブジェクトを選択します。
{
"@context": {"@vocab": "http://example.org/"},
"location": "Athens",
"contains": {
"title": "The Republic",
"contains": {
"title": "The Introduction"
}
}
}
プロパティ値は各ノードオブジェクトに固有であるため、
これは @type で選択した場合と同じフレーミング結果を生成します。
照合を、列挙されたプロパティのすべてを含むノードオブジェクトに制限する方法と、 いずれかを含むノードオブジェクトに制限する方法については、 § 2.3.5 全要求フラグを参照してください。
この節は非規範的です。
空のmap
({}) はwildcardとして使用されます。これは、
特定の値に依存せず、対象のノードオブジェクト内に存在する場合に
プロパティと一致します。
たとえば、次のフレームは @type ではなく、
プロパティのワイルドカード化に基づいてオブジェクトを選択します。
{
"@context": {"@vocab": "http://example.org/"},
"location": {},
"contains": {
"creator": {},
"contains": {
"description": {}
}
}
}
照合されたプロパティは各ノードオブジェクトに固有であるため、
これは @type で選択した場合と同じフレーミング結果を生成します。
この節は非規範的です。
空の配列
([]) はmatch noneに使用されます。これは、対象のノードオブジェクト内にプロパティが存在しない場合にのみ、
ノードオブジェクトと一致します。
たとえば、次のフレームは @type ではなく、
プロパティの不在に基づいてオブジェクトを選択します。
{
"@context": {"@vocab": "http://example.org/"},
"creator": [],
"title": [],
"contains": {
"location": [],
"description": [],
"contains": {
"location": []
}
}
}
これは @type で選択した場合と同じフレーミング結果を生成します。
除外されたプロパティが各ノードオブジェクトを一意に識別するためです。
明示的に除外されたプロパティには、値 null を持つ追加プロパティが
追加されることに注意してください。
この節は非規範的です。
フレームは、特定のプロパティ値の存在に基づいて照合できます。
これらの値自体もwildcardsを使用でき、
特定の値または値の集合、言語タグ、型、または基底方向に基づいて照合できます。
例として、より複雑な値表現を持つ多言語版のライブラリ例を使用します。
{
"@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)の値のみに基づいてフレーミングします:
{
"@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"
}
}
}
これは次のフレーミング結果を生成します:
@id による照合この節は非規範的です。
フレームは、特定の識別子(@id)に一致する場合に照合できます。
これは、特定の @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として扱われます。
{
"@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"]
}
}
}
これは次のフレーミング結果を生成します:
この節は非規範的です。
空のフレームは任意のノードオブジェクトに一致し、 それらのオブジェクトが他の場所に埋め込まれている場合でも、 最上位でシリアライズされます。
{
"@context": {"@vocab": "http://example.org/"}
}
これは次のフレーミング結果を生成します:
この節は非規範的です。
フレームは、入力ファイルに存在しないプロパティを指定できます。
明示的包含
フラグが false の場合、フレーミングアルゴリズムは
結果にプロパティと値を追加します。ノードオブジェクトまたは
値オブジェクト内の
@default プロパティ、
または @type の値としてのものは、
結果として得られる出力文書で使用するデフォルト値を提供します。
@default 値がない場合、そのプロパティは
null 値で出力されます。(これを避ける方法については
§ 2.3.3
デフォルト省略フラグを参照)。
フレーム内のプロパティの値は、出力文書ではそれ以外には使用されません。 その目的は、フレーム照合とデフォルト値の検出です。 次の例の Library に対する description 値に注意してください。
{
"@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 のデフォルトを提供します。
{
"@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 に特定の値が欠落しているが、
他のプロパティ値に基づいて一致するデータ。
{
"@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"
}]
}
この節は非規範的です。
フレーミングは、API オプションを使用するか、 § 1.5 構文トークンとキーワードで説明されているように、 フレーム内にフレーミングキーワードを追加することで制御できます。
キーワードを使用して設定されたフレーミングフラグは、 それが現れるフレーム、およびフレームオブジェクトが存在しないオブジェクトに対して作成される 暗黙のフレームにのみ効果があります。
この節は非規範的です。
オブジェクト埋め込みフラグは、
参照されたノードオブジェクトを、
参照元オブジェクトのプロパティ値として埋め込むか、
ノード参照として保持するかを決定します。
オブジェクト埋め込みフラグの初期値は、
オプションを使用して設定されます。
オブジェクト埋め込みフラグのデフォルト値
embed@once に基づく次のフレームを考えます:
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library"
}
オブジェクト埋め込みフラグのデフォルトが
@once であるため
(明示的包含フラグが
false であることに加えて)、
列挙されていないプロパティは出力に追加され、
デフォルトの空フレームを使用して暗黙的に埋め込まれます。
その結果、上記の
フレーミングされたライブラリオブジェクトで使用されたものと同じ出力が生成されます。
ただし、 フラグが orderedtrue であると想定します。
しかし、@embed プロパティが値 @never で明示的に追加された場合、
Book と Chapter の値は除外されます。
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@type": "Book",
"@embed": "@never"
}
}
@once が値を展開しない場合を示すため、
書籍が二重に索引付けされた別のライブラリ例を考えます。
{
"@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 である同じフレームでフレーミングすると、
フラグが orderedtrue の場合、
"books" プロパティだけが内容を持ち、
"contains" プロパティは参照を使用します。
"@embed": "@always" を使用するフレームを使用すると、
両方のプロパティに展開された値が含まれます。
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"@embed": "@always"
}
この節は非規範的です。
明示的
包含フラグは、出力文書に含めるプロパティを決定するために使用されます。
デフォルト値は false です。これは、関連するフレーム内にない、
入力ノードオブジェクト内に存在するプロパティも
出力オブジェクトに含まれることを意味します。
true の場合、入力フレーム内に存在するプロパティのみが
出力に配置されます。
明示的包含フラグの初期値は、
オプションを使用して設定されます。
explicit
たとえば、入力からいくつかのプロパティを含めるが、 他のプロパティを省略する、ライブラリフレームの拡張版を考えます。
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"description": {},
"contains": {
"@type": "Book",
"@explicit": true,
"title": {},
"contains": {
"@type": "Chapter"
}
}
}
結果の出力では、フレームオブジェクトに 明示的に列挙されていない Book のプロパティが除外されます:
Library オブジェクトには、null の
description プロパティが含まれることに注意してください。これは、
フレーム内で "description": {} を使用して明示的に要求されているためです。
creator プロパティは明示的でないため、出力には存在しません。
この節は非規範的です。
デフォルト省略フラグは、
フレームで記述されたプロパティが入力文書に存在しない場合に、
フレーミングが出力を生成する方法を変更します。
デフォルト省略フラグの初期値は、
オプションを使用して設定されます。
詳細については、§ 2.2
デフォルト内容を参照してください。
omitDefault
次の入力文書を考えます:
{
"@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 を使用しない次のフレームを考えます:
{
"@context": {
"@vocab": "http://example.org/",
"child": {"@type": "@id"}
},
"@type": "Person",
"child": {
"@embed": "@always"
}
}
結果の出力には、値 null を持つ "child" プロパティが含まれます。
これは常に望ましいとは限りません:
フレーム内の child プロパティの下にオプション "@embed": "@always" が指定されているため、
そのプロパティを持たない一致に対して "child": null が出力に現れることに注意してください。
これは望ましくない場合があります。
このデフォルトの null 出力が発生するのを防ぐために、
次のように @omitDefault を true に設定できます:
{
"@context": {
"@vocab": "http://example.org/",
"child": {"@type": "@id"}
},
"@type": "Person",
"child": {
"@embed": "@always",
"@omitDefault": true
}
}
これにより、次の(望ましい)出力が得られます:
この節は非規範的です。
グラフ省略フラグは、
単一のノードオブジェクトを含む
フレーミング済み出力が @graph 内に含まれるかどうかを決定します。
グラフ省略フラグの初期値は、
オプションを使用するか、
処理
モードに基づいて設定されます。処理モードが
omitGraphjson-ld-1.0 の場合、出力は常に @graph エントリを含みます。それ以外の場合、
@graph エントリは、
コンパクションと整合するように、複数のノードオブジェクトを記述する場合にのみ使用されます。
詳細については、§ 4.1
フレーミングアルゴリズムを参照してください。
結果は元の平坦化されたライブラリオブジェクトの例と同じですが、
最上位に @graph があります。
例 5は、
グラフ省略フラグを
true に設定した結果を示しています。これは、
処理
モードがデフォルトの json-ld-1.1 に設定されている場合のデフォルト値です。
最上位オブジェクトは、処理
モードを json-ld-1.0 に設定するか、
グラフ省略
フラグを false に設定することによって、
@graph 内に囲むことができます。
この節は非規範的です。
全要求フラグは、
フレーム照合で、入力文書のノードオブジェクトが
フレームに一致するタイミングを決定するために使用されます。
照合時に、オブジェクトは @type および他のプロパティを含む場合があります。
全要求
フラグの値が false(デフォルト)の場合、
オブジェクト内の任意のプロパティ値がフレームオブジェクト内の
node patternに一致すると照合が成立します。
フラグ値が true の場合、ノードが一致するには、
フレーム
オブジェクト内のすべてのプロパティが
ノード
オブジェクト内に存在しなければなりません。
次のフレームは、プロパティの不在を含む複数のプロパティで照合します。
平坦化されたライブラリオブジェクトの例を使用すると、
title と description、または title と creator プロパティの両方を含む
オブジェクトで照合できます。
@requireAll を false に設定して使用した場合、
すべてのプロパティではなく、任意のプロパティの存在で照合できます。
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@requireAll": true,
"creator": {},
"title": {},
"contains": {
"@requireAll": true,
"description": {},
"title": {}
}
}
}
これは、再び目的のフレーミング出力を再現します:
この節は非規範的です。
フレームは、出力オブジェクト内の関係を反転するために、
@reverse、または @reverse を使用して定義された用語の値を含むことができます。
たとえば、ライブラリの例は次のフレームを使用して反転できます:
{
"@context": {
"@vocab": "http://example.org/",
"within": {"@reverse": "contains"}
},
"@type": "Chapter",
"within": {
"@type": "Book",
"within": {
"@type": "Library"
}
}
}
上記の平坦化されたライブラリ例を使用すると、結果は次のようになります:
この節は非規範的です。
フレームは @graph を含むことができ、これにより
JSON-LD
文書内に含まれる
名前付きグラフの情報を、
適切なグラフコンテキスト内で公開できます。
デフォルトでは、フレーミングは入力内のすべてのグラフにわたる
すべてのノードオブジェクトで構成される
merged graphを使用します。フレーム内で @graph を使用することにより、
出力文書は入力文書内に含まれる名前付き
グラフからの情報を具体的に含むことができます。
次の例では、ライブラリテーマのバリエーションを使用し、
情報がデフォルトグラフと、
http://example.org/graphs/books という名前のグラフに分割されています:
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@id": "http://example.org/graphs/books",
"@graph": {
"@type": "Book"
}
}
}
[{
"@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"
}]
非規範的であると示された節に加えて、この仕様のすべての作成ガイドライン、図、例、および注記は 非規範的です。この仕様のそれ以外のすべては規範的です。
この文書におけるキーワード MAY、MUST、MUST NOT、SHOULD、および 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 フレーミングテストスイートの テストケースに合格することで、この仕様への適合レベルを部分的に確認できます。 ただし、テストスイート内のすべてのテストに合格しても、 この仕様への完全な適合を意味するわけではありません。それは、その実装が テストスイートでテストされた側面に適合していることのみを意味します。
次の節では、JSON-LD 文書をフレーミングするためのアルゴリズムを説明します。 フレーミングとは、情報のグラフを表現する JSON-LD 文書を受け取り、 特定のグラフレイアウト (フレームと呼ばれる)を適用する処理です。
フレーミングは、ノード map 生成アルゴリズムを使用して、 JSON-LD 文書内で定義された各オブジェクトを平坦化された主語の mapに配置し、 それらをフレーミングアルゴリズムで操作できるようにします。
この節で説明されるすべてのアルゴリズムは、 言語ネイティブなデータ構造上で動作することを意図しています。すなわち、 テキストベースの JSON 文書へのシリアライズは、これらのアルゴリズムのいずれに対しても 入力または出力として要求されません。
JSON データ構造への参照は、アルゴリズムを記述する目的で、 それらの内部表現を使用して解釈されます。
有効なJSON-LD フレームは、 有効なJSON-LD 文書の上位集合であり、 展開を通じて保持される追加内容を許可します。 JSON-LD 1.1 Syntax 仕様 [JSON-LD11] で定義された 文法は、 次のように拡張されます:
@default の値は、エントリキーが
IRIに展開される値の文法で許可される
他の値に加えて、値 @null、
または @null のみを含む配列を含んでも
MAY です。
プロセッサーは、
展開時にこの値を保持しなければ MUST なりません。
デフォルト
オブジェクトの他のすべてのエントリは
無視されなければ MUST なりません。
@id および @type の値は、空のmap、
IRI 参照、
空のmapのみを含む
配列、
またはIRI 参照の配列
であってもよいです。
@type の値は、
@default エントリを持つmapであっても
MAY よく、その値は
IRIであることに制限されます。
プロセッサーは、
展開時にこの値を保持しなければ MUST なりません。
@graph エントリを含むかどうかに応じて
デフォルトグラフ上で動作します。
名前付き
グラフでもある主語を持つノードで、
フレームオブジェクトが
@graph を含む場合、フレーミングは、関連する
名前付きグラフからの
ノード
オブジェクトへ拡張されます。
フレーミングアルゴリズムは、
5つの必須入力変数と1つの任意入力変数を取ります。
必須入力は、
フレーミング状態
(state)、
フレーミングする subjects のリスト、
入力フレーム
(expanded frame)、
部分的なフレーム結果を収集するために使用される parent、
および active property です。
任意入力変数は フラグです。
ordered
このアルゴリズムは、parent が配列である場合には要素を
parent に追加することで、または parent がmapである場合には、
parent 内の active property に関連付けられた配列へ追加することで、
parent に要素を追加します。
parent が配列である場合、
active property は null でなければ
MUST ならず、
それがmapである場合、
null であっては MUST NOT なりません。
invalid frame
エラーが検出され、処理は中止されます。
@embed、@explicit、および
@requireAll の任意のプロパティ値で上書きします。
ordered フラグが
true である場合には id の辞書順で:
@id と
id を持つ新しいmapに初期化します。
false であり、
state 内の graph name および id に関連付けられた
既存の埋め込みノードが parent 内にある場合、
この node について追加処理を実行しません。
true であり、
embed が @never であるか、埋め込みによって
循環参照が作成される場合、
output を parent に追加し、
この node について追加処理を実行しません。
true であり、
embed が @once であり、
state 内の graph name および id に関連付けられた
既存の埋め込みノードが parent 内にある場合、
output を parent に追加し、
この node について追加処理を実行しません。
@included エントリを持つ場合、
埋め込みフラグの値を
false に設定した state のコピーを使用して
アルゴリズムを呼び出し、
subjects、frame、
output を parent とし、@included を
active property とします。
ordered
フラグが true である場合には
property の辞書順で:
true である場合、
プロセッサーは
property の値を output に追加しては
MUST NOT ならず、次の
ステップはスキップされます。
@list を持つmapである場合、
リスト内の各 listitem は順に処理され、
出力内の新しいリストmapに追加されます:
true に設定した state のコピーを使用し、
listitem からの @id の値を、
新しい subjects 配列内の唯一の項目とし、
frame 内の @list からの最初の値を
frame とし、
list を parent とし、@list を
active property とします。
frame が存在しない場合、
@embed、@explicit、
および @requireAll のプロパティを持つ新しい
mapを使用して
新しい frame を作成し、
それらは embed、explicit、および
requireAll から取得されます。
@list に追加します。
true に設定した state のコピーを使用し、
item からの @id の値を、
新しい subjects 配列内の唯一の項目とし、
frame 内の property からの最初の値を
frame とし、
output を parent とし、property を
active property とします。
frame が存在しない場合、新しい frame を
新しいmapを使用して作成し、
@embed、@explicit、および
@requireAll
のプロパティを
embed、explicit、および
requireAll から取得します。
true の
@omitDefault を含む場合、または
@omitDefault を含まず、state 内の
デフォルト省略フラグの値が
true である場合、
property および property frame をスキップします。
@preserve を持つ新しい
mapを値とします。
その値は、存在する場合は frame 内の @default の値のコピー、
そうでなければ文字列 @null です。
@reverse を持つ場合、
frame 内の @reverse の値である
各 reverse property および sub frame について:
@reverse プロパティを作成し、
新しいmap
reverse dict をその値とします。
@id を持つノード
参照を含むものについて:
フレーム照合アルゴリズムは、フレーミングアルゴリズムの一部として使用され、
特定のノードオブジェクトが
フレームで設定された基準に一致するかどうかを決定します。
一般に、ノードオブジェクトは @type、
@id による照合を満たす場合、または複数の異なるプロパティのいずれかに一致する場合、
フレームに一致します。
全要求フラグが
true の場合、フレームが一致するには、すべてのプロパティがデフォルトを持つか
一致していなければなりません。
照合は展開済みノードオブジェクトに対して行われるため、すべての値は 配列の形式になります。
ノード照合は、JSON 構成要素の組み合わせを使用して、任意、ゼロ、または いくつかの特定の値を照合します:
[] (match none)[フレームオブジェクト]
(node pattern)[IRI+]
@type および @id による照合に使用され、
列挙された IRI のいずれかに一致できるようにします。
[値オブジェクト]
(value pattern)@value、@type、および @language の値も、
1つ以上の文字列値の配列であってよく、
@language の値は大文字小文字を区別せずに比較されます。
{}
(wildcard)
フレーム照合アルゴリズムは、フレーミング状態 (state)、 平坦化された主語の mapから照合する主語のリスト (subjects)、 照合対象のフレーム (frame)、および requireAll フラグを取り、 subjects 内の各 node を次のようにフィルターして、 一致した主語のリストを返します:
フレームの照合時には、@id および @type を含むすべてのプロパティが考慮されますが、
他のキーワードは考慮されません。
@id である場合:
@id プロパティが
values 内の任意のIRIを含む場合、
property は一致します。
@type プロパティが
wildcard
または
match none
である場合、property は一致します。
@id プロパティを持つことが保証されます。したがって、
"@id": [] パターンは
どのノードオブジェクトにも決して一致しません。
"@id": [{}] パターンは
任意のノードオブジェクトに一致し、
frame 内で
@id プロパティをまったく指定しないことと同等です
@type である場合:
@type プロパティが
values 内の任意のIRIを含む場合、
property は一致します。
@type プロパティが
wildcard
である場合、property は一致します。
@type プロパティが
match none
である場合、property は一致します。
@type プロパティが
デフォルトオブジェクトである場合、
property は一致します。
@id または @type であり一致しない場合、
node は一致せず、処理は終了します。
@default エントリのみを含む
mapであり、
node 内の他のいずれかのプロパティが非デフォルト一致を持つ場合、
property は一致します。
match none
である場合、node は一致せず、
以降の照合は中止されます。
wildcard
である場合、property は一致します。
value pattern (value pattern) である場合:
プロパティ照合は値照合アルゴリズムを使用して決定されます。
値パターン照合アルゴリズムは、フレーミングおよび
フレーム照合アルゴリズムの一部として使用されます。値オブジェクトは、
@value、@type、および
@language 上の
および
match none
パターンを使用して値パターンに一致します。さらに、各値
オブジェクトプロパティについて
配列形式を使用して定義された値の集合に、
特定の値が一致することを許可します。
wildcard
このアルゴリズムは、value pattern (pattern) と
値オブジェクト
(value) を
パラメーターとして取ります。
Value は、次のアルゴリズムを使用して pattern と一致します:
@value、
@type、および @language の値とします。存在しない場合は
null とし、
@language の値は小文字に正規化されます。
@value、
@type、および @language の値とします。存在しない場合は
null とし、
@language の文字列値は小文字に正規化されます。
wildcard
である場合、または次の場合、Value は pattern に一致します:
wildcard
であり、かつ
wildcard、
または null である、または t1 が null であり
t2 が
null または
match none
であり、かつ
wildcard、
または null である、または l1 が null であり
l2 が
null または
match none
である場合。
この API は、開発者が JSON-LD データを、 さまざまなプログラミング言語でより扱いやすい多様な出力形式へ変換できる クリーンな仕組みを提供します。プログラミング環境で JSON-LD API が提供される場合、 以下の API 全体を実装しなければ MUST なりません。
JSON-LD API は、さまざまな遅延操作の結果を表すために Promise を使用します。 Promise は [ECMASCRIPT] で定義されています。 仕様内での一般的な使用については、[promises-guide] を参照できます。 実装は、一般に同じメソッド、引数、およびオプションを使用し、 同じ結果を返す限り、それぞれのネイティブ環境に適した方法で実装することを 選択しても MAY です。
インターフェイスは [Exposed=JsonLd] として示され、
これによりグローバルインターフェイスが作成されます。
JSON-LD における WebIDL の使用は、ブラウザー内での使用に適していますが、
そのような使用に限定されるものではありません。
JSON-LD Processor インターフェイスは、開発者が JSON-LD 変換メソッドへアクセスするために使用する 高水準のプログラミング構造です。以下の定義は、JSON-LD 1.1 API [JSON-LD11-API] で定義された インターフェイスの実験的拡張です。
実装は入力パラメーターを変更しないことを強調しておくことが重要です。
エラーが検出された場合、Promise は、
適切なを持つ
codeJsonLdFramingErrorで拒否され、
処理は停止されます。
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>frame(JsonLdInputinput,JsonLdInputframe, optionalJsonLdOptionsoptions = {}); };
JsonLdProcessor インターフェイスの
frame()
メソッドは、
フレーミングアルゴリズムのステップに従って、
与えられた input をframeを用いて
フレーミングします:
Promise promise
を作成して返します。その後、以下のステップが非同期に実行されます。ordered を false
に設定します。
true に設定し、
かつordered を false
に設定します。
@context の値に設定し、
そうでなければ新しい空のコンテキストに
設定します。
documentUrl
に設定し、
そうでなければoptions からの
base
オプションに設定します。
null に設定されます。
@graph に展開される
最上位プロパティを持つ場合、
frameDefault
オプションを、値 true を持つ
options に設定します。
@once を持つ
embed
に設定します。
false に設定します。
false を持つ
explicit
に設定します。
false を持つ
requireAll
に設定します。
false を持つ
omitDefault
に設定します。
frameDefault が
true の場合は @default、
そうでなければ false に設定します。
@merged の場合、
graph map 内に @merged のエントリを追加し、
graph map を渡して
ノード map のマージ
アルゴリズムを実行した結果に設定します。
null を渡します。
json-ld-1.0 でない場合、
results 内の各ノードオブジェクトの
@id エントリのうち、
そのエントリ値が
results 内の任意のプロパティ値内に1回だけ現れる
空白ノード識別子
であるものを削除します。
@preserve であるすべての
エントリを再帰的に、
そのエントリの最初の値に置き換えます。
@preserve を含む map は実質的にその値で置き換えられます。
compact
メソッドを使用した結果に設定します。その際、
active context、
inverse context、
active property として null、
element として results、,
および compactArrays
と ordered
フラグを options から渡します。
@null 値を再帰的に
null に置き換えます。
置き換え後、配列が値 null
のみを含む場合、
その値を削除し、
空の配列を残します。
omitGraph が false
であり、かつ
compacted results が最上位の @graph エントリを持たない場合、またはその値が
配列でない場合、
compacted results を変更して、compacted results の
@context でないエントリを、
@graph の配列値内に含まれる
mapに配置します。
omitGraph が true の場合、
最上位の @graph エントリは、複数の
ノードオブジェクトを
含む場合にのみ使用されます。
input のデータを再配置するときに使用するフレームです。
mapの形式、または
IRIとして指定されます。
JsonLdOptions
型は、デフォルトのオプション値を定義します。
WebIDLtypedef record<USVString, any> JsonLdRecord;
JsonLdRecord は、
JSON オブジェクトを解析した結果である、
任意のmap
エントリを含めるために使用される
mapの定義です。
WebIDLtypedef (JsonLdRecordor sequence<JsonLdRecord> or USVString or RemoteDocument)JsonLdInput;
JsonLdInput インターフェイスは、
入力値を参照するために使用されます。
それは JsonLdRecord、
JsonLdRecords の
sequence、
文字列、
すなわち有効な JSON 文書を取得するために参照解除できる
IRIを表す文字列、
またはすでに参照解除された
RemoteDocument
であり得ます。
値が JsonLdRecord または JsonLdRecords の sequence である場合、
その値は等価な内部表現値として扱われます。
ここで、JsonLdRecord
はmapに等価であり、
JsonLdRecords の sequence は、
mapの
配列に等価です。
map エントリは
[INFRA] における等価物へ変換されます。
JsonLdFramingError 型は、
処理エラーを報告するために使用されます。
WebIDLdictionaryJsonLdFramingError{JsonLdFramingErrorCodecode; USVString?message= null; }; enumJsonLdFramingErrorCode{ "invalid frame", "invalid @embed value" };
JSON-LD フレーミングは、 JSON-LD 1.1 処理アルゴリズムおよび API、すなわち JSON-LD 1.1 API [JSON-LD11-API] で定義された エラーインターフェイスおよびコードを拡張します。
codemessageJsonLdFramingErrorCode は、
有効な JSON-LD フレーミングエラーコードの集合を表します。
invalid @embed value@embed の値が、オブジェクト埋め込みフラグとして認識されるものではありません。
invalid frameこの節では、JSON-LD API 内で使用されるデータ型定義について説明します。
JsonLdContext 型は、 値を参照するために使用されます。 それはmap、 IRIを表す 文字列、 またはmapと 文字列の配列であり得ます。
JSON-LD 1.1 API [JSON-LD11-API] における JsonLdContext 定義を参照してください。
JsonLdOptions 型は、
さまざまなオプションを
JsonLdProcessor メソッドへ渡すために使用されます。
WebIDLdictionaryJsonLdOptions{ (JsonLdEmbedor boolean)embed= "@once"; booleanexplicit= false; booleanomitDefault= false; booleanomitGraph; booleanrequireAll= false; booleanframeDefault= false; booleanordered= false; }; enumJsonLdEmbed{ "@always", "@once", "@never" };
JSON-LD 1.1 API [JSON-LD11-API] で定義された これらのオプションに加えて、フレーミングは次の追加オプションを定義します:
embedtrue はフラグを @once に設定し、
値 false はフラグを @never に設定します。
explicitframeDefaultomitDefaultomitGraphjson-ld-1.0 であれば false に、
それ以外の場合は true に設定されます。
orderedtrue に設定されている場合、
指示された特定のアルゴリズム処理ステップは辞書順に順序付けられます。
false の場合、処理において順序は考慮されません。
requireAllJsonLdEmbed は、
オプションの値を列挙します:
embed
@always@never@once
@embed も オブジェクト埋め込みフラグも
指定されていない場合、これがデフォルト値です。
JSON-LD 1.1 API [JSON-LD11-API] における JsonLdOptions 定義を参照してください。
§ A. IANA に関する考慮事項の セキュリティに関する考慮事項を参照してください。
[JSON-LD11] の プライバシーに関する考慮事項を参照してください。
[JSON-LD11] の 国際化に関する考慮事項を参照してください。
この節は、単に標準コミュニティレビューのために含まれており、 この仕様が W3C 勧告になった場合、 Internet Engineering Steering Group に提出されます。
JSON-LD フレームは、[JSON-LD11] で説明されているものと同じ
MIME メディアタイプを、必須の profile パラメーターとともに使用します。
profileリソースを JSON-LD フレームとして識別する単一の URI。 profile は、profile に関する知識なしに処理される場合、リソース表現の意味を変更しません。 そのため、profile 付きリソースに関する知識を持つクライアントと持たないクライアントの両方が、 同じ表現を安全に使用できます。
http://www.w3.org/ns/json-ld#framedJSON-LD フレーム文書を提供および要求するときは、
http://www.w3.org/ns/json-ld#framed を使用するべき
SHOULD です。
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 を構築することが可能です。
application/ld+json とともに使用されるフラグメント識別子は、 RDF 1.1 Concepts and Abstract Syntax [RDF11-CONCEPTS] に従い、 RDF 構文におけるものと同様に扱われます。
この節は非規範的です。
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>frame(JsonLdInputinput,JsonLdInputframe, optionalJsonLdOptionsoptions = {}); }; typedef record<USVString, any>JsonLdRecord; typedef (JsonLdRecordor sequence<JsonLdRecord> or USVString or RemoteDocument)JsonLdInput; dictionaryJsonLdFramingError{JsonLdFramingErrorCodecode; USVString?message= null; }; enumJsonLdFramingErrorCode{ "invalid frame", "invalid @embed value" }; dictionaryJsonLdOptions{ (JsonLdEmbedor boolean)embed= "@once"; booleanexplicit= false; booleanomitDefault= false; booleanomitGraph; booleanrequireAll= false; booleanframeDefault= false; booleanordered= false; }; enumJsonLdEmbed{ "@always", "@once", "@never" };
この節は非規範的です。
以下は、公開時点で未解決だった課題の一覧です。
クラススコープ付きフレーミングを許可する。
同じフレーム文書内の複数のフレーム?
関係の再フレーミング。
この節は非規範的です。
@embed) は、オブジェクト埋め込みをより適切に制御するために、
異なる値を取れるようになりました。wildcard
および
match none
を型およびプロパティ値に使用できます。
@value、@type、および @language の値が
wildcard
および
match none
を使用でき、また照合のために特定の文字列の集合(例: 特定の言語の集合)も使用できます。
@reverse をサポートします。@id に1つ以上の値を使用できます。
json-ld-1.0 でない場合、
その @id のためだけに使用される空白ノード識別子を持つ
@id エントリ
は削除されます。
@link およびメモリ内オブジェクトリンクのサポートを削除しました。omitDefault API オプション、および/または
現在の処理モードによって制御されます。
ordered
オプションを追加しており、デフォルトは false です。これはアルゴリズム内で
map エントリキーの
反復を制御するために使用されます。以前は、
アルゴリズムは常にそのような順序を必要としていました。テスト結果を評価するための
手順もそれに応じて更新されています。
@reverse、または @reverse で定義された用語を使用して
逆方向プロパティを含めることができ、これにより、フレームの対象ノードを参照する
ノードに逆方向参照を作成させることができます。この節は非規範的です。
ordered
オプションを追加しており、デフォルトは false です。これはアルゴリズム内で
map エントリキーの
反復を制御するために使用されます。以前は、
アルゴリズムは常にそのような順序を必要としていました。テスト結果を評価するための
手順もそれに応じて更新されています。
application/ld-frame+json から、
必須の profile パラメーターを持つ application/ld+json に変更されました。
@id および @type を含むすべてのプロパティが存在することを必要とします。
@first および @last 値を削除し、
@once を採用しました。
json-ld-1.0 に設定されない限り、
暗黙的に json-ld-1.1 になりました。@type は、フレーム照合目的には使用されないデフォルト値を持つことができます。この節は非規範的です。
JsonLdProcessor 処理ステップへ移動しました。
この節は非規範的です。
JsonLdProcessor インターフェイスを
公開するグローバルインターフェイスとして宣言されるよう、
[Exposed=(Window,Worker)] を [Exposed=JsonLd] に変更しました。
この節は非規範的です。
編集者は、この仕様の執筆および編集に多大な貢献をした以下の方々に、特に感謝します:
さらに、公開時点で以下の方々がワーキンググループのメンバーでした:
多くの技術的課題をメーリングリストおよび週次電話会議で検討した 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.