公開以降に報告されたエラーまたは問題については、 正誤表を確認してください。
以下も参照してください: 翻訳。
この文書は、次の非規範的な形式でも入手できます: EPUB
Copyright © 2010-2020 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
この仕様は、JSON-LD 文書をプログラムによって変換するための 一連のアルゴリズムを定義します。定義された変換に従ってデータを再構成することで、 その利用がしばしば劇的に簡素化されます。さらに、この文書は、 指定されたアルゴリズムを実装する開発者向けに、 アプリケーション・プログラミング・インターフェイス(API)を提案します。
この仕様は、 JSON-LD 1.0 処理アルゴリズムおよび API [JSON-LD10-API] で定義された機能の上位集合を記述し、 特記されている場合を除き、 この仕様で記述されるアルゴリズムは、 JSON-LD 1.0 [JSON-LD10] を使用して作成された文書と完全に互換性があります。
この節は、この文書の公開時点におけるステータスを説明します。 他の文書がこの文書に取って代わる可能性があります。現在の W3C 公開文書の一覧およびこの技術報告書の 最新改訂版は、 https://www.w3.org/TR/ にある W3C 技術報告書 索引で確認できます。
この文書は、 JSON-LD Working Group によって開発され、JSON-LD Community Group の Final Report から派生したものです。
この文書で説明される機能を実演できる ライブ JSON-LD プレイグラウンドがあります。
この仕様は、JSON-LD 1.0 処理アルゴリズムおよび API [JSON-LD10-API] 仕様を 置き換えることを意図しています。
この文書は、JSON-LD Working Group によって 勧告として公開されました。
この仕様に関する議論には、 GitHub Issues が推奨されます。 または、メーリングリストにコメントを送信することもできます。 コメントは public-json-ld-wg@w3.org (アーカイブ) 宛に送信してください。
Working Group の 実装報告を参照してください。
この文書は、W3C メンバー、ソフトウェア開発者、 および他の W3C グループや関心のある関係者によってレビューされ、 Director によって W3C 勧告として承認されています。 これは安定した文書であり、参照資料として使用したり、他の文書から引用したりできます。 勧告を作成することにおける W3C の役割は、 仕様に注意を喚起し、その広範な展開を促進することです。これにより、Web の機能性と 相互運用性が向上します。
この文書は、 W3C 特許方針の下で運営されるグループによって作成されました。 W3C は、 グループの成果物に関連して行われた 特許開示の公開一覧を 維持しています。そのページには、特許を開示するための手順も含まれています。 ある個人が、その個人の考えるところによれば Essential Claim(s) を含む特許について実際の知識を有している場合、 W3C 特許方針の第 6 節に従って その情報を開示しなければなりません。
この文書は、 2019年3月1日版 W3C プロセス文書に準拠します。
この文書は、JSON-LD Working Group によって作成された 3 つの JSON-LD 1.1 勧告の 1 つです:
この節は非規範的です。
この文書は、JSON-LD 処理アルゴリズムの詳細な仕様です。 この文書は主に、次の読者を対象としています:
この仕様の基礎を理解するには、まず JSON に精通している必要があります。これは [RFC8259] で詳述されています。また、 JSON-LD 1.1 Syntax specification [JSON-LD11] で定義される JSON-LD 構文も理解している必要があります。これは、この文書のすべてのアルゴリズムで使用される 基本構文です。API と、それがプログラミング環境でどのように動作することを意図しているかを理解するには、 JavaScript プログラミング言語 [ECMASCRIPT] および WebIDL [WEBIDL] についての実用的な知識があると役立ちます。JSON-LD が RDF にどのように対応するかを理解するには、 基本的な RDF の概念 [RDF11-CONCEPTS] に精通していると役立ちます。
この節は非規範的です。
この文書は、JSON における Linked Data のシリアライズに関する詳細な仕様です。 この文書は主に、次の読者を対象としています:
関連文書である JSON-LD 1.1 仕様 [JSON-LD11] は、JSON-LD 文書の文法を規定します。
この仕様の基礎を理解するには、まず JSON に精通している必要があります。これは [RFC8259] で詳述されています。
この文書では、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 オブジェクトは マップ ([INFRA] を参照)として記述され、 キー/値ペアを持つ エントリから構成されます。
アプリケーション・プログラミング・インターフェイスでは、 マップは [WEBIDL] の record を使用して記述されます。
@context 内の マップエントリで、
値、または値の @id が null である場合、
その用語と IRI との関連付けを明示的に切り離します。
マップエントリが
JSON-LD
文書の本文内にあり、
その値が null である場合、
その マップエントリが定義されていない場合と同じ意味を持ちます。
展開形式で @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 の場合は任意の 言語タグを含みます。
@direction キーを使用して設定でき、
その値は文字列 "ltr"、"rtl"、または
null のいずれかでなければなりません。
規範的な説明については、JSON-LD 1.1 の Context
Definitions 節を参照してください。
@language キーを使用して設定でき、
その値は [BCP47] 言語コードを表す
文字列または
null でなければなりません。
規範的な説明については、JSON-LD 1.1 の Context
Definitions 節を参照してください。
@default キーを持つ
マップです。
@graph エントリを持たなければならず、
@id および @index エントリを持ってもかまいません。
単純グラフ
オブジェクトは、
@id エントリを持たない
グラフ
オブジェクトです。
ノードオブジェクトは
@graph エントリを持つことがありますが、
その他の エントリを含む場合は
グラフオブジェクトとは見なされないことに注意してください。
@graph から構成されるトップレベルオブジェクトも
グラフオブジェクトではありません。
ノードオブジェクトは、
他のプロパティを含む場合、名前付きグラフを表すこともあることに注意してください。
規範的な説明については、JSON-LD 1.1 の Graph
Objects 節を参照してください。
@container が @id に設定された
用語の
マップ値です。
id マップの値は
ノード
オブジェクトでなければならず、
そのキーは関連する ノードオブジェクトの
@id を表す IRIとして解釈されます。
id マップ内の値が
@id に展開されるキーを含む場合、
その値は id
マップ内の参照キーと等価でなければなりません。
規範的な説明については、JSON-LD 1.1 の Id Maps
節を参照してください。
@included または @included の別名であり、
値が 1 つ以上の ノードオブジェクトである、
ノード
オブジェクト内の エントリです。
規範的な説明については、JSON-LD 1.1 の Included Blocks
節を参照してください。
@container が @index に設定された
用語の
マップ値であり、
その値は次のいずれかの型でなければなりません:
文字列、
数値、
true、
false、
null、
ノード
オブジェクト、
値
オブジェクト、
リスト
オブジェクト、
セット
オブジェクト、または
上記の可能性を 0 個以上含む 配列。
形式的な説明については、JSON-LD 1.1 の Index
Maps 節を参照してください。
rdf:JSON である リテラルです。
値オブジェクト表現では、
@type の値は @json です。
JSON リテラルは、有効な JSON [RFC8259]
である値を表します。
規範的な説明については、JSON-LD 1.1 の The
rdf:JSON Datatype 節を参照してください。
true または false、
型付き
値、
または 言語タグ付き
文字列です。
これは RDF
リテラルを表します。
@container が @language に設定された
用語の
マップ値であり、
そのキーは [BCP47] 言語コードを表す
文字列でなければならず、
値は次のいずれかの型でなければなりません:
null、
文字列、
または
上記の可能性を 0 個以上含む 配列。
規範的な説明については、JSON-LD 1.1 の Language
Maps 節を参照してください。
@list キーを持つ
マップです。
@index キーを持ってもかまいませんが、その他の エントリを持ってはなりません。
規範的な説明については、JSON-LD 1.1 の Lists
and Sets 節を参照してください。
@context キーワードを介して指定される
コンテキスト。
@value、@list、または
@set キーワードを含まない、または
@graph および @context 以外の
エントリを含まないものではない。
@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 エントリを使用する
展開された用語
定義の一部です。これは 埋め込みコンテキストと同じ形式を持ちます。
用語が型として使用される場合、それは 型スコープ付き
コンテキストを定義し、
プロパティとして使用される場合、それは プロパティスコープ付き
コンテキストを定義します。
@set
エントリを持つ
マップです。
@index キーを持ってもかまいませんが、その他の エントリを持ってはなりません。
規範的な説明については、JSON-LD 1.1 の Lists
and Sets 節を参照してください。
@container が @type に設定された
用語の
マップ値であり、
そのキーは、関連する ノードオブジェクトの
@type を表す IRIとして解釈されます。
値は ノードオブジェクト、
またはノードオブジェクトの 配列でなければなりません。
値が @type に展開される 用語を含む場合、
展開時にその値はマップ値とマージされます。
規範的な説明については、JSON-LD 1.1 の Type Maps
節を参照してください。
@value エントリを持つ
マップです。
規範的な説明については、JSON-LD 1.1 の Value
Objects
節を参照してください。
@vocab キーを使用して設定され、
その値は IRI、コンパクト
IRI、用語、または
null でなければなりません。
規範的な説明については、JSON-LD 1.1 の Context
Definitions 節を参照してください。
次の用語は、特定のアルゴリズム内で使用されます。
false の as array フラグを含めることができます。
true、
reverse フラグの既定値は false です。
false、
vocab フラグの既定値は true です。
JSON-LD 1.1 Syntax 仕様 [JSON-LD11] で定義される キーワードに加え、 この仕様は JSON-LD 1.1 Framing [JSON-LD11-FRAMING] をサポートするために、 追加の キーワードを加えます:
@preserveこの節は非規範的です。
この文書で使用される例では、出力は必然的に JSON としてシリアライズされた形式で示されることに注意してください。 アルゴリズムは JSON-LD 内部表現に対する操作を記述していますが、 例として表示される場合には JSON シリアライズが使用されます。特に、 内部表現における マップは、 JSON オブジェクトを使用して表されます。
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"knows": "http://xmlns.com/foaf/0.1/knows"
},
"@id": "http://me.markus-lanthaler.com/",
"name": "Markus Lanthaler",
"knows": [
{
"name": "Dave Longley"
}
]
}
内部
表現では、上記の例は
@context、@id、name、および knows
エントリを含む
マップであり、
それらの値は マップ、
文字列、
またはマップや文字列値の 配列のいずれかになります。
JSON シリアライズでは、JSON
オブジェクトが
マップに使用され、配列および文字列は多くのプログラミング言語に共通する
規約を使用してシリアライズされます。
この節は非規範的です。
JSON-LD 1.1 Syntax 仕様 [JSON-LD11] は、JSON で Linked Data を表現するための構文を定義します。この構文を使用して Linked Data を表現する方法は複数あるため、JSON-LD 文書を変換し、 特定のアプリケーションがより容易に利用できるようにすることがしばしば有用です。
これらのアルゴリズムを JSON 以外の構文にも適用できるようにするため、 アルゴリズムは JSON-LD 内部表現に対して動作します。 これは、JSON 文書によって表されるデータを記述するために、 配列、マップ、 文字列、数値、 ブール値、および null という汎用的な 概念を使用します。アルゴリズムはこの 内部表現に作用し、 API のエントリポイントが具体表現と内部表現の間の変換を担当します。
JSON-LD は コンテキストを使用して、 Linked Data を、特定の人やアプリケーションに特化した方法で 表現できるようにします。コンテキストを提供することで、 JSON データは、特定の人やアプリケーションに自然に適合する方法で表現できると同時に、 そのデータがグローバルな規模でどのように理解されるべきかも示せます。 人やアプリケーションが、自分たちとは異なる コンテキストを使用して作成されたデータを 共有できるようにするためには、JSON-LD プロセッサは文書を ある コンテキストから別のものへ変換できなければなりません。 JSON-LD プロセッサに、考え得るすべての コンテキスト切り替えの場面ごとに 固有のコードを書くことを要求する代わりに、 任意の コンテキストを削除できる 単一のアルゴリズムを指定する方がはるかに容易です。同様に、 任意の コンテキストを 後から適用する別のアルゴリズムを指定できます。これら 2 つのアルゴリズムは、 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 の機能を誤って解釈しないようにするため、
コンテキスト内の
@version マップエントリを
1.1 に設定して使用することが推奨されます。
この文書で説明する変換には、展開、圧縮、平坦化、RDF シリアライズ/デシリアライズという 4 つの主要な種類があります。
この節は非規範的です。
コンテキストを削除するアルゴリズムは、 展開と呼ばれます。JSON-LD 文書に対して他の変換を行う前に、 その文書から任意の コンテキストを 削除し、データ構造をより規則的にするのが最も容易です。
コンテキストとデータ構造化が同じデータにどのように影響するかを理解するために、 用語のみを使用し、 かなりコンパクトな JSON-LD の例を示します:
次の入力例は、1 つの IRIを使用して プロパティを表現し、 マップを使用して値をカプセル化しますが、 残りの情報はそのままにしています。
両方の入力は有効な JSON-LD であり、同じ情報を表していることに注意してください。 違いは、それらの コンテキスト情報と、 使用されるデータ構造にあります。JSON-LD プロセッサは コンテキストを削除し、 展開を用いることで データをより規則的にできます。
展開には 2 つの重要な目標があります:
文書から任意のコンテキスト情報を削除すること、およびすべての値が規則的な形式で表されるようにすることです。
これらの目標は、すべての エントリキーを
IRIへ展開し、
すべての値を
展開形式の
配列で表現することで達成されます。
展開形式は、
JSON-LD において値を表現する最も冗長で規則的な方法です。文書のすべてのコンテキスト情報は、
代わりに各値のローカルに格納されます。
上記の例に対して 展開アルゴリズム
(expand()
操作)を実行すると、次の出力が得られます:
[
{
"@id": "http://me.markus-lanthaler.com/",
"http://xmlns.com/foaf/0.1/name": [
{ "@value": "Markus Lanthaler" }
],
"http://xmlns.com/foaf/0.1/homepage": [
{ "@id": "http://www.markus-lanthaler.com/" }
]
}
]
上記の例は、 展開アルゴリズムの出力を JSON-LD としてシリアライズしたものです。 ここでは、アルゴリズムで使用される マップが JSON オブジェクトに置き換えられています。
上記の出力では、すべての コンテキスト定義が 削除され、すべての 用語および コンパクト IRIが 絶対 IRIへ展開され、 すべての JSON-LD 値が 展開形式の 配列で表されていることに注意してください。 出力はより冗長で人間には読みにくいものになりますが、非常に規則的な構造であるため、 JSON-LD 処理を容易にする基準を確立します。
この節は非規範的です。
展開が与えられた入力から コンテキストを削除する一方で、 圧縮の主な機能は、 反対の操作を行うこと、すなわち与えられた入力を特定の コンテキストに従って表現することです。 圧縮は、 情報の表現方法を特定の人またはアプリケーション向けに特化させる コンテキストを適用します。 これにより、JSON または JSON-LD を利用するアプリケーションは、アプリケーション固有の用語で データを表現できるため簡素化され、また人間にとってもデータが読みやすくなります。
圧縮は、開発者が提供する コンテキストを使用して、 IRIを 用語または コンパクト IRIへ短縮し、 展開形式で表現された JSON-LD 値を、 文字列や 数値などの単純な値へ変換します。
たとえば、次の展開済み JSON-LD 入力文書を想定します:
[
{
"@id": "http://me.markus-lanthaler.com/",
"http://xmlns.com/foaf/0.1/name": [
{ "@value": "Markus Lanthaler" }
],
"http://xmlns.com/foaf/0.1/homepage": [
{ "@id": "http://www.markus-lanthaler.com/" }
]
}
]
さらに、次の開発者提供の JSON-LD コンテキストを想定します:
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"homepage": {
"@id": "http://xmlns.com/foaf/0.1/homepage",
"@type": "@id"
}
}
}
上記で提供されたコンテキストを使用して、上記の JSON-LD 入力文書に対して
圧縮アルゴリズム
(compact()
操作)を実行すると、次の出力が得られます:
上記の例は、 圧縮アルゴリズムの出力を JSON-LD としてシリアライズしたものです。 ここでは、アルゴリズムで使用される マップが JSON オブジェクトに置き換えられています。
すべての IRIが、
出力に注入された
コンテキストで指定されたとおりに
用語へ圧縮されていることに注意してください。
圧縮された出力は人間にとって有用であるだけでなく、
プログラムしやすい構造を生成するためにも使用されます。圧縮により、開発者は任意の展開済み文書を
アプリケーション固有の圧縮済み文書へ写像できます。上記で提供されたコンテキストは
http://xmlns.com/foaf/0.1/name を name に写像しましたが、
開発者が提供する任意の他の用語に写像することもできます。
この節は非規範的です。
展開は文書が均一な構造になることを保証しますが、 平坦化はさらに一歩進み、 データの形状が決定的であることを保証します。展開済み文書では、単一の ノードの プロパティが、 複数の異なる ノード オブジェクトに分散していることがあります。文書を平坦化することで、 ある ノードの すべての プロパティは単一の ノード オブジェクトに集められ、すべての 空白ノードには 空白ノード識別子でラベルが付けられます。 これにより、特定のアプリケーションで JSON-LD データを処理するために必要なコードを 大幅に簡素化できる場合があります。
たとえば、次の JSON-LD 入力文書を想定します:
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"knows": "http://xmlns.com/foaf/0.1/knows"
},
"@id": "http://me.markus-lanthaler.com/",
"name": "Markus Lanthaler",
"knows": [
{"name": "Dave Longley"}
]
}
圧縮を防ぐためにコンテキストを
null に設定して
平坦化アルゴリズム
(flatten()
操作)を実行すると、次の文書が返されます:
上記の例は、 平坦化アルゴリズムの出力を JSON-LD としてシリアライズしたものです。 ここでは、アルゴリズムで使用される マップが JSON オブジェクトに置き換えられています。
上記の出力では、ある ノードの
すべての プロパティが
単一の ノードオブジェクトに集められていること、
また "Dave Longley" を表す
空白ノードに
空白ノード識別子
_:b0 が割り当てられていることに注意してください。
人間が読みやすくしたり、特定のアプリケーションで処理しやすくしたりするために、 平坦化済み文書は コンテキストを渡すことで圧縮できます。 入力文書と同じコンテキストを使用すると、平坦化され圧縮された文書は 次のようになります:
文書を平坦化して 圧縮した結果は、
常に マップ
(シリアライズ時には JSON オブジェクトとして表される)であり、
デフォルト
グラフを表す @graph
エントリを含むことに注意してください。
この節は非規範的です。
JSON-LD は、 [RDF11-CONCEPTS] で説明されるように、 RDF データをシリアライズするために使用できます。これにより、任意の RDF 構文との間で、 忠実性を損なうことなくデータを往復変換できます。
たとえば、Turtle [TURTLE] で シリアライズされた次の RDF 入力を想定します:
@prefix foaf: <http://xmlns.com/foaf/0.1/> . <http://me.markus-lanthaler.com/> foaf:name "Markus Lanthaler" ; foaf:homepage <http://www.markus-lanthaler.com/> .
RDF を JSON-LD としてシリアライズするアルゴリズムを使用すると、 開発者はこの文書を展開済み JSON-LD に変換できます:
[
{
"@id": "http://me.markus-lanthaler.com/",
"http://xmlns.com/foaf/0.1/name": [
{ "@value": "Markus Lanthaler" }
],
"http://xmlns.com/foaf/0.1/homepage": [
{ "@id": "http://www.markus-lanthaler.com/" }
]
}
]
上記の例は、 RDF を JSON-LD としてシリアライズするアルゴリズムの 出力を JSON-LD としてシリアライズしたものです。 ここでは、アルゴリズムで使用される マップが JSON オブジェクトに置き換えられています。
上記の出力は、前の節で概説した手法を使用して容易に圧縮できることに注意してください。 また、JSON-LD を RDF へデシリアライズする アルゴリズムを使用して、JSON-LD 文書を RDF に戻すことも可能です。
非規範的と明示された節に加え、この仕様内のすべての作成ガイドライン、図、例、および注記は 非規範的です。この仕様内のそれ以外のすべては規範的です。
この文書内のキーワード MAY、MUST、MUST NOT、および SHOULD は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されるとおりに解釈されます。
この仕様への適合を主張できる製品には、2 つのクラスがあります: JSON-LD Processor、 および RDF シリアライザ/デシリアライザです。
適合する JSON-LD Processor は、 展開、圧縮、 および 平坦化操作を この仕様で定義されたアルゴリズムと整合する方法で 実行できるシステムです。
JSON-LD Processor は MUST NOT 不正な形式の IRI または 言語タグを修正しようとしてはなりません。 ただし、検証警告を発行することが SHOULD です。 IRI は、 相対 IRI と絶対 IRI の間の変換を除いて変更されません。
適合する RDF シリアライザ/デシリアライザは、 この仕様で定義されるとおりに JSON-LD を RDF へデシリアライズし、 RDF を JSON-LD としてシリアライズできるシステムです。
processingMode API オプションを使用して指定されない限り、
処理モードは、
ローカル コンテキスト内の
@version エントリを使用して設定され、
展開および 圧縮を含むアルゴリズムの動作に影響します。
一度設定されると、別の処理モードへ変更しようとすることはエラーであり、
プロセッサは MUST
processing mode conflict
エラーを生成し、以後の処理を中止します。
この仕様のアルゴリズムは、一般に効率よりも明確さを重視して書かれています。したがって、 JSON-LD Processor は、 最終結果がこの仕様のアルゴリズムによって得られる結果と区別できない限り、 この仕様で与えられるアルゴリズムを任意の方法で実装してかまいません。
キーワードに対する操作を記述するアルゴリズム手順では、 それらの手順は キーワード別名にも適用されます。
実装者は、 JSON-LD テストスイートの テストケースに合格することで、この仕様への適合レベルを部分的に確認できます。 ただし、テストスイート内のすべてのテストに合格しても、 この仕様への完全な適合を意味するものではありません。それは単に、 実装がテストスイートによってテストされる側面に適合していることを意味するだけです。
この仕様は、次の名前空間接頭辞を使用します:
| 接頭辞 | IRI |
|---|---|
| rdf | http://www.w3.org/1999/02/22-rdf-syntax-ns# |
| xsd | http://www.w3.org/2001/XMLSchema# |
以下の節では、JSON-LD コンテキストを処理するためのアルゴリズムを説明します。
JSON-LD データ構造を処理する際、各処理規則は アクティブコンテキストによって提供される情報を使用して適用されます。この 節では、アクティブコンテキストを生成する方法を説明します。
アクティブコンテキスト は次のものから構成されます:
"ltr" または "rtl")、各 用語 定義は次のものから構成されます:
"ltr" または "rtl")、用語定義は、 用語を IRIへマッピングするためだけでなく、用語を キーワードへマッピングするためにも使用できます。 この場合、それは キーワード別名と呼ばれます。
処理時、active context は、
null の 逆コンテキストを持つ状態で
初期化され、
用語
定義、
語彙
マッピング、デフォルト基底方向、または デフォルト
言語を持ちません。
処理中に ローカルコンテキストが
見つかった場合、既存の
active context を複製して、新しい
active context が作成されます。次に、
ローカルコンテキストからの情報が
新しい active context にマージされます。
ローカル
コンテキストはリモートコンテキストへの参照を含むことがあるため、
これにはそれらの取得も含まれます。
この節は非規範的です。
まず、現在の アクティブコンテキストを複製して、 新しい アクティブコンテキスト result を準備します。次に、元の ローカルコンテキスト の形式を 配列へ正規化します。 ローカルコンテキストは、 マップ、 文字列、またはその 2 つの組み合わせを含む 配列の形式を取ることがあります。 最後に、ローカル コンテキストの 配列に含まれる 各 コンテキストを 次のように処理します。
コンテキストが
文字列である場合、
それはリモートコンテキストへの参照を表します。リモートコンテキストを参照解決し、
コンテキストを、
取得した JSON-LD 文書内のトップレベルオブジェクトの @context
エントリの値で置き換えます。
そのような エントリが存在しない場合、
invalid remote context
が検出されています。そうでなければ、循環参照がないことを保証しつつ、
このアルゴリズムを再帰的に使用して コンテキストを処理します。
コンテキストが
マップである場合、
それは コンテキスト定義です。
まず、
基底 IRI、
デフォルト基底
方向、
デフォルト
言語、
コンテキスト伝播、
処理モード、
および 語彙マッピングを、
6 つの特定のキーワード
@base、
@direction、
@language、
@propagate、
@version、
および @vocabを処理することによって更新します。
これらは、ローカルコンテキスト内の他の
エントリより前に処理されます。
なぜなら、それらは他の エントリがどのように処理されるかに影響するからです。
コンテキストに
@import が含まれる場合、それは取得され、包含するコンテキストへ逆マージされるため、
JSON-LD 1.0 コンテキストを JSON-LD 1.1 へアップグレードできます。
リモートコンテキストを処理する際、@base は無視されることに注意してください。
コンテキストが伝播されない場合、 新しい ノードオブジェクトに入ったときに ロールバックできるように、 以前の コンテキストへの参照が保持されます。 デフォルトでは、型スコープ付きコンテキストを除き、 すべてのコンテキストが伝播されます。
アクティブ
コンテキストが初期化されるとき、
元の基底
URLの値は、
利用可能であれば、最初の コンテキストを含む文書の元の
から初期化され、
そうでなければ documentUrl API オプションから初期化されます。
これは、アクティブコンテキストを
basenull に設定してリセットする際に、
元のデフォルトの 基底 IRIを保持するために必要です。
初期化時、または
アクティブ
コンテキストのいずれかのエントリが変更されたとき、
または関連する 用語定義が追加、変更、
または削除されたとき、
逆コンテキストフィールドは
アクティブ
コンテキスト内で null に設定されます。
次に、ローカルコンテキスト内の他のすべての エントリについて、 result 内の 用語 定義を更新します。ローカルコンテキスト内の 用語 定義自体が 用語または コンパクト IRIを 含む場合があるため、再帰が必要になることがあります。 その際、エラーとなる循環依存がないことを確実にしなければなりません。 用語 定義の依存関係を処理した後、 現在の 用語定義を更新します。 これは キーワード 別名である場合があります。
最後に、新しい アクティブコンテキストとして result を返します。
このアルゴリズムは、新しい アクティブコンテキストを
ローカル
コンテキストで更新する方法を指定します。このアルゴリズムは、3 つの必須
および 4 つの任意
入力変数を取ります。
必須入力は、
active context、
local context、
および相対コンテキスト URL を解決するときに使用される base URL
です。
任意入力は、
配列 remote
contextsであり、
新しい空の 配列を既定値とし、循環するコンテキスト包含を検出するために使用されます。
override protected は既定値が false で、
保護された用語の変更を許可するために使用されます。
propagate は既定値が true で、
非伝播の コンテキストに関連付けられた
用語
定義をマークするために使用されます。
また、validate scoped context は既定値が true で、
再帰する可能性のある スコープ付きコンテキストを検証する際に再帰を制限するために使用されます。
null に設定します。
@propagateを含むオブジェクトである場合、
その値は ブール値
true または
false であることが MUST であり、
propagate をその値に設定します。
false で、かつ result が
以前のコンテキストを持たない場合、result 内の
以前のコンテキストを
active context に設定します。
null である場合:
false であり、
active context が
保護済みの 用語
定義を含む場合、
invalid context nullification
が検出され、処理は中止されます。
false の場合は、
result 内の
以前のコンテキストを、
result の以前の値に設定します。
loading document failed エラーが
検出され、処理は中止されます。
false であり、
remote contexts がすでに context を含む場合、
context をそれ以上処理せず、local context 内の次の
context へ続けます。
context overflow
エラーが検出され、処理は中止されます。
そうでなければ、context を remote contexts に追加します。
@context
エントリの値に設定します。
@context エントリのみを
保持すれば十分です。LoadDocumentCallbackを使用して
context を参照解決することにより得られる
RemoteDocumentに設定します。
その際、
urlには
context を渡し、
profileおよび
requestProfileには
http://www.w3.org/ns/json-ld#context を渡します。
documentを
内部表現へ変換できない場合
、
loading remote context failed
エラーが検出され、処理は中止されます。
documentに
@context エントリを持つ
トップレベルの マップがない場合、
invalid remote context
が検出され、処理は中止されます。
documentUrl、
remote contexts のコピー、
および validate scoped contextを渡します。
invalid local context
エラーが検出され、処理は中止されます。
@version エントリを持つ場合:
1.1 でない場合、
invalid @version value
が検出され、処理は中止されます。
@version の値として
1.1を使用することは、
JSON-LD 1.0 プロセッサに処理を停止させることを意図しています。
これは明らかに JSON-LD 1.1 に関連することを意図していますが、
それ以外の点では Semantic Versioning
の要件には従いません。
0 でない小数部を持つ
数値
の値を比較する際、実装は
numbersについて
特別な考慮を必要とする場合があります。
json-ld-1.0 に設定されている場合、
processing mode conflict
エラーが検出され、処理は中止されます。
@import エントリを持つ場合:
json-ld-1.0 である場合、
invalid context entry
エラーが検出され、処理は中止されます。
@import の値が 文字列でない場合、
invalid @import value
エラーが検出され、処理は中止されます。
@import の値を
base URL に対して解決した結果として
import を初期化します。
LoadDocumentCallbackを使用して
import を参照解決します。その際、
urlには
import を渡し、
profileおよび
requestProfileには
http://www.w3.org/ns/json-ld#context を渡します。
loading remote context failed
エラーが検出され、処理は中止されます。
@context エントリを持つ
トップレベルの マップがない場合、
または @context の値が
コンテキスト
定義
(すなわち マップ)でない場合、
invalid remote context
が検出され、処理は中止されます。そうでなければ、
import context をその エントリの値に設定します。
@import エントリを持つ場合、
invalid context entry
エラーが検出され、処理は中止されます。
@base エントリを持ち、かつ
remote contexts が空である、すなわち現在処理されているコンテキストが
リモートコンテキストでない場合:
@base エントリに関連付けられた値として
value を初期化します。
null である場合、
result の
基底 IRIを削除します。
null でない場合、
result の 基底 IRIを、
value を result の現在の 基底 IRIに対して
解決した結果に設定します。
invalid base IRI
エラーが検出され、処理は中止されます。
@vocab エントリを持つ場合:
@vocab エントリに関連付けられた値として
value を初期化します。
true を使用して
value を
IRI
展開した結果
に設定します。
それが IRIまたは 空白
ノード識別子でない場合、
invalid vocab mapping
エラーが検出され、処理は中止されます。
@vocab の値に 空白
ノード識別子を使用することは廃止されており、
JSON-LD の将来のバージョンで削除される可能性があります。@language エントリを持つ場合:
@language エントリに関連付けられた値として
value を初期化します。
null である場合、
result から任意の
デフォルト
言語を削除します。
invalid default language
エラーが検出され、処理は中止されます。
value が [BCP47] の
section 2.2.9
に従って
整形式でない場合、
プロセッサは警告を発行することが SHOULD です。
@direction エントリを持つ場合:
json-ld-1.0 である場合、
invalid context entry
エラーが検出され、処理は中止されます。
@direction エントリに関連付けられた値として
value を初期化します。
null である場合、
result から任意の 基底
方向を削除します。
null、"ltr"、または
"rtl" でない場合、
invalid base direction
エラーが検出され、処理は中止されます。
@propagate エントリを持つ場合:
json-ld-1.0 である場合、
invalid context entry
エラーが検出され、処理は中止されます。
@propagate の値が ブール値 true
または false でない場合、
invalid @propagate value
エラーが検出され、処理は中止されます。
@base、
@direction、
@import、
@language、
@propagate、
@protected、
@version、または
@vocabでない場合、
用語定義作成アルゴリズムを呼び出し、
active context には result、
local context には context、key、
defined、
base URL、
存在する場合は context の @protected
エントリの値を protected として、
override protected、
および remote contexts のコピー
を渡します。
このアルゴリズムは、 コンテキスト処理アルゴリズムから呼び出され、 ローカル コンテキスト内で処理されている 用語について、 アクティブコンテキスト内に 用語 定義を作成します。
この節は非規範的です。
用語 定義は、与えられた 用語について、与えられた ローカルコンテキスト内の情報を 解析することで作成されます。与えられた 用語が コンパクト IRIである場合、その 接頭辞が独自の 用語 定義を持つことに依存することで、 IRI マッピングを省略できます。 接頭辞が エントリとして ローカル コンテキスト内にある場合、その 用語定義は、 続行する前に再帰を通じてまず作成されなければなりません。 用語 定義は他の 用語 定義に依存できるため、循環依存を検出するための仕組みを 使用しなければなりません。ここで採用されている解決策では、 defined というマップを使用し、 用語が 定義済みか、または現在定義中かを追跡します。 このマップは、再帰を試みる前に確認されます。
用語のすべての依存関係が定義された後、 与えられた 用語についての ローカルコンテキスト内の残りの情報が考慮され、 その 用語について、 適切な IRI マッピング、コンテナマッピング、 および type マッピング、 言語マッピング、 または 方向マッピング が作成されます。
このアルゴリズムには 4 つの必須入力と 5 つの任意入力があります。
必須入力は、
active context、
local context、
term、
およびマップ defined です。
任意入力は、
既定値が null の base URL、
既定値が false の protected、
保護された用語の変更を許可するために使用され、既定値が false の
override protected、
配列 remote
contextsであり、
新しい空の 配列を既定値とし、循環する
コンテキスト包含を検出するために使用されます。
そして、既定値が true の validate scoped contextであり、
再帰する可能性のある スコープ付きコンテキストを検証するときに再帰を制限するために使用されます。
true(
用語
定義がすでに作成済みであることを示す)である場合、戻ります。そうでなく、
値が false である場合、
cyclic IRI mapping
エラーが検出され、処理は中止されます。
"")である場合、
invalid term definition
エラーが検出され、処理は中止されます。
そうでなければ、defined の term エントリに
関連付けられた値を false に設定します。これは、その
用語定義が
現在作成中であり、まだ完了していないことを示します。
@type であり、
処理モードが
json-ld-1.0 である場合、
keyword redefinition エラーが
検出され、処理は中止されます。
この時点で、
value は、次の エントリの
いずれか一方または両方のみを持つ マップであることが MUST です:
@set を値とする @container のエントリ。@protected のエントリ。keyword redefinition エラーが
検出され、処理が中止されることを意味します。
keyword redefinition
エラーが検出され、処理は中止されます。
term がキーワードの形式を持つ場合
(すなわち、[RFC5234] の ABNF 規則
"@"1*ALPHA に一致する場合)、
戻ります。プロセッサは警告を生成することが SHOULD です。
null である場合、
キーが @id で値が null である単一の
エントリからなる
マップに変換します。
@id で値が value である単一の
エントリからなる
マップに変換します。
simple term を true に設定します。
invalid term definition
エラーが検出され、処理は中止されます。
simple term を false に設定します。
false に、
protected を
protected に、
そして 逆
プロパティを false に初期化します。
@protected エントリを持つ場合、
definition 内の protected フラグを
このエントリの値に設定します。
@protected の値が ブール値でない場合、
invalid @protected value エラーが検出され、
処理は中止されます。
処理モードが
json-ld-1.0 である場合、
invalid term definition
が検出され、処理は中止されます。
@typeを含む場合:
@type エントリに関連付けられた値として
type を初期化します。これは 文字列であることが
MUST です。そうでなければ、
invalid type mapping
エラーが検出され、処理は中止されます。
@json または @none であり、かつ 処理モードが
json-ld-1.0 である場合、
invalid type mapping
エラーが検出され、処理は中止されます。
@id、@json、
@none、
@vocab、
または IRIの
いずれでもない場合、
invalid type mapping
エラーが検出され、処理は中止されます。
@reverseを含む場合:
@id または @nest の
エントリを含む場合、
invalid reverse property
エラーが検出され、処理は中止されます。
@reverse エントリに関連付けられた値が
文字列でない場合、
invalid IRI mapping
エラーが検出され、処理は中止されます。
@reverse エントリに関連付けられた値が文字列であり、
キーワードの形式を持つ場合
(すなわち、[RFC5234] の ABNF
規則
"@"1*ALPHA に一致する場合)、
戻ります。プロセッサは警告を生成することが SHOULD です。
@reverse エントリに関連付けられた値を
IRI
展開した結果に設定します。
その際、local context と defined を使用します。
結果が 形式として
IRIまたは 空白ノード
識別子でない場合、
invalid IRI mapping
エラーが検出され、処理は中止されます。
@container エントリを含む場合、
definition の コンテナマッピングを、
その値を含む 配列に設定します。
その値が @set、@index、null の
いずれでもない場合、
invalid reverse property
エラーが検出され(逆プロパティは set コンテナおよび
index コンテナのみをサポートします)、処理は中止されます。
true に設定します。
true に設定して、戻ります。
@idを含み、その値が
term と等しくない場合:
@id エントリが
null である場合、その用語は IRI 展開には使用されませんが、
この用語の将来の再定義を検出できるように保持されます。
@id エントリに関連付けられた値が
文字列でない場合、
invalid IRI mapping
エラーが検出され、処理は中止されます。
@id エントリに関連付けられた値が
キーワードではないが、
キーワードの形式を
持つ場合
(すなわち、[RFC5234]
の ABNF 規則
"@"1*ALPHA に一致する場合)、
戻ります。プロセッサは警告を生成することが SHOULD です。
@id エントリに関連付けられた値を
IRI
展開した結果に設定します。
その際、local context と defined を使用します。
結果の IRI マッピングが
キーワード、
IRI、または 空白
ノード識別子のいずれでもない場合、
invalid IRI mapping
エラーが検出され、処理は中止されます。それが
@context と等しい場合、
invalid keyword alias
エラーが検出され、処理は中止されます。
:) を含む場合、
またはどこかにスラッシュ (/) を含む場合:
true に設定します。
invalid IRI mapping
エラーが検出され、処理は中止されます。
:) もスラッシュ
(/) も含まず、
simple term が true であり、
definition の IRI マッピングが、
IRIで
gen-delim
文字で終わるもの、または
空白
ノード識別子のいずれかである場合、
definition 内の 接頭辞フラグを
true に設定します。
:) を
最初の文字の後のどこかに含む場合:
/) を含む場合:
@type である場合、
definition の IRI
マッピングを
@type に設定します。
invalid IRI mapping
エラーが検出され、処理は中止されます。
@containerを含む場合:
@container エントリに関連付けられた値として
container を初期化します。これは
@graph、
@id、
@index、
@language、
@list、
@set、
@type、
またはこれらのキーワードのいずれか 1 つだけを含む
配列、
@graph と
@id または @index のいずれかを含み、任意で
@set を含む
配列、
または @set と、
@index、@graph、
@id、@type、
@language の任意の組み合わせを任意の順序で含む
配列
のいずれかであることが MUST です。
そうでなければ、
invalid container mapping
が検出され、処理は中止されます。
@graph、@id、または @typeである場合、
またはそれ以外で 文字列でない場合、
処理モードが
json-ld-1.0 であれば、
invalid container mapping
エラーを生成し、処理を中止します。
@type を含む場合:
@id に設定します。
@id
でも @vocab でもない場合、
invalid type mapping
エラーが検出され、処理は中止されます。
@indexを含む場合:
json-ld-1.0 である場合、または
コンテナ
マッピングが @index を含まない場合、
invalid term definition
が検出され、処理は中止されます。
@index エントリに関連付けられた値として
index を初期化します。
その値を IRI
展開した結果が IRIでない場合、
invalid term definition
が検出され、処理は中止されます。
@contextを含む場合:
json-ld-1.0 である場合、
invalid term definition
が検出され、処理は中止されます。
@context エントリに関連付けられた値として
context を初期化します。これは ローカル
コンテキストとして扱われます。
true、
remote contexts のコピー、
および validate scoped context に false を使用します。
何らかのエラーが検出された場合、
invalid scoped context エラーが
検出され、処理は中止されます。
コンテキスト処理アルゴリズムの結果は 破棄されます。これは定義時にエラーを検出するために呼び出されます。 使用される場合、そのコンテキストは再処理され、 アクティブ コンテキストに対し、 展開または 圧縮の一部として適用されます。
@languageを含み、
エントリ
@typeを
含まない場合:
@language エントリに関連付けられた値として
language を初期化します。これは null
または 文字列のいずれかであることが
MUST です。
language が [BCP47] の
section 2.2.9に従って
整形式でない場合、
プロセッサは警告を発行することが SHOULD です。
そうでなければ、
invalid language mapping
エラーが検出され、処理は中止されます。
@directionを含み、
エントリ
@typeを
含まない場合:
@direction エントリに関連付けられた値として
direction を初期化します。これは null、
"ltr"、または "rtl" のいずれかであることが
MUST です。そうでなければ、
invalid base direction
エラーが検出され、処理は中止されます。
@nestを含む場合:
json-ld-1.0 である場合、
invalid term definition
が検出され、処理は中止されます。
@nest エントリに関連付けられた値で初期化します。
これは 文字列であることが
MUST であり、
@nest 以外のキーワードであってはなりません(MUST
NOT)。
そうでなければ、
invalid @nest value
エラーが検出され、処理は中止されます。
@prefixを含む場合:
json-ld-1.0 である場合、または
term がコロン (:) またはスラッシュ (/) を含む場合、
invalid term definition
が検出され、処理は中止されます。
@prefix エントリに関連付けられた値に設定します。
これは ブール値であることが
MUST です。そうでなければ、
invalid @prefix value
エラーが検出され、処理は中止されます。
true に設定されており、
かつその IRI マッピングが
キーワードである場合、
invalid term definition
が検出され、処理は中止されます。
@id、
@reverse、@container、
@context、
@direction、
@index、
@language、
@nest、
@prefix、
@protected、
または @type 以外の エントリを含む場合、
invalid term definition エラーが
検出され、処理は中止されます。
false で、
previous definition が存在し、かつ保護済みである場合:
protected term redefinition エラーが
検出され、
処理は中止されます。
true に設定します。
用語が複数あり、それらを選択して IRIを圧縮できる場合、 アルゴリズムの複雑さを考慮しつつ、用語の 選択が決定的であり、かつコンテキストに最も適した選択を表すことを保証しなければなりません。
用語を 選択するために、 逆コンテキストという概念が 導入されます。逆コンテキストは、 本質的には、与えられた アクティブコンテキストについて、 コンテナマッピング、 type マッピング、および 言語マッピングを単純な 用語へマッピングする 逆引き表です。 逆コンテキストは、 アクティブコンテキストが 圧縮に使用される場合にのみ 生成する必要があります。
逆 コンテキストを利用するには、特定の IRIに関連付けられた値について、 優先される コンテナマッピングのリストと、 type マッピングまたは 言語マッピングが 収集されます。 これらのパラメータはその後 用語選択アルゴリズムへ渡され、 値のマッピングに最も適切に一致する 用語を見つけます。
この節は非規範的です。
与えられた
アクティブ
コンテキストについて
逆
コンテキストを作成するために、
アクティブ
コンテキスト内の各
用語を、長さ順、短いものから順に訪問します
(同じ長さの場合は辞書順で最小の
用語を選んで
その同順位を解決します)。各 用語について、
コンテナマッピングと
type マッピング
または 言語マッピングの
合法的に一致し得る各組み合わせについて、
逆コンテキストに
エントリが追加されます。不正な一致には、値の
type マッピングまたは
言語マッピングと、
その 用語のものとの違いが
含まれます。用語が
コンテナマッピング、
type マッピング、または
言語マッピングを持たない
(またはこれらの何らかの組み合わせを持たない)場合、
特別なキー @none を使用して
逆コンテキスト内にエントリを持ちます。これにより、
用語選択アルゴリズムは、特定の
IRIと値の組み合わせに対して、
より具体的に一致する 用語が利用できない場合に、
より汎用的な 用語を選択するようフォールバックできます。
言語タグの正規化は任意ですが、 逆コンテキストは、 正規化された 言語 タグに基づいてエントリを作成するため、表現にかかわらず適切な用語を選択できます。
このアルゴリズムは 1 つの必須入力を取ります: 逆コンテキストが 作成される対象の active context です。
@none に初期化します。
active context が デフォルト言語を持つ場合、
default language を
アクティブ
コンテキストからの
デフォルト言語へ設定し、
小文字に正規化します。
null である場合、
termは
圧縮中に選択できないため、次の
termへ続けます。
@none に初期化します。
コンテナマッピングが空でない場合、
container を
コンテナマッピングのすべての値を
辞書順で連結したものに設定します
。
@language
で、その値は新しい空の
マップです。2 番目の エントリは
@type
で、その値は新しい空の マップです。
そして 3 番目の エントリは @any
で、その値は マップであり、処理中の
termに
設定された @none
エントリを持ちます。
@type
エントリに
関連付けられた値を、変数
type map を使用して参照します。
@language
エントリに
関連付けられた値を、変数
language map を使用して参照します。
@none である
type マッピングを
持つ場合:
null でない場合、lang dir を
言語マッピングと 方向マッピングを
アンダースコア("_")で区切って連結したものに設定し、
小文字に正規化します。
null でない場合、
lang dir を
言語マッピングに設定し、
小文字に正規化します。
null でない場合、
lang dir を、アンダースコア("_")を前置した
方向マッピングに設定します。
@null に設定します。null の場合もあります):
null の場合もあります):
このアルゴリズムは、IRI 圧縮アルゴリズムを介して呼び出され、 アクティブコンテキストの 逆コンテキストを使用して、 用語を見つけます。 この用語は、IRIを 圧縮するために最も適しています。 IRIに関連付けられた値についての 他の情報も与えられます。これには、どの コンテナ マッピング およびどの type マッピングまたは 言語マッピングを 値を表現するために最もよく使用すべきかが含まれます。
この節は非規範的です。
逆コンテキストの IRI用のエントリは、まず、優先される コンテナマッピングに従って、 与えられた順序で検索されます。一致する コンテナマッピングを持つ 用語の中では、 一致する type マッピングまたは 言語 マッピングを持つものが、 type マッピングまたは 言語マッピングを持たないものよりも 優先されます。一致する コンテナ マッピングを持つ 用語が 存在しない場合、与えられた type マッピングまたは 言語マッピングに一致する、 コンテナ マッピングを持たない 用語が選択されます。 それでも選択された 用語がない場合、 利用可能であれば、 type マッピングまたは 言語マッピングを持たない 用語が選択されます。 競合する type マッピングまたは 言語 マッピングを持つ 用語は 選択されません。同じマッピングを持つ 用語間の同順位は、 まず最短の用語を選択し、次に辞書順で最小の用語を選択することで解決されます。 これらの同順位は、 逆コンテキスト作成アルゴリズムを使用して 逆コンテキストを作成した際にすでに解決されているため、 自動的に解決されることに注意してください。
このアルゴリズムには 5 つの必須入力があります。それらは次のとおりです: active context、 キーワードまたは IRIである var、 優先される コンテナマッピングの 順序付きリストを表す 配列 containers、 一致する type マッピングを持つ 用語を探すか、 言語マッピングを 持つものを探すかを示す 文字列 type/language、 および、探すべき type マッピングまたは 言語マッピングの preferred values の順序付きリストを表す 配列です。
null の
逆コンテキストを持つ場合、
active context 内の 逆コンテキストを、
active context を使用して
逆コンテキスト作成アルゴリズムを呼び出した結果に設定します。
null を返します。この節は非規範的です。
以下の例は、異なる用語定義および値に対して、用語選択アルゴリズムがどのように 振る舞うかを示すことを意図しています。網羅的なものではなく、 アルゴリズムの異なる部分を説明することを意図しています。
用語定義が "@container": "@language" を持つ場合、@type を持たない
値
オブジェクトにのみ一致します。
用語定義がデータ型を持つ場合、一致するデータ型を持つ 値 オブジェクトにのみ一致します。
以下の節では、JSON-LD 文書、IRI、および値を展開するためのアルゴリズムを説明します。
このアルゴリズムは JSON-LD 文書を展開します。これにより、すべての コンテキスト 定義が削除され、すべての 用語および コンパクト IRIが IRI、 空白 ノード識別子、または キーワードへ展開され、 すべての JSON-LD 値が 配列内で 展開形式として表現されます。
この節は非規範的です。
ルート element から開始し、完全に 展開された result が得られるまで、JSON-LD 文書を再帰的に処理できます。 element を 展開する際、 問題を分解するため、その型に応じてそれぞれを異なる方法で扱うことができます:
null である場合、展開するものはありません。最後に、result が 配列であることを保証した後、 result を返します。
[RDF11-CONCEPTS] に基づく データモデルは、 複数の順序なしプロパティ値をサポートしませんが、 このアルゴリズムは展開中に順序なしの 配列内で見つかる可能性のある重複を削除しません。 § 6.1 圧縮アルゴリズムや § 7.1 平坦化アルゴリズムなどの他のアルゴリズムは、 順序なし配列から重複値を削除します。 この仕様の将来バージョンでは、配列値が集合を形成する場合に 重複する配列値を削除するよう更新される可能性があります。
このアルゴリズムは 4 つの必須入力変数と 3 つの任意入力変数を取ります。
必須入力は、active context、
active property、展開される element、
および展開対象の元文書の
に関連付けられた
base URLです。
任意入力は、
documentUrl
フラグであり、フレーム展開で使用される特殊な形式の入力を許可します。
また、frameExpansion フラグは、
注記されている箇所で
マップエントリのキーを
辞書順に並べるために使用されます。
そして from map フラグは、非伝播の
コンテキストに関連付けられた
アクティブコンテキスト内の
以前の 用語定義を戻す処理を制御するために使用されます。
渡されない場合、任意フラグは orderedfalse に設定されます。
このアルゴリズムは、
JSON-LD
Frameの展開に固有の処理手順も実行します。フレームでは、@id および
@type エントリは、IRIの配列または
空の マップを受け入れることができます。
値オブジェクトの
エントリも、
文字列の
配列、または空の
マップを受け入れることができます。
フレーミングでは追加のキーワード
エントリも使用します:
(@explicit、@default、
@embed、@explicit、@omitDefault、または
@requireAll)であり、これらは展開を通じて保持されます。
JSON-LD
Frameの特別な処理は、
フラグが
frameExpansiontrue に設定されている場合に呼び出されます。
Terms [JSON-LD11]
で述べられているように、
前方互換性の問題を避けるため、用語は
@ 文字で始めるべきではありません。JSON-LD の将来バージョンで追加の
キーワードが導入される可能性があるためです。
このアルゴリズムはそのような用語を他の用語と同様に扱います。すなわち、
IRIへマッピングされていない限り無視されます。
このアルゴリズムの実装は、そのような用語が検出された場合に警告を表示するための
実行時フラグを提供することを検討してもかまいません。
空の 用語("")の使用は、
すべてのプログラミング言語が空の JSON キーを処理できるわけではないため許可されません。
このアルゴリズムの実装は、そのような用語が検出された場合に警告を表示するための
実行時フラグを提供することを検討してもかまいません。
プロパティにラベルを付けるために 空白ノード 識別子を使用することは廃止されており、 JSON-LD の将来バージョンで削除される可能性があります。 このアルゴリズムの実装は、そのような用語が検出された場合に警告を表示するための 実行時フラグを提供することを検討してもかまいません。
null である場合、null を返します。@default である場合、
frameExpansion フラグを
false に初期化します。
null または @graph である場合、
自由浮動の スカラーを削除するため、
null を返します。
frameExpansion
ordered、
および from map フラグを渡します。
@list が含まれ、
かつ expanded item が
配列である場合、
expanded item を、元の
expanded item を値とする
@list エントリを含む新しい
マップに設定します。
false であり、
かつ element が @value へ展開される
エントリを含まず、
かつ element が @id へ展開される単一の
エントリだけから構成されない場合
(エントリは
IRI
展開される)、
active context を active context からの
以前のコンテキストに設定します。
これは、用語スコープ付き
コンテキストのスコープが、新しい
ノードオブジェクトの処理時には適用されないためです。
true を渡します。
@context を含む場合、
コンテキスト処理アルゴリズムの結果に
active context を設定します。
その際、active context、@context
エントリの値を
local context として
および base URLを渡します。
@type になるものについて:
false を渡します。
@type へ展開される最初の
エントリの
最後の値の展開に初期化します(存在する場合)。
エントリはキーの辞書順で並べます。
一致したエントリのキーと値はいずれも
IRI
展開されます。
ordered が true
である場合は
key の辞書順で:
@context である場合、次の
key へ続けます。
null であるか、コロン
(:) を含まず、かつ キーワードでもない場合、
key を削除し、次の key へ続けます。
@reverse と等しい場合、
invalid reverse property map
エラーが検出され、処理は中止されます。
@included または @type を除き
(ただし 処理
モードが json-ld-1.0 である場合を除く)、
colliding keywords
エラーが検出され、処理は中止されます。
@id である場合:
invalid @id value
エラーが検出され、処理は中止されます。
frameExpansion
フラグが設定されている場合、value は空の
マップ、または 1
つ以上の
文字列の
配列であってもかまいません(MAY)。
true、
vocab に false を使用します。
frameExpansion
フラグが設定されている場合、expanded value は、
1 つ以上の値の 配列になります。
文字列値は上記のように IRI
展開アルゴリズムを使用して展開されます。
@type である場合:
invalid type value
エラーが検出され、処理は中止されます。
frameExpansion
フラグが設定されている場合、value は空の
マップ、
または @default の値が
IRIに制限された
デフォルト
オブジェクトであってもかまいません(MAY)。
その他のすべての値は、
invalid type value
エラーが検出され、処理が中止されることを意味します。
@default の値を、
value を
IRI
展開した結果に設定した
新しい デフォルト
オブジェクトに expanded value を設定します。
その際、active context には
type-scoped contextを使用し、
document relative には true を使用します。
true を使用します。
@type のエントリを持つ場合、
result 内の @type の値を
expanded value の前に追加し、
必要であれば 配列へ変換します。
@graph である場合、
このアルゴリズムを再帰的に使用した結果に
expanded value を設定します。
その際、active context、active property に
@graph、element に value、
base URL、
および frameExpansion
と ordered
フラグを渡し、
expanded value が 1 つ以上の
マップからなる
配列であることを保証します。
@included である場合:
json-ld-1.0 である場合、
element から次の key へ続けます。
null、
element に value、
base URL、
および frameExpansion
と ordered フラグを渡し、
結果が 配列であることを保証します。
invalid @included value
エラーが検出され、処理は中止されます。
@included のエントリを持つ場合、
result 内の @included の値を
expanded value の前に追加します。
@value である場合:
@json である場合、
expanded value を value に設定します。
処理
モードが json-ld-1.0 である場合、
invalid value object value
エラーが検出され、処理は中止されます。
null でない場合、
invalid value object value
エラーが検出され、処理は中止されます。
frameExpansion
フラグが設定されている場合、value は空の
マップ、または
スカラー
値の配列であってもかまいません(MAY)。
frameExpansion
フラグが設定されている場合、
expanded value は 1 つ以上の
文字列
値の 配列、
または空の マップを含む
配列になります。
null である場合、result の
@value
エントリを
null に設定し、element から次の
key へ続けます。この場合、@type
エントリの意味は
@value エントリの存在に依存するため、
null 値は保持される必要があります。
@language である場合:
invalid language-tagged string
エラーが検出され、処理は中止されます。
frameExpansion
フラグが設定されている場合、value は空の
マップ、または 0
個以上の
文字列の
配列であってもかまいません(MAY)。
frameExpansion
フラグが設定されている場合、
expanded value は 1 つ以上の
文字列
値の
配列、
または空の マップを含む
配列になります。
@direction である場合:
json-ld-1.0 である場合、
element から次の key へ続けます。
"ltr" でも
"rtl" でもない場合、
invalid base direction
エラーが検出され、処理は中止されます。
frameExpansion
フラグが設定されている場合、value は空の
マップ、または 0 個以上の
文字列の
配列であってもかまいません(MAY)。
frameExpansion
フラグが設定されている場合、
expanded value は 1 つ以上の
文字列
値の
配列、
または空の マップを含む
配列になります。
@index である場合:
invalid @index value
エラーが検出され、処理は中止されます。
@list である場合:
null または
@graph である場合、自由浮動のリストを削除するため、
element から次の key へ続けます。
frameExpansion
と ordered
フラグを渡し、
結果が 配列であることを保証します。
@set である場合、
このアルゴリズムを再帰的に使用した結果に
expanded value を設定します。
その際、active context、
active property、element に value、
base URL、
および frameExpansion
と ordered
フラグを渡します。
@reverse である場合:
invalid @reverse value
エラーが検出され、処理は中止されます。
@reverse、
element に value、
base URL、
および frameExpansion
と ordered
フラグを渡します。
@reverse
エントリ、
すなわち 2 回反転された
プロパティを含む場合、
その各 property および item について次の手順を実行します:
@reverse 以外の
エントリを含む場合:
@reverse
エントリの値に reverse map を設定し、
必要であれば空の マップに
初期化します。@reverse 以外の各 property および
items について:
invalid reverse property value
が検出され、処理は中止されます。
true
を使用します。
@nest である場合、
nests に key を追加し、必要であれば空の
配列に初期化します。
element から次の key へ続けます。
frameExpansion フラグが
設定されている場合で、
expanded property がその他のフレーミングキーワード
(@default、
@embed、@explicit、@omitDefault、または
@requireAll)のいずれかである場合、
展開アルゴリズムを再帰的に実行した結果に
expanded value を設定します。
その際、active context、
active property、element に value、
base URL、
および frameExpansion
と ordered
フラグを渡します。
null でない限り、
expanded property が @value であり、
input type が @json でない場合、
result の
expanded property エントリを
expanded value に設定します。
@json の type
マッピングを持つ場合、
expanded value を新しい マップに設定し、
エントリ
@value を value に設定し、エントリ
@type を @json に設定します。
@language を含み、
value が マップである場合、
value は 言語マップから次のように展開されます:
ordered が
true である場合は language の辞書順で:
null である場合、
language value 内の次のエントリへ続けます。
invalid language map value
エラーが検出され、処理は中止されます。
@value-item)
および (@language-language)
からなる新しい マップ
v を初期化します。
item が
@none でもなく、
[BCP47]
の
section
2.2.9 に従って
整形式でもない場合、
プロセッサは警告を発行することが SHOULD です。
@none であるか、
@none へ展開される場合、
v から @language を削除します。
null でない場合、
direction を値として @direction の
エントリを
v に追加します。
@index、
@type、または @idを
含み、
value が マップである場合、
value はマップから次のように展開されます:
@index に初期化します。
ordered が
true である場合は
index の辞書順で:
@id または @type を含む場合、
active context に
以前のコンテキストが存在すれば
map context をそれに初期化し、
そうでなければ map context を active context に設定します。
@type を含み、
map context 内の index の
用語
定義が
ローカル
コンテキストを持つ場合、
コンテキスト処理
アルゴリズムの結果に
map context を更新します。
その際、map context を active context として、
index の
ローカル
コンテキストの値を
local context として、
map context 内の index についての
用語
定義からの base URLを渡します。
true、
および frameExpansion
と ordered
フラグを渡します。
@graph を含み、
かつ item が
グラフ
オブジェクトでない場合、
item を、キー-値ペア
@graph-item を含む新しい
マップに設定し、
その値が 配列を使用して表されることを保証します。
@index を含み、
index key が @index でなく、
かつ expanded index が @none でない場合:
invalid value object
エラーが検出され、処理は中止されます。
@index を含み、
item が @index の
エントリを
持たず、
かつ expanded index が @none でない場合、
キー-値ペア (@index-index) を
item に追加します。
@id を含み、
item が @id の
エントリを
持たず、
かつ expanded index が @none でない場合、
キー-値ペア (@id-expanded
index) を item に追加します。
ここで expanded index は、
index を
IRI
展開した結果に設定され、
document relative に true、
vocab に false を使用します。
@type を含み、
かつ expanded index が @none でない場合、
types を、expanded index に続いて
item 内の @type の既存値を含む新しい
配列に初期化します。
キー-値ペア (@type-types) を
item に追加します。
frameExpansion
と ordered フラグを渡します。
null である場合、key を無視し、
element から次の key へ続けます。
@list を含み、
かつ
expanded value がまだ
リストオブジェクトでない場合、
expanded value を
リストオブジェクトへ変換します。
まず、それがまだ 配列でない場合には、
expanded value のみを含む
配列に設定し、
次に、キー-値ペア @list-expanded value を含む
マップに設定します。
@graph を含み、
@id も @index も含まない場合、
必要であれば expanded value を
配列へ変換し、
その後、expanded value 内の各値 ev を
グラフ
オブジェクトへ変換します:
@reverse の
エントリを持たない場合、
それを作成し、その値を空の マップに初期化します。
@reverse
エントリの値を、
変数 reverse map を使用して参照します。
invalid reverse property value
が検出され、処理は中止されます。
true を使用します。
true を使用します。
ordered が true である場合は
辞書順で:
@value へ展開される場合、
invalid @nest value エラーが
検出され、処理は中止されます。
@value を含む場合:
@direction、
@index、
@language、
@type、
および @value 以外の
エントリを含んではなりません。
また、@language または @direction
エントリのいずれかを含む場合、
@type エントリを含んではなりません。
そうでなければ、invalid value object
エラーが検出され、処理は中止されます。
@type
エントリが
@json である場合、@value
エントリは
任意の値を含むことができ、
JSON
リテラルとして扱われます。
@value エントリの値が
null、または空の 配列である場合、null を返します。
@value エントリの値が
文字列でなく、
かつ result が
エントリ
@language を含む場合、
invalid language-tagged value
エラーが検出されます(言語タグ付きにできるのは
文字列のみです)、
そして処理は中止されます。
@type エントリを持ち、
かつその値が IRIでない場合、
invalid typed value
エラーが検出され、処理は中止されます。
@type を含み、
その関連付けられた値が 配列でない場合、
それを、関連付けられた値のみを含む
配列に設定します。
@set
または @list を含む場合:
@index でなければなりません。そうでなければ、
invalid set or list object
エラーが検出され、処理は中止されます。
@set を含む場合、
result を、その エントリに関連付けられた値に設定します。
@language の
エントリのみを含む
マップである場合、
null を返します。
null または @graph である場合、
自由浮動値を次のように削除します:
JSON-LD 文書では、一部のキーおよび値が IRIを表す場合があります。この節では、 文字列であり、IRIを表すものを、 絶対 IRIまたは 空白ノード識別子へ 変換するアルゴリズムを定義します。 また、キーワード別名を キーワードへ変換することも扱います。
IRI 展開は、コンテキスト処理中または 他の任意の JSON-LD アルゴリズム中に発生することがあります。 IRI 展開がコンテキスト処理中に発生する場合、 ローカルコンテキストと、 コンテキスト処理アルゴリズムからの関連する defined マップがこのアルゴリズムへ渡されます。これにより、 用語定義の 依存関係を 用語定義作成アルゴリズムを介して処理できます。
この節は非規範的です。
value を IRIへ展開するには、
まずそれが null、用語、
キーワード別名、
または何らかの形式の IRIであるかを判定しなければなりません。
見つかった内容に基づき、特定の種類の展開を処理します。たとえば、
キーワード別名を
キーワードへ展開し、
用語を、
アクティブ
コンテキスト内の
IRI マッピングに従って、
IRIへ展開します。
value を調べている間に、コンテキスト処理中にこのアルゴリズムを実行しているため、
用語定義の依存関係を作成する必要があることもあります。
コンテキスト処理中に実行しているかどうかは、
ローカル
コンテキストを null と照合することで判断できます。
value が
ローカルコンテキスト内の
エントリであり、
defined マップが
value について関連付けられた値が
true の エントリを
持たない場合、
アクティブコンテキスト内に
用語定義を作成する必要があることがわかります。
defined マップは、どの
用語がすでに定義済みか、
または定義中かを追跡するために、
コンテキスト処理中に使用されます。
用語定義作成アルゴリズムを使用して
用語
定義を作成します。
キーワードの形式を持つものの、
キーワードではない値(すなわち "@" で始まる値)は、
将来の使用のために予約されているため、どの値にもマップされません。
このアルゴリズムは null を返し、そのような値が遭遇されたときに無視されるようにします。
このアルゴリズムは 2 つの必須入力変数と 4 つの任意入力変数を取ります。
必須入力は、active context と、展開される value です。
任意入力は 2 つのフラグ、
document relative と vocab であり、
value を、文書の基底
IRIに対する
相対 IRI 参照として解釈できるか、
または
アクティブコンテキストの
語彙
マッピングに対して解釈できるかを、それぞれ指定します。
また、コンテキスト処理中にこのアルゴリズムが使用される場合に用いる
local context とマップ defined があります。
渡されない場合、2 つのフラグは false に設定され、
local context と defined は null に初期化されます。
null である場合、
value をそのまま返します。
"@"1*ALPHA に一致する場合)、
プロセッサは警告を生成し、null を返すことが SHOULD です。
null でなく、
value と等しいキーを持つ
エントリを含み、
かつ defined 内の value についての
エントリの値が
true でない場合、
用語定義作成アルゴリズムを呼び出し、
active context、local context、
value を term として、そして defined を渡します。
これにより、コンテキスト処理中に
active context 内で value についての
用語
定義が作成されることが保証されます。
true であり、
active context が value についての
用語定義を持つ場合、
関連付けられた IRI
マッピングを返します。
:) を
最初の文字より後のどこかに含む場合、
それは
IRI、
コンパクト IRI、または
空白ノード
識別子のいずれかです:
:) の位置で
prefix と suffix に分割します。
_) である場合、
または suffix が二重スラッシュ
(//) で始まる場合、value はすでに
IRIまたは 空白ノード
識別子であるため、そのまま返します。
null でなく、
prefix エントリを含み、かつ
defined 内の prefix
エントリの値が
true でない場合、
用語定義作成アルゴリズムを呼び出し、
active context、
local context、prefix を term として、
および defined を渡します。これにより、
コンテキスト処理中に
active context 内で
prefixについての
用語
定義が作成されることが保証されます。
null の IRI マッピングを持ち、
かつその 用語定義の
接頭辞
フラグが true である場合、
prefix に関連付けられた
IRI
マッピング
と suffix を連結した結果を返します。
true であり、
active context が
語彙マッピングを持つ場合、
語彙マッピングと
value を連結した結果を返します。
true である場合、
value を active context からの
基底 IRIに
対して解決した結果に設定します。[RFC3986] の
section 5.2にある
基本アルゴリズムのみが使用されます。
構文ベース正規化も、
スキームベース正規化も
実行されません。IRI 参照で追加的に許可される文字は、
[RFC3987] の
section 6.5に従い、
URI 参照において非予約文字が扱われるのと同じ方法で扱われます。
JSON-LD 内の一部の値は、 圧縮形式で表現できます。 これらの値は、JSON-LD 文書の処理時に 展開される必要がある場合があります。 このアルゴリズムの適用後、値は 展開形式であると言われます。
この節は非規範的です。
アクティブプロパティが、
アクティブ
コンテキスト内で @id または @vocab に設定された
type マッピングを持ち、
かつ値が 文字列である場合、
単一の エントリ
@id を持つ
マップが
返されます。その値は、value に
IRI 展開
アルゴリズムを使用した結果です。
それ以外の場合、結果は
value を値に設定した @value
エントリを含む
マップになります。
さらに、アクティブプロパティに関連付けられた
type マッピングがある場合は、
@type エントリが含まれます。
または、value が
文字列であり、
アクティブ
プロパティに関連付けられた
言語マッピングがある場合は、
@language エントリが含まれます。
IRIとして解釈される値は、
2 つのカテゴリに分かれることに注意してください:
document relative なものと、
語彙相対なものです。プロパティおよび
@type の値、
ならびに "@type": "@vocab" としてマークされた用語は
語彙相対です。つまり、それらは定義済みの
用語、
コンパクト IRIであって
接頭辞が
用語であるもの、
または
語彙マッピングを使用して
IRIへ変換される文字列である必要があります。
このアルゴリズムは 3 つの必須入力を取ります: active context、 active property、および展開する value です。
@id である
type マッピングを持ち、
かつ value が 文字列である場合、
キーが @id で、値が
value を
IRI
展開した結果である単一の
エントリを含む
新しい
マップを返します。
その際、document relative に true、
vocab に false を使用します。
@vocab である
type マッピングを持ち、
かつ value が 文字列である場合、
キーが @id で、値が
value を
IRI
展開した結果である単一の
エントリを含む
新しい
マップを返します。
その際、document relative に true を使用します。
@value
エントリを持つ
マップに初期化します。
@id、@vocab、または
@none 以外である場合、
@type を
result に追加し、その値を
type マッピングに
関連付けられた値に設定します。
null でない場合、
@language を result に追加し、その値を language に設定します。
null でない場合、
@direction を result に追加し、その値を direction に設定します。
以下の節では、JSON-LD 文書、IRI、および値を圧縮するためのアルゴリズムを説明します。
このアルゴリズムは、与えられた コンテキストが適用されるように、 JSON-LD 文書を圧縮します。これにより、 適用可能なすべての IRIが 用語または コンパクト IRIへ、 適用可能なすべての キーワードが キーワード別名へ、 そして 展開形式で表現された 適用可能なすべての JSON-LD 値が、 文字列や 数値などの単純な値へ 短縮されなければなりません。
この節は非規範的です。
ルート element から開始し、完全に 圧縮された result が得られるまで、JSON-LD 文書を再帰的に処理できます。 element を 圧縮する際、 問題を分解するため、その型に応じてそれぞれを異なる方法で扱うことができます:
@index や @language マップなど、コンテキスト内で指定された
コンテナマッピングに基づいて再形成されます。
このアルゴリズムは、3 つの必須入力変数と 2 つの任意入力変数を取ります。
必須入力は、active context、
active property、
および圧縮される element です。
任意入力は、
フラグ
と、注記されている箇所で
マップエントリのキーを
辞書順に並べるために使用される
compactArrays フラグです。
渡されない場合、両方のフラグは orderedfalse に設定されます。
compactArrays
と ordered
フラグを渡します。
null でない場合、それを
result に追加します。
compactArrays が
false である場合、
または active property が @graph または
@set のいずれかである場合、
または active context 内の active property についての
コンテナマッピングが @list または
@set のいずれかを含む場合、
result を返します。
@value エントリを含まず、
かつ element が単一の @id エントリだけから構成されない場合、
active context を active context からの
以前のコンテキストに設定します。
これは、用語スコープ付き コンテキストのスコープが、
新しい ノードオブジェクトの処理時には
適用されないためです。
trueを渡します。
@value または @id の
エントリを持ち、
値圧縮アルゴリズムを使用した結果が
スカラーである場合
(active context、
active property、および element を value として渡す)、
または active property についての
用語定義が
@json の type マッピングを
持つ場合、
その結果を返します。
@list を含む場合、
このアルゴリズムを再帰的に使用した結果を返します。
その際、
active context、
active property、element 内の @list の値を
element として、
および compactArrays
と ordered フラグを渡します。
@reverse と等しい場合は
inside reverse を true に初期化し、
そうでなければ false に初期化します。
@type エントリを持つ場合、
その エントリの各
expanded type を
圧縮形式へ変換することで、
新しい配列 compacted types を作成して初期化します。
これは expanded type を
IRI
圧縮することで行います。
次に、compacted types 内の各 term について
辞書順で:
falseを渡します。
ordered が true
である場合は
expanded property の辞書順で:
@id である場合:
@type である場合:
@type 配列でなければなりません:
json-ld-1.1 であり、
active context 内の alias についての
コンテナマッピングが @set を含む場合は
true に初期化し、
そうでなければ compactArrays の否定に
初期化します。
@reverse である場合:
@reverse、
element に expanded value、
および compactArrays
と ordered
フラグを渡します。
@set を含む場合は
true に初期化し、
そうでなければ compactArrays
の否定に
初期化します。
@preserve
である場合:
compactArrays
と ordered
フラグを渡します。
@preserve の値として
compacted value を追加します。
@index であり、
active property が active context 内に
@index を含む
コンテナマッピングを持つ場合、
圧縮結果は @index コンテナの内部に入るため、
@index エントリを削除し、
次の expanded property へ続けます。
@direction、
@index、
@language、
または @value である場合:
@nest でなく、
または active context 内で @nest へ展開される
用語でもない場合、
invalid @nest value
エラーが検出され、処理は中止されます。
true を使用します。
@nest でなく、
または active context 内で @nest へ展開される
用語でもない場合、
invalid @nest value
エラーが検出され、処理は中止されます。
@set を含む場合、
または item active property が @graph または
@list である場合は true に初期化し、
そうでなければ compactArrays の否定に
初期化します。
compactArrays
と ordered
フラグを渡します。
expanded item が
リストオブジェクトまたは
グラフオブジェクトである場合、
element には expanded item の代わりに
それぞれ @list または
@graph エントリの値を使用します。
@list を含まない場合:
@list を
IRI
圧縮した結果であり、
値が元の compacted item である
エントリを含みます。
@index-value の
エントリを含む場合、
compacted item に
エントリを追加します。
そのキーは @index を
IRI
圧縮した結果であり、
値は value です。
@graph および
@id を含む場合:
@id の値を
IRI
圧縮したもの、またはそのような値が存在しない場合は
@none に初期化します。
expanded item 内に @id
エントリがある場合は、
vocab を false に設定します。
@graph および
@index を含み、
かつ expanded item が
単純な
グラフオブジェクトである場合:
@graph を含み、
かつ expanded item が
単純な
グラフオブジェクトである場合、
その値はマップオブジェクトとして表現できません。
@graph を含まないか、
または前述のいずれのケースにも一致しません。
@graph を
IRI
圧縮したものをキーとして含む新しいマップに設定します。
@id
エントリを含む場合、
compacted item にエントリを追加します。
そのキーは @id を
IRI
圧縮したものから得られ、
値は、expanded item 内の
@id の値を
IRI
圧縮し、
vocab に false を使用したものです。
@index
エントリを含む場合、
compacted item にエントリを追加します。
そのキーは @index を
IRI
圧縮したものから得られ、
値は expanded
item 内の @index の値です。
@language、
@index、@id、
または @typeを
含み、
かつ container が
@graph を含まない場合:
@language、@index、@id、または
@type のいずれかを
IRI
圧縮することで、
container key を初期化します。
@index に初期化します。
@language を含み、
expanded item が
@value エントリを含む場合、
compacted item をその @value
エントリに関連付けられた値に設定します。
expanded item 内の @language の値があれば、
map key をその値に設定します。
@index を含み、
index key が @index である場合、
expanded item 内の @index の値があれば、
map key をその値に設定します。
@index を含み、
index key が @index でない場合:
@id を含む場合、
map key を compacted item 内の
container key の値に設定し、container key を
compacted item から削除します。
@type を含む場合:
@id へ展開されるキーを持つ単一の
エントリを含む場合、
このアルゴリズムを再帰的に使用した結果に
compacted item を設定します。
その際、
active context、
active property に item active property、
および element には
expanded item からの @id の単一の
エントリで構成される
マップを渡します。
null である場合、
@none を
IRI
圧縮した結果に設定します。
このアルゴリズムは、IRIを 用語または コンパクト IRIへ、または キーワードを キーワード別名へ圧縮します。 IRIに関連付けられた値を渡すことで、 最もコンテキストに適した 用語の選択を補助できます。
この節は非規範的です。
渡された IRIが null である場合、
単に null を返します。
それ以外の場合、まず、その IRIまたは
キーワードが
アクティブコンテキストの
語彙
マッピングに対して相対的である場合に圧縮できる
用語を探します。
最も適切な 用語を選択するため、
渡された value についての情報を収集する必要がある場合があります。
この情報には、value を表現するための優先される
コンテナマッピング、
type マッピングまたは
言語マッピングを
判定することが含まれます。
JSON-LD リストの場合、
type マッピング
または 言語マッピングは、
リスト内のすべての項目に対して機能する最も具体的な値に基づいて選択されます。
この情報が収集されると、
用語選択アルゴリズムへ渡され、
それが最も適切な
用語を返します。
用語が見つからず、
その IRIを圧縮するために使用できない場合、
アクティブコンテキストの
語彙
マッピングが存在すれば、それを使用して
IRIを圧縮しようとします。
IRIを圧縮できなかった場合、
コンパクト IRIを見つけようとします。
用語は、その
用語定義が
値 true の
接頭辞フラグを含む場合にのみ、
コンパクト IRIを作成するために使用されます。
適切な コンパクト IRIが存在せず、
compactToRelative オプションが true
である場合、
その IRIは、文書の
基底 IRIを使用して
相対 IRI 参照へ変換されます。
最後に、その IRIまたは
キーワードをなお圧縮できなかった場合、
それはそのまま返されます。
言語マッピングを考慮する場合、 方向マッピングも、 言語マッピングの有無にかかわらず 考慮され、 言語 マッピングは小文字に正規化されます。
このアルゴリズムが入力 IRIをそのまま返す場合で、 その IRIが アクティブコンテキスト内で コンパクト IRIと誤認され得る場合、 このアルゴリズムはエラーを発生させます。 これは、元の IRIの曖昧でない表現を返す方法がないためです。
このアルゴリズムは、2 つの必須入力と 3 つの任意入力を取ります。
必須入力は、active context、
および圧縮される var です。
任意入力は、var に関連付けられた value、
渡された var を
アクティブコンテキストの
語彙
マッピングを使用して圧縮すべきかを指定する vocab フラグ、
および
逆プロパティが圧縮されているかを指定する
reverse フラグです。
渡されない場合、value は null に設定され、
vocab と reverse はいずれも false に設定されます。
null である場合、null を返します。null の
逆コンテキストを持つ場合、
active context 内の
逆コンテキストを、
active context を使用して
逆コンテキスト作成アルゴリズムを呼び出した結果に設定します。
true であり、var が
inverse context の
エントリである場合:
null でない場合、
アクティブ
コンテキストの
デフォルト
言語と
デフォルト基底
方向を、アンダースコア("_")で区切って連結し、
小文字に正規化したものに設定します。
@none に設定します。
@preserve エントリを含む
マップである場合、
@preserve の値から最初の要素を value として使用します。
@language に、
type/language value を @null に初期化します。これら 2 つの
変数は、value と互換性があるものに基づいて、
用語について
優先される
type マッピングまたは
言語
マッピングを追跡します。
@index エントリを含む
マップであり、
かつ value が
グラフオブジェクトでない場合、
値 @index および @index@set を
containers に追加します。
true である場合、type/language を
@type に、type/language value を
@reverse に設定し、@set を containers に追加します。
@index が value 内の
エントリでない場合、
@list を containers に追加します。
@list
エントリに関連付けられた
配列に初期化します。
null に初期化します。
list が空である場合、common language を
default language に設定します。
@none に、
item type を @none に初期化します。
@value エントリを含む場合:
@direction エントリを含む場合、
item language を、
item の @language エントリ(存在する場合)と
item の @direction を、
アンダースコア("_")で区切って連結し、
小文字に正規化したものに設定します。
@language
エントリを含む場合、
item language をその関連付けられた値に設定し、
小文字に正規化します。
@type エントリを含む場合、
item type をその関連付けられた値に設定します。
@null に設定します。
@id に設定します。null である場合、
common language を item language に設定します。
@value エントリを含む場合、
リスト項目の言語が競合しているため、
common language を @none に設定します。
null である場合、
common type を item type に設定します。
@none に設定します。
@none であり、
common type が @none である場合、
リスト内の項目間に共通の言語または型が存在しないことが検出されたため、
リスト内の項目の処理を停止します。
null である場合、
common language を @none に設定します。
null である場合、
common type を @none に設定します。
@none でない場合、
type/language を @type に設定し、
type/language value を common type に設定します。
@index エントリを含む場合、
値 @graph@index および @graph@index@set を
containers に追加します。
@id エントリを含む場合、
値 @graph@id および @graph@id@set を
containers に追加します。
@graph、@graph@set、
および @set を
containers に追加します。
@index エントリを含まない場合、
値 @graph@index および @graph@index@set を
containers に追加します。
@id エントリを含まない場合、
値 @graph@id および @graph@id@set を
containers に追加します。
@index および @index@set を
containers に追加します。
@type に設定し、
type/language value を @id に設定します。
@direction
エントリを含み、
かつ @index エントリを含まない場合、
type/language value を、
value の @language
エントリ(存在する場合)と
value の @direction エントリを
アンダースコア("_")で区切って連結し、
小文字に正規化したものに設定します。
@language および @language@set を
containers に追加します。
@language
エントリを含み、
かつ @index エントリを含まない場合、
type/language value を
@language の値を小文字に正規化したものに設定し、
@language、
および @language@set を
containers に追加します。
@type エントリを含む場合、
type/language value を
その関連付けられた値に設定し、type/language を
@type に設定します。
@type に設定し、
type/language value を @id に設定し、
@id、@id@set、
@type、および @set@typeを
containers に追加します。
@set を containers に追加します。@none を containers に追加します。これは
コンテナマッピングが存在しないことを表し、
最も汎用的であるため、最後に確認される
コンテナマッピング値になります。
json-ld-1.0 でなく、かつ value が
マップでないか、
または @index エントリを含まない場合、
@index および @index@set を containers に追加します。
json-ld-1.0 でなく、
かつ value が @value
エントリのみを含む
マップである場合、
@language および @language@set を containers に追加します。
null である場合、
type/language value を @null に設定します。
これは、inverse context entry 内で
null 値が格納されるキーです。
@reverse である場合、
@reverse を preferred values に追加します。
@id または @reverse であり、
かつ value が @id
エントリを含む
マップである場合:
@none を、
この順序で preferred values に追加します。
value が、@list の値として空の
array を持つ
リストオブジェクトである場合、
type/language を @any に設定します。
@any を preferred values に追加します。"_")を持つエントリを含む場合、
そのエントリのアンダースコアから文字列末尾までの部分文字列を
preferred values に追加します。
null でない場合、term を返します。true であり、
active context が
語彙マッピングを持つ場合:
null に初期化します。この変数は、
作成された コンパクト
IRIがあれば、それを格納するために使用されます。
null である場合、
その IRI マッピングが
var と等しい場合、
その IRI マッピングが
var の先頭にある部分文字列でない場合、
または definition が
true の 接頭辞フラグを持たない場合、
definition のキーは
接頭辞として使用できません。
次の definition へ続けます。
:)、
および definition の
IRI
マッピングの値の後に続く
var の部分文字列を連結して、
candidate を初期化します。
null である場合、
candidate がより短い場合、
または同じ長さで辞書順で
compact IRI より小さく、
かつ candidate が active context 内に
用語
定義を持たない場合、または、その
用語
定義が
var と等しい
IRI
マッピングを持ち、
かつ value が null である場合、
compact IRI を
candidate に設定します。
null でない場合、compact IRI を返します。
true に設定している
アクティブコンテキスト内の
いずれかの用語と一致し、
かつ var が二重スラッシュ(//)で先行される
IRI オーソリティを持たない場合、
IRI confused with prefix
エラーが検出され、
処理は中止されます。
false である場合、
active context からの
基底 IRIが存在すればそれを使用して、
var を
相対 IRI 参照へ変換します。
展開は、JSON-LD 内のすべての値を 展開形式へ変換します。 このアルゴリズムはその逆の操作を行い、 値を 圧縮形式へ変換します。このアルゴリズムは、 与えられた アクティブコンテキスト内の 用語定義に従って値を圧縮します。 その用語定義は、その値に関連付けられた アクティブプロパティに関連付けられています。
この節は非規範的です。
圧縮する value は、@id または
@value エントリのいずれかを持ちます。
前者の場合、
アクティブプロパティの
type
マッピングが
@id または @vocab に設定されており、
value が @id
エントリのみから構成され、
かつ アクティブプロパティの
コンテナマッピングが
@index を含む場合は
@index エントリも含むなら、
@id エントリに関連付けられた値を
IRI
圧縮アルゴリズムで圧縮した結果を返すことで、
value は
文字列へ圧縮できます。
それ以外の場合、value は圧縮できず、そのまま返されます。
後者の場合、value を
@value エントリに関連付けられた値だけへ
圧縮できる可能性があります。
これは、アクティブプロパティが一致する
type マッピングまたは
言語マッピングを持ち、
かつ @index エントリがないか、または
アクティブプロパティの
コンテナマッピングが
@index を含む場合に可能です。また、
@value が value 内の唯一の
エントリであり
(アクティブプロパティの
コンテナマッピングが
@index を含む場合は @index
エントリを除く)、
かつ、その関連付けられた値が
文字列でないか、
デフォルト
言語がないか、または
アクティブプロパティについて明示的な
null の
言語
マッピングがある場合にも可能です。
このアルゴリズムには3 つの必須入力があります: active context、 active property、および圧縮される valueです。
null の
逆コンテキストを持つ場合、
active context 内の
逆コンテキストを、
active context を使用して
逆コンテキスト作成アルゴリズムを呼び出した結果に設定します。
@id エントリを持ち、
@index 以外の他の
エントリを持たない場合:
@id に設定されている場合、result を、
@id エントリに関連付けられた値を
IRI 圧縮し、
vocab に false を使用した結果に設定します。
@vocab に設定されている場合、result を、
@id エントリに関連付けられた値を
IRI
圧縮した結果に設定します。
@type
エントリを持ち、
その値が active property の
type
マッピングと一致する場合、
result を、value の @value エントリに関連付けられた値に設定します。
@none である場合、
または value が @type エントリを持ち、
かつ value 内の @type の値が
active property の
type マッピングと
一致しない場合、
値圧縮は無効化されているため、value をそのままにします。
@value エントリの値が
文字列でない場合:
@language エントリを持ち、
その値が language と正確に一致する場合
(それが null でない場合は
大文字小文字を区別しない比較を使用します)、
または language が null である場合に存在しない場合、
かつ value が @direction エントリを持ち、
その値が direction と正確に一致する場合
(それが null でない場合)、または direction が
null である場合に存在しない場合:
以下の節では、JSON-LD 文書を平坦化し、 ノードマップを作成し、空白ノードを生成するためのアルゴリズムを説明します。
このアルゴリズムは、ノードのすべての プロパティを単一の マップ に集め、すべての 空白ノードに 空白 ノード識別子を付与することで、展開済み JSON-LD 文書を平坦化します。 結果として得られるこの文書の一様な形は、特定のアプリケーションで JSON-LD データを処理するために必要なコードを大幅に簡素化する可能性があります。
この節は非規範的です。
まず、 ノードマップ生成アルゴリズムを使用して node map が生成されます。これは、ノードのすべての プロパティを単一の マップに集めます。 次の手順で、node map は 平坦化文書形式の JSON-LD 文書に変換されます。
このアルゴリズムは、1 つの必須入力変数と 1 つの任意入力変数を取ります。
必須入力は、平坦化する element です。
任意入力は
フラグであり、注記されている箇所で
マップエントリのキーを
辞書順に並べるために使用されます。
渡されない場合、
ordered フラグは
orderedfalse に設定されます。
このアルゴリズムは、 空白ノード識別子生成アルゴリズムを使用して、 新しい 空白ノード 識別子を生成し、 既存の 空白ノード 識別子にラベルを付け直します。 空白ノード識別子生成アルゴリズムは、 identifier map を維持します。 これは、ソース文書内の空白ノード識別子が、 衝突を避けながら新しい空白ノード識別子へ一貫して再マップされることを保証するためです。 したがって、このアルゴリズムを実行する前に、identifier map はリセットされます。
@default であり、その値は
空の マップです。
@default
エントリの値に初期化します。
これは
デフォルトグラフを表す
マップです。
@default でない場合、
ordered が true であれば
graph name の辞書順で並べ、
次の手順を実行します:
@id エントリからなる
マップに初期化します。
その値は graph name に設定されます。
@graph エントリを追加し、
それを空の 配列に
設定します。ordered が
true であれば
id の辞書順で並べ、
node の唯一の
エントリが
@id でない限り、
node を entry の @graph
エントリに追加します。
ordered が true
であれば
id の辞書順で並べ、
node の唯一の
エントリが
@id でない限り、
node を flattened に追加します。
このアルゴリズムは、渡された展開済み文書で表現されている
グラフおよび
ノードの索引付き表現を保持する
マップ
node map を作成します。
IRI によって一意に識別されていないすべての
ノードには、
(新しい)空白ノード識別子が割り当てられます。
結果として得られる node map は、文書内のすべてのグラフについて
マップエントリを持ち、
その値は、文書内で表現されているすべての
ノードについて
エントリを持つ別のオブジェクトです。
デフォルトグラフは @default
エントリの下に格納され、
その他のすべてのグラフはそれらの
グラフ名の下に格納されます。
この節は非規範的です。
このアルゴリズムは、展開済み JSON-LD 文書を再帰的に走査し、
ノードのすべての
エントリを
単一の マップに集めます。このアルゴリズムは、
マップ
node map を更新します。そのキーは文書内で使用される
グラフ名
を表し
(デフォルト
グラフは @default エントリの下に格納されます)、
その関連付けられた値は
マップです。
これは
グラフ内の
ノードを索引付けします。
エントリの
値が
ノード
オブジェクトである場合、
それは @id エントリのみからなる
ノードオブジェクトで置き換えられます。
ノードオブジェクトが
@id
エントリを持たない場合、
または
空白ノード
識別子で識別される場合、
新しい 空白ノード識別子が生成されます。この
空白ノード
識別子のラベル付け直しは、
プロパティおよび
@type の値に対しても行われます。
このアルゴリズムは、展開済み JSON-LD 文書 element と、
マップ
node map への参照を入力として取ります。さらに、任意パラメータとして
active graph(既定値は @default)、active subject、
active property、および マップ list への参照を持ちます。渡されない場合、
active subject、active property、および list は
null に設定されます。
null である場合、node を
null に設定し、そうでない場合は、
graph の active subject
エントリを
変数 subject node を使用して参照します。
@type
エントリ内の各
item について(存在する場合)、
または @type の値が存在し、かつ
配列でない場合は
@type の値について:
@value
エントリを持つ場合、次の手順を実行します:
null である場合:
@list
エントリに追加します。
@list
エントリを持つ場合、
次の手順を実行します:
@list からなる新しい
マップ
result を初期化します。その値は空の
配列に初期化されます。
@list エントリの値を element として、
node map、active graph、
active subject、active property、および
result を list として渡します。
null である場合、
result を subject node の
active property エントリの値に
追加します。
@list
エントリに
追加します。
@id
エントリを持つ場合、
id をその値に設定し、その
エントリを
element から削除します。
id が
空白ノード
識別子である場合、それを新しく
生成された空白ノード識別子で置き換えます。
その際、id を identifier として渡します。
null を identifier として渡します。
@id からなる
マップに初期化します。
その値は id です。
null でない場合、
次の手順を実行します:
@type
エントリを持つ場合、
その関連付けられた 配列の各項目を、
node の @type
エントリに関連付けられた
配列に追加します。
ただし、それがすでにその
配列内にある場合を除きます。最後に、
@type エントリを
element から削除します。
@index
エントリを持つ場合、
node の @index
エントリを
その値に設定します。node がすでに
異なる値を持つ @index
エントリを持つ場合、
conflicting indexes
エラーが検出され、処理は中止されます。それ以外の場合、
@index エントリを
element から削除して続行します。
@reverse
エントリを持つ場合:
@id
を持つ
マップ referenced
node を作成します。その値は id です。
@reverse
エントリの値に初期化します。
@reverse エントリを
element から削除します。
@graph
エントリを持つ場合、
このアルゴリズムを再帰的に呼び出し、
@graph エントリの値を element として、
node map、および id を active graph として渡します。
その後、
@graph エントリを element
から削除します。
@included
エントリを持つ場合、
このアルゴリズムを再帰的に呼び出し、@included
エントリの値を
element として、
node map、および active graph を渡します。
その後、@included エントリを element
から削除します。
このアルゴリズムは、 ノードマップ生成アルゴリズムを使用して作成された graph map に含まれるすべてのグラフを使用して、 主語から ノードへの新しいマップを作成し、 node map に含まれる各グラフ内で特定の 主語について定義された情報を含む、 マージされた ノード オブジェクトを作成します。
このアルゴリズムは、新しい 空白 ノード識別子を生成するため、または 新しい識別子の導入による衝突を避けるために、既存の 空白ノード識別子へ ラベルを付け直すために使用されます。
この節は非規範的です。
最も単純なケースは、渡された identifier について
identifier map 内にすでに
空白ノード識別子が存在する場合で、
その場合は単にそれが返されます。それ以外の場合、新しい
空白ノード識別子が
生成されます。渡された identifier が null でない場合、
identifier を
空白ノード
識別子に関連付けるエントリが
identifier map 内に作成されます。
このアルゴリズムは、null である可能性のある単一の入力変数
identifier を取ります。このアルゴリズムは、
既存の
空白
ノード識別子を新しい
空白ノード
識別子へラベル付け直しするため、
identifier map を維持します。
これは呼び出し元のアルゴリズムが初期化されるときにリセットされます。
null でなく、
identifier map 内にエントリを持つ場合、マップされた識別子を返します。
null でない場合、
identifier map 内に identifier 用の新しいエントリを作成し、
その値を新しい
空白ノード
識別子に設定します。
新しい 空白ノード
識別子を生成する方法の 1 つは、
カウンタを維持し、新しい識別子を生成するときにそれをインクリメントして、
_:b のような文字列に追加することです。
この節では、JSON-LD 文書を RDF データセットへデシリアライズするアルゴリズム、および その逆を説明します。このアルゴリズムは、マップ要素へのランダムアクセスを持つ インメモリ実装向けに設計されています。
このアルゴリズムは、JSON-LD 文書を RDF データセットへデシリアライズします。 RDF では、空白ノードを プロパティとして使用することは許可されませんが、 JSON-LD では許可される点に注意してください。したがって、既定では、 プロパティとして 空白ノードを含むことになった トリプルは、 JSON-LD を RDF として解釈する際に破棄されます。
プロパティにラベルを付けるために 空白ノード 識別子を使用することは廃止されており、 JSON-LD の将来バージョンで削除される可能性があります。
オプションが rdfDirectionnull でない場合、
i18n-datatype または compound-literal 形式から
変換するために特別な処理が使用されます。
実装は、トリプルおよび グラフ名として、 整形式のもののみを生成しなければなりません(MUST):
この節は非規範的です。
JSON-LD 文書は展開され、
ノードマップ生成アルゴリズムを使用して
node map に変換されます。
これにより、文書内で表現される各グラフを抽出して平坦化でき、
各
ノードオブジェクトを
処理しやすくなります。
node map からの各グラフは、トリプルを抽出するために処理され、
そこに任意の(デフォルトでない)グラフ名が適用されて
RDF
データセットが作成されます。
node map 内の各
ノードオブジェクトは、
主語に対応する
@id エントリを持ち、
その他の エントリは
述語を表します。
各 エントリ値は、
IRIまたは
空白ノード識別子のいずれかであるか、
トリプルを生成するために
RDF
リテラルへ変換できます。
リストは、
リストから RDF への変換アルゴリズムを使用して
RDF
コレクションへ変換されます。
このアルゴリズムは、
マップ node
map を取ります。
これは ノードマップ生成アルゴリズムの結果であり、
新しい グラフおよび
トリプルが
追加される
RDF
データセット dataset も取ります。
また、2 つの任意入力変数
および produceGeneralizedRdf を取ります。
rdfDirection オプションが
produceGeneralizedRdftrue に設定されていない限り、
空白ノードの
述語を含む
トリプルは出力から除外されます。
プロパティにラベルを付けるために
空白ノード
識別子を使用することは廃止されており、
JSON-LD の将来バージョンで削除される可能性があります。
一般化 RDF
データセットのサポートも同様であり、
したがって オプションも
削除される可能性があります。
produceGeneralizedRdf
@default である場合、
triples を dataset の
defaultGraph
属性の値に初期化します。
それ以外の場合、triples を空の RdfGraphとして初期化し、
その
add メソッドを使用して、
graphName に
graph name を指定して dataset に追加します。
@type である場合、
values 内の各
type について、
subject、predicate
の
rdf:type、および
object の
type から構成される新しい
RdfTripleを作成し、
type が
整形式でない場合を除き、
その add メソッドを使用して
triples に追加します。
produceGeneralizedRdf
オプションが true でない場合、
次の property-values ペアへ続けます。
produceGeneralizedRdf
オプションも削除される可能性があります。
このアルゴリズムは、
ノードオブジェクト、
リストオブジェクト、または
値オブジェクトを取り、
トリプルの
目的語として使用される
リソースへ変換します。
相対
IRI 参照を含む
ノードオブジェクトが
このアルゴリズムに渡された場合、null が返され、その結果生成される
トリプルは
無視されます。
入力が
リストオブジェクトである場合、
その入力から作成されたトリプルも返します。
この節は非規範的です。
値オブジェクトは、
§ 8.6 データの
往復変換で説明されているように
RDF リテラルへ
変換される一方、
ノード
オブジェクトは
IRI、
空白
ノード識別子、または null へ変換されます。
このアルゴリズムは 2 つの引数を取ります。item は、 値 オブジェクト、 リスト オブジェクト、または ノードオブジェクトのいずれかでなければならず(MUST)、 list triples は空の配列です。
@id
エントリの値が
整形式でない場合、
null を返します。
@id
エントリに関連付けられた
IRIまたは
空白ノード
識別子を返します。
@list
エントリに関連付けられた値と
list triples を渡して、
リスト変換アルゴリズムの結果を返します。
@value
エントリに
関連付けられた値に初期化します。
@type エントリに関連付けられた値に初期化し、
item がそのような
エントリを持たない場合は
null に初期化します。
null でなく、
かつ 整形式の
IRIでも
@json でもない場合、null を返します。
@language
エントリを持ち、
それが 整形式でない場合、
null を返します。
@json である場合、
value の
内部表現を JSON
へ変換した結果を使用して、
value を
正準字句形式へ変換し、
datatype を rdf:JSON に設定します。
true または
false である場合、value を
§ 8.6
データの往復変換で説明されている
正準字句
形式である
文字列
true または false に設定します。
datatype が null である場合、
datatype を xsd:boolean に設定します。
xsd:double と等しい場合、
value を [XMLSCHEMA11-2]
で定義され、
§ 8.6
データの往復変換で説明されている
xsd:double の
正準
字句形式の
文字列へ変換します。
datatype が null である場合、
datatype を xsd:double に設定します。
xsd:integer の
正準
字句形式の
文字列へ変換します。
datatype が null である場合、
datatype を xsd:integer に設定します。
null である場合、
item が @language
エントリを持つかどうかに応じて、
datatype を xsd:string または rdf:langString に設定します。
@direction
エントリを含み、
rdfDirection が null でない場合、
item は特別な規則を使用してシリアライズされる
値オブジェクトです。
@language の値を
小文字に正規化したもの、またはそのようなエントリがない場合は空文字列
("") に初期化します。
i18n-datatype または compound-literal の値を作成する場合、
相互運用性を向上させるため、値は小文字に正規化されます。
rdfDirection が
i18n-datatype である場合、
datatype を、language と item 内の
@direction の値をアンダースコア
("_") で区切って連結した結果を
https://www.w3.org/ns/i18n# に追加したものに設定します。
value と datatype を使用して、
literal を
RDF
リテラルとして初期化します。
@direction は @language なしで使用されることがあるため、
http://w3.org/ns/i18n#_ltr のように、
言語タグをエンコードしないデータ型
IRIを作成することは可能であり、正当です。
rdfDirection が
compound-literal である場合:
rdf:value を述語、item 内の @value の値を
目的語として使用して新しいトリプルを作成し、
それを list triples に追加します。
@language のエントリを持つ場合、
literal を主語、
rdf:language を述語、language を目的語として使用して
新しいトリプルを作成し、それを list triples に追加します。
rdf:direction を述語、item 内の
@direction の値を目的語として使用して新しいトリプルを作成し、
それを list triples に追加します。
@language エントリを持つ場合、
@language エントリに関連付けられた値を
literal の
言語タグとして追加します。
リスト変換とは、 リストオブジェクトを取り、 RDF Semantics [RDF11-MT] で定義される RDF コレクションへ 変換する処理です。
この節は非規範的です。
リストの各要素について、
新しい
空白ノード識別子が
割り当てられ、それを使用して rdf:first および
rdf:rest が生成されます。この
アルゴリズムはリストの先頭を返します。これは最初に割り当てられた
空白
ノード識別子、または
リストが
空である場合は rdf:nil です。リスト要素が
IRIを表す場合、
対応する rdf:first トリプルは省略されます。
このアルゴリズムは 2 つの入力を取ります: 配列 list と、 生成された トリプルを返すために使用される 空の 配列 list triples です。
rdf:nil を返します。null でない限り、
subject、rdf:first、および object から構成される
トリプルを
list triples に追加します。
rdf:nil に初期化します。
subject、
rdf:rest、および rest から構成される
トリプルを
list triples に追加します。
rdf:nil を返します。
このアルゴリズムは、 デフォルトグラフと 0 個以上の 名前付きグラフからなる RDF データセットを JSON-LD 文書へシリアライズします。
RDF 抽象構文では、 RDF リテラルは、 [RDF11-CONCEPTS] で定義される 字句形式を持ちます。これらの リテラルの形式は、これらのリテラルに基づいて JSON-LD 値を作成する際に使用されます。
この節は非規範的です。
データセット内の各グラフを反復処理し、各
RDF
コレクションを
リストへ変換し、
すべての
RDF リテラル、
IRI、
および 空白ノード
識別子について、展開形式の JSON-LD 文書を生成します。
useNativeTypes フラグが true に設定されている場合、
xsd:integer または xsd:double と等しい
データ型 IRIを持つ
RDF リテラルは
JSON
数値へ変換され、
xsd:boolean と等しい
データ型 IRIを持つ
RDF リテラルは、
§ 8.6 データの
往復変換で説明されているように、その
字句形式に基づいて
true または
false へ変換されます。
useRdfType フラグが true に設定されていない限り、
rdf:type 述語は、関連付けられた目的語が
IRIまたは
空白ノード
識別子のいずれかである限り、@type としてシリアライズされます。
オプションが rdfDirectionnull でない場合、
i18n-datatype または compound-literal 形式から
変換するために特別な処理が使用されます。
このアルゴリズムは 1 つの必須入力と 4 つの任意入力を取ります:
必須入力は
RDF
データセット dataset であり、
4 つの任意引数は、
フラグです。既定値は
orderedfalse で、注記されている箇所で
マップエントリのキーを
辞書順に並べるために使用されます。
は既定で
rdfDirectionnull、
useNativeTypes フラグは既定で false、
そして useRdfType フラグは既定で false です。
dataset は、
RdfDataset
内に含まれる
グラフおよび
グラフ名を
反復処理するために
iterableです。各
グラフも、
RdfGraph 内に
含まれる
トリプルを反復処理するために
iterableです。
@default からなる
マップに初期化します。その値は
default graph を参照します。
@default に初期化し、それ以外の場合は
graph に関連付けられた
グラフ名に初期化します。
@id を持つ新しい
マップに初期化します。
その値は name です。
@id
から構成されます。
rdfDirection オプションが
compound-literal であり、predicate が
rdf:direction である場合、
compound map 内に subject のエントリを追加し、その値を
true に設定します。
@id からなる
新しい マップに初期化します。
rdf:type と等しく、
useRdfType フラグが
true でなく、かつ object が
IRIまたは
空白
ノード識別子である場合、
object を node の @type
エントリの値に追加します。
ただし、そのような項目がすでに存在する場合を除きます。
そのような エントリが存在しない場合は、
それを作成し、object のみを含む
配列に初期化します。
最後に、次の
トリプルへ続けます。
rdfDirection、
および useNativeTypes を渡して
RDF からオブジェクトへの変換アルゴリズムを
使用した結果に value を初期化します。
rdf:nil である場合、
それは
RDF
コレクションの終端を表します:
false
に設定します。
node の値に初期化します。property の値に初期化します。value の値に初期化します。@id の値が
cl であるもの:
@id エントリを削除します。rdf:value エントリから取得した値を持つ
@value の
エントリを追加します。
rdf:language エントリから取得した値を持つ
@language の
エントリを追加します。
その値が [BCP47] の
section
2.2.9 に従って
整形式でない場合、
invalid language-tagged string
エラーが検出され、処理は中止されます。
rdf:direction エントリから取得した値を持つ
@direction の
エントリを追加します。
その値が "ltr" または "rtl" でない場合、
invalid base direction
エラーが検出され、処理は中止されます。
rdf:nil
エントリを持たない場合、
そのグラフには変換が必要なリストが含まれていないため、
次の name-graph object ペアへ続けます。
rdf:nil
エントリの値に初期化します。
usages エントリ内の各項目
usage について、次の手順を実行します:
node エントリの値の値に初期化し、
property を
usage の
property エントリの値に初期化し、
head を
usage の
value エントリ
の値に初期化します。
rdf:rest と等しく、
node の @id
エントリの値が
空白
ノード識別子であり、
node の
@id
エントリに関連付けられた
referenced
once の
エントリの値が
マップであり、
node が rdf:first および rdf:rest
エントリを持ち、
そのどちらの値も単一の要素からなる
配列であり、
かつ node が、値が
rdf:List と等しい単一の項目を持つ配列である任意の
@type
エントリ以外に
他の エントリを持たない間、
node は
整形式リストノードを表します。
リストをその先頭へ向けて逆向きにたどるため、次の手順を実行します:
rdf:first
エントリの唯一の項目を
list 配列に追加します。
@id
エントリの値を
list nodes 配列に追加します。
node の
@id
エントリに関連付けられた
referenced once の
エントリの値に
node usage を初期化します。
node エントリ
の値に設定し、property を
node usage の
property エントリの値に設定し、
head を
node usage の
value エントリ
の値に設定します。
@id
エントリが、
空白
ノード識別子ではなく
IRIである場合、
while ループを終了します。
@id エントリを
head から削除します。
@list
エントリを追加し、
その値を list
配列に初期化します。
ordered が true
である場合は
subject の辞書順で:
このアルゴリズムは、RDF リテラルを JSON-LD 値オブジェクトへ変換し、 RDF 空白 ノードまたは IRIを JSON-LD ノードオブジェクトへ変換します。
この節は非規範的です。
RDF リテラルは 値オブジェクトへ 変換される一方、 IRIおよび 空白 ノード識別子は ノード オブジェクトへ変換されます。
rdf:JSON データ型を持つリテラルは、
[JSON-LD11] の
JSON
データ型で定義された字句から値へのマッピングに基づく内部表現を使用し、
@type に @json を使用して、値オブジェクトへ変換されます。
オプションが
rdfDirectioni18n-datatype に設定されている場合、
https://www.w3.org/ns/i18n# で始まるデータ型を持つリテラルは、
そのデータ型から
言語
タグおよび
基底方向をデコードすることで、
値オブジェクトへ変換されます。
オプションが
rdfDirectioncompound-literal に設定されている場合、
rdf:direction を使用する空白ノードオブジェクトは、
rdf:value、rdf:language、および rdf:direction プロパティを
デコードすることで
値オブジェクトへ変換されます。
useNativeTypes フラグが true に設定されている場合、
xsd:integer または xsd:double と等しい
データ型 IRIを持つ
RDF リテラルは
JSON
数値へ変換され、
xsd:boolean と等しい
データ型 IRIを持つ
RDF リテラルは、
§ 8.6 データの
往復変換で説明されているように、その
字句形式に基づいて
true または
false へ変換されます。
このアルゴリズムは 3 つの必須入力を取ります:
マップへ変換される
value、
、
およびフラグ rdfDirectionuseNativeTypes です。
@id からなる
新しい マップを返します。
null に初期化しますuseNativeTypes が true である場合
xsd:string と等しい場合、
converted value を
value の
字句
形式に設定します。
xsd:boolean と等しい場合、
value の
字句
形式が true に一致するなら
converted value を true に設定し、
false に一致するなら false に設定します。
どちらにも一致しない場合は、
type を xsd:boolean に設定します。
xsd:integer または
xsd:double と等しく、かつその
字句
形式が [XMLSCHEMA11-2]
に従って
有効な xsd:integer または xsd:double である場合、
converted value を、
字句
形式を JSON
数値へ
変換した結果に設定します。
json-ld-1.0 でなく、
かつ value が
JSON
リテラルである場合、
converted value を、
value の字句値を
JSON-LD
内部表現へ変換した結果に設定し、
type を @json に設定します。
value の字句値が
[RFC8259]
の
JSON 文法に従って有効な JSON でない場合、
invalid JSON literal
エラーが検出され、処理は中止されます。
https://www.w3.org/ns/i18n# で始まり、
かつ rdfDirection が
i18n-datatype である場合:
"_") までの文字列接頭辞が空でない場合、
result に
@language の
エントリを追加し、
その値をその接頭辞に設定します。
@direction は
@language なしで使用されることがあるため、
http://w3.org/ns/i18n#_ltr のように、
言語タグをエンコードしないデータ型
IRIを
作成することは可能であり、正当です。
@direction の
エントリを追加し、
その値を、
アンダースコア ("_") に続く
フラグメント
識別子の部分文字列に設定します。
@language の
エントリを追加し、
その値を value の
言語タグに設定します。
xsd:string と等しい場合は無視されます。
@value の
エントリを追加し、
その値を converted value に設定します。
null でない場合、
result に @type の
エントリを追加し、
その値を type に設定します。
JSON-LD を RDF へデシリアライズする場合、
JSON ネイティブの
数値は、
その 数値が
非ゼロの小数部を持つかどうか(modulo-1 演算の結果)に応じて、
自動的に xsd:integer または xsd:double に型強制され、
ブール値 true および false は
xsd:boolean に強制され、
文字列は
xsd:string に強制されます。
JSON、数値、またはブール値そのものは、
正準字句形式、
すなわち [XMLSCHEMA11-2]
で定義される
決定論的な文字列表現へ変換されます。
整数、すなわち非ゼロの小数部を持たず、
かつ絶対値が 1021 未満である
数値、
または xsd:integer に強制された
数値の
正準字句
形式は、任意の先頭のマイナス記号を持つ有限長の 10 進数字
(0-9) の列です。先頭のゼロは禁止されます。
JavaScript では、実装者は整数を
正準字句
形式へ変換するために、次のコード断片を使用できます:
(value).toFixed(0).toString()
double、すなわち
非ゼロの小数部を持つか、絶対値が
1021 以上である
数値、
または xsd:double に強制された
数値の
正準字句
形式は、仮数部に文字 E が続き、その後に指数が続く形式です。
仮数部は 10 進数で、指数は整数です。指数内の先頭のゼロおよび
先頭のプラス記号 (+) は禁止されます。
指数がゼロである場合は E0 で示されます。
仮数部では、先頭の任意のプラス記号は禁止され、小数点は必須です。
先頭および末尾のゼロは禁止されますが、以下に従います:
数値表現は、小数点の左側にゼロでない単一の数字があり、
表される値がゼロでない限り、小数点の右側に少なくとも単一の数字があるように
正規化されなければなりません。
ゼロの正準表現は 0.0E0 です。
xsd:double の値空間は IEEE
倍精度 64 ビット浮動小数点型 [IEEE-754-2008]
によって定義されますが、
JSON 数値の値空間は
指定されていません。JSON-LD を RDF へデシリアライズする際、仮数部は小数点以下
15 桁に丸められます。JavaScript では、実装者は double を
正準字句
形式へ変換するために、次のコード断片を使用できます:
(value).toExponential(15).replace(/(\d)0*e\+?/,'$1E')
ブール値 true および false の
正準字句
形式は、文字列
true および false です。
JSON
リテラルの
正準字句形式は、
[RFC8259] の
JSON 形式へ
内部表現をシリアライズした結果です。
これは、[JSON-LD11] の
rdf:JSON データ型内の
値空間説明の制約に準拠します。
JSON ネイティブの
数値が
RDF へデシリアライズされる場合、
丸め誤差が発生する可能性があるため、損失のないデータ往復変換は保証できません。
RDF を JSON-LD としてシリアライズする場合にも、
同様の丸め誤差が発生する可能性があります。さらに、データ型または字句表現が失われる可能性があります。
たとえば、値が 2.0 の xsd:double は、
RDF から JSON-LD へ、そして RDF へ戻す変換時に、
正準字句形式で値が
2 の
xsd:integer になります。
実際には、xsd:integer の値空間は制限されていないため、
それを 数値へ
損失なく変換することは不可能な場合があることを強調することが重要です。
JSON 仕様 [RFC8259] も
数値の値空間を
制限していませんが、具体的な実装では通常、制限された値空間を持ちます。
損失のない往復変換を保証するため、
RDF を JSON-LD としてシリアライズするアルゴリズムは、
xsd:integer、xsd:double、または
xsd:boolean と等しい
データ型
IRIを持つ
RDF リテラルが
それらの JSON ネイティブ対応物へ変換されるかどうかを制御する
useNativeTypes フラグを指定します。
useNativeTypes フラグが
false に設定されている場合、すべてのリテラルは元の文字列表現のままです。
一部の JSON シリアライザ、たとえば一部のバージョンの PHP ネイティブ実装は、
スラッシュ文字をバックスラッシュでエスケープします。たとえば、値
http://example.com/ は http:\/\/example.com\/ としてシリアライズされます。
これは、他の JSON パーサがそれらのエスケープ文字を理解できない可能性があるため問題です。
JSON-LD ではスラッシュをバックスラッシュでエスケープする必要はありません。
JSON-LD プロセッサ間の相互運用性を支援するため、
スラッシュはバックスラッシュでエスケープしてはなりません(MUST
NOT)。
この API は、開発者が JSON-LD データを、扱いやすいことが多いさまざまな出力形式へ 変換できる明確な仕組みを提供します。
JSON-LD API は、さまざまな遅延操作の結果を表すために Promise を使用します。 Promise は [ECMASCRIPT] で定義されています。 仕様内での一般的な使用方法は [promises-guide] にあります。 実装は、同じメソッド、引数、オプションを一般に使用し、 同じ結果を返す限り、 ネイティブ環境に適した方法で実装を選択してもかまいません(MAY)。
インターフェイスには [Exposed=JsonLd] が付けられており、
これによりグローバルインターフェイスが作成されます。
JSON-LD における WebIDL の使用は、ブラウザ内での使用に適していますが、
そのような使用に限定されるものではありません。
JsonLdProcessor インターフェイスJsonLdProcessor
インターフェイスは、開発者が
JSON-LD 変換メソッドにアクセスするために使用する高レベルのプログラミング構造です。
実装は入力パラメータを変更しないことを強調しておくことが重要です。
エラーが検出された場合、Promise は、適切な
を持つ
codeJsonLdError により
reject され、処理は停止されます。
documentLoader
オプションが指定されている場合、それはリモート文書およびコンテキストを参照解決するために使用されます。
返された RemoteDocument
内の
は base IRI として使用され、
documentUrl
は HTTP Link Header を直接見る代わりに使用されます。簡潔さのため、
この文書内のいずれのアルゴリズムもこれを直接言及しません。
contextUrl
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>compact(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>expand(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); static Promise<JsonLdRecord>flatten(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>fromRdf(RdfDatasetinput, optionalJsonLdOptionsoptions = {}); static Promise<RdfDataset>toRdf(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); };
compact()
指定された input を、 圧縮アルゴリズムの手順に従って context を使用して 圧縮します:
最終出力は、compacted output から導出された
マップです。
compacted output が
配列である場合、
(別名化されている可能性のある)@graph のエントリとして含まれ、
その値は compacted output です。
それ以外の場合、compacted output が
マップ結果として使用されます。
context が null でない場合、
マップ結果に
@context エントリが追加されます。
Promise
promise を作成し、それを返します。
その後、以下の手順は遅延されます。
RemoteDocument である場合、
remote document を input に初期化します。
extractAllScripts オプションを
extractAllScripts として渡して、
LoadDocumentCallback を使用し、
それを remote document として await して参照解決します。
expand() メソッドを使用した結果に設定します。
その際、remote document、または
input 用の
remote document が存在しない場合は
input を使用し、
options を渡し、
ordered を
false に設定し、
extractAllScripts を既定で
false にします。
documentUrl
に設定し、そうでなければ
options からの
base オプションに設定します。
@context エントリを持つ
マップである場合、
context をその
エントリの値に設定し、
それ以外の場合は
context に設定します。
base オプションに設定します。
それ以外の場合で、
compactToRelative オプションが true
であれば、
利用可能な場合は現在処理中の文書の
IRI に設定し、
それ以外の場合は null に設定します。
null、
element として expanded input、
そして options からの
compactArrays
および ordered
フラグを使用します。
JsonLdOptions 型は
既定のオプション値を定義します。
expand()
指定された input を、 展開アルゴリズムの手順に従って 展開します:
Promise
promise を作成し、それを返します。
その後、以下の手順は遅延されます。
RemoteDocument である場合、
remote document を input に初期化します。
extractAllScripts オプションを
extractAllScripts として渡して、
LoadDocumentCallback を使用し、
それを remote document として await して参照解決します。
document
が 文字列である場合、
内部
表現へ変換します。
document を
内部
表現へ変換できない場合、
loading document failed エラーを渡して
promise を reject します。
documentUrl
に設定されます。
それ以外の場合は、options からの
base オプションに設定されます。
設定されている場合、options からの
base オプションは
base IRI を上書きします。
expandContext オプションが設定されている場合、
expandContext を local
context として、
そして active context からの
original
base URL を base URL として渡して、
コンテキスト処理アルゴリズムを使用して
active context を更新します。
expandContext が
@context エントリを持つ
マップである場合、
代わりにその
エントリの値を local
context として渡します。
contextUrl を持つ場合、
contextUrl を local
context として渡し、
contextUrl を base URL
として渡して、
コンテキスト処理アルゴリズムを使用して
active context を更新します。
document、または
remote document が存在しない場合は
input を element として、
active property として null、
利用可能な場合は
documentUrl を base URL
として、
そうでなければ options からの
base オプションを渡し、
そして options からの
frameExpansion
および and ordered
フラグを使用します。
JsonLdOptions 型は
既定のオプション値を定義します。
flatten()
指定された input を 平坦化し、任意で提供された context を使用して 圧縮し、 平坦化アルゴリズムの手順に従います:
Promise
promise を作成し、それを返します。
その後、以下の手順は遅延されます。
RemoteDocument である場合、
remote document を input に初期化します。
extractAllScripts オプションを
extractAllScripts として渡して、
LoadDocumentCallback を使用し、
それを remote document として await して参照解決します。
expand() メソッドを使用した結果に設定します。
その際、remote document、または
input 用の
remote document が存在しない場合は
input を使用し、
options を渡し、
ordered を
false に設定します。
ordered フラグを
options から渡します。
null の場合、結果は圧縮されず、展開形式のまま保持されます。
JsonLdOptions 型は
既定のオプション値を定義します。
fromRdf()
指定された input を、 RDF を JSON-LD としてシリアライズするアルゴリズムの 手順に従って、JSON-LD 文書へ 展開形式で 変換します:
このインターフェイスは、toRdf() メソッド以外に、
任意の入力から RdfDataset
を作成する手段を定義しません。
Promise
promise を作成し、それを返します。
その後、以下の手順は遅延されます。
JsonLdOptions 型は
既定のオプション値を定義します。
toRdf()
指定された input を、
JSON-LD を RDF へデシリアライズするアルゴリズムの
手順に従って
RdfDatasetへ変換します:
Promise
promise を作成し、それを返します。
その後、以下の手順は遅延されます。
expand() メソッドを使用した結果に設定します。
その際、input
および options を使用し、
ordered を
false に設定します。
RdfDataset dataset を作成します。produceGeneralizedRdf フラグを渡します。
produceGeneralizedRdf オプションも
削除される可能性があります。
JsonLdOptions 型は
既定のオプション値を定義します。
WebIDLtypedef record<USVString, any> JsonLdRecord;
JsonLdRecord は、
任意の マップ
エントリを含むために使用される
マップの定義です。
それらのエントリは、JSON Object
を解析した結果です。
WebIDLtypedef (JsonLdRecordor sequence<JsonLdRecord> or USVString orRemoteDocument)JsonLdInput;
JsonLdInput インターフェイスは、
次のいずれかである可能性のある入力値を参照するために使用されます:
JsonLdRecord、
JsonLdRecords の
sequence、
有効な JSON 文書を取得するために参照解決できる
IRIを表す
文字列、
またはすでに参照解決済みの RemoteDocument。
値が JsonLdRecord または
JsonLdRecords の sequence
である場合、
それらの値は等価な内部表現値として扱われます。
ここで、JsonLdRecord は
マップに相当し、
JsonLdRecords の sequence は
マップの
配列に相当します。
マップエントリは
[INFRA] におけるそれらの等価物へ変換されます。
WebIDLtypedef (JsonLdRecordor sequence<(JsonLdRecordor USVString)> or USVString)JsonLdContext;
JsonLdContext インターフェイスは、
次のいずれかである可能性のある値を参照するために使用されます:
JsonLdRecord、
JsonLdRecords の
sequence、
または有効な JSON 文書を取得するために参照解決できる
IRIを表す
文字列。
値が JsonLdRecord または
JsonLdRecords の sequence
である場合、
それらの値は等価な内部表現値として扱われます。
ここで、JsonLdRecord は
マップに相当し、
JsonLdRecords の sequence は
マップの
配列に相当します。
マップエントリは
[INFRA] におけるそれらの等価物へ変換されます。
RdfDataset インターフェイスは、
RDF
データセットに対する操作を記述します。
これは JsonLdProcessor インターフェイス内の
fromRdf()
および toRdf() メソッドによって使用されます。
このインターフェイスは、新しい
RDF
データセットを構築するために使用できます。
それは defaultGraph 属性を介してアクセス可能な
デフォルトグラフを持ちます。
WebIDL[Exposed=JsonLd] interfaceRdfDataset{constructor(); readonly attributeRdfGraphdefaultGraph; voidadd(USVString graphName,RdfGraphgraph); iterable<USVString?,RdfGraph>; };
add()RdfGraph
とそれに関連付けられた
グラフ名を
RdfDatasetに追加します。
JSON-LD を RDF へデシリアライズする
アルゴリズムによって使用されます。
graphName は
整形式の
IRI または
空白ノード
識別子でなければなりません(MUST)。
RdfDatasetに追加する
RdfGraph。
defaultGraphiterable
null(デフォルトグラフの場合)、
IRI、
または 空白ノード識別子であり、
graph は RdfGraph
インスタンスです。
RdfGraph インターフェイスは、
JsonLdProcessor
インターフェイス内の
fromRdf()
および toRdf() メソッドによって使用される
RDF
グラフに対する操作を記述します。
このインターフェイスは、新しい
RDF
グラフを構築するために使用できます。
これは 0 個以上の RdfTriple
インスタンスで構成されます。
WebIDL[Exposed=JsonLd] interfaceRdfGraph{constructor(); voidadd(RdfTripletriple); iterable<RdfTriple>; };
add()RdfTriple を
RdfGraphに追加します。
JSON-LD を RDF へデシリアライズする
アルゴリズムによって使用されます。
RdfGraphに追加する
RdfTriple。
iterable
RdfTriple
インスタンス上の
値イテレータです。
なお、特定の RdfTriple
インスタンスは、
特定の RdfDataset
インスタンス内の
複数のグラフに現れる可能性があります。
RdfTriple インターフェイスは
トリプルを記述します。
WebIDL[Exposed=JsonLd] interfaceRdfTriple{constructor(); readonly attribute USVStringsubject; readonly attribute USVStringpredicate; readonly attribute (USVString orRdfLiteral)_object; };
subjectpredicateobjectRdfLiteral インターフェイスは
RDF リテラルを記述します。
WebIDL[Exposed=JsonLd] interfaceRdfLiteral{constructor(); readonly attribute USVStringvalue; readonly attribute USVStringdatatype; readonly attribute USVString?language; };
valuedatatyperdf:langString の場合、
language は指定されなければなりません(MUST)。
languagedatatype は
rdf:langString でなければなりません(MUST)。
JsonLdOptions
型は、さまざまなオプションを
JsonLdProcessor
メソッドへ渡すために使用されます。
WebIDLdictionaryJsonLdOptions{ USVString?base= null; booleancompactArrays= true; booleancompactToRelative= true;LoadDocumentCallback?documentLoader= null; (JsonLdRecord? or USVString)expandContext= null; booleanextractAllScripts= false; booleanframeExpansion= false; booleanordered= false; USVStringprocessingMode= "json-ld-1.1"; booleanproduceGeneralizedRdf= true; USVString?rdfDirection= null; booleanuseNativeTypes= false; booleanuseRdfType= false; };
basecompactArraystrue に設定されている場合、JSON-LD プロセッサは
圧縮中に、要素が 1 つだけの配列をその要素で置き換えます。
false に設定されている場合、
要素が 1 つだけであっても、すべての配列は配列のままです。
compactToRelativebase オプションまたは文書の位置に対して相対的に
圧縮されるかどうかを決定します。
documentLoaderLoadDocumentCallback を実装します。
指定されている場合、リモート文書およびコンテキストを取得するために使用されます。
そうでなく指定されていない場合、プロセッサの組み込みローダが使用されます。
expandContextextractAllScriptstrue に設定されている場合、
HTML から JSON-LD
script elements を抽出するとき、
特定の フラグメント識別子が対象でない限り、
必要に応じて 配列形式を使用して、遭遇したすべての
JSON-LD script
elements を抽出します。
frameExpansionorderedtrue に設定されている場合、
指定された特定のアルゴリズム処理手順は辞書順に並べられます。
false の場合、処理において順序は考慮されません。
processingModejson-ld-1.0 または json-ld-1.1 に設定されている場合、
実装はこの仕様で定義されたアルゴリズムとまったく同じ結果を生成しなければなりません。
別の値に設定されている場合、
JSON-LD プロセッサは、アプリケーション固有の最適化を可能にするために、
この仕様で定義されたアルゴリズムを拡張または変更することが許可されます。
そのような最適化の定義はこの仕様の範囲外であり、したがって定義されません。
したがって、異なる実装は異なる最適化を実装する可能性があります。
開発者は json-ld で始まるモードを定義してはなりません。
これはこの仕様の将来バージョン用に予約されているためです。
produceGeneralizedRdftrue に設定されている場合、JSON-LD プロセッサは
トリプルの
述語として
空白ノードを
生成してもかまいません。
そうでない場合、それらは省略されます。
一般化 RDF
データセット
は [RDF11-CONCEPTS] で定義されます。
produceGeneralizedRdf オプションも
削除される可能性があります。
rdfDirectioni18n-datatype に設定されている場合、
https://www.w3.org/ns/i18n# に基づくデータ型
IRIを使用して
RDF
リテラルが生成されます。
そこには 言語タグ(存在する場合)
と 基底方向の両方が
エンコードされます。
RDF から変換する場合、このデータ型はデコードされ、
@language(存在する場合)および @direction を含む
値オブジェクトを作成します。
compound-literal に設定されている場合、
リテラルの代わりに
空白ノードが生成されます。
ここで、その空白ノードは rdf:value、rdf:direction、
および rdf:language(存在する場合)プロパティの主語です。
RDF から変換する場合、このオブジェクトはデコードされ、
@language(存在する場合)および @direction を含む
値オブジェクトを作成します。
useNativeTypes@type の必要を避けるために、
値オブジェクト内で
ネイティブ JSON 値を使用するようにします。
useRdfTyperdf:type プロパティを @type を使用するのではなく、
出力内で IRIとして保持させます。
API 実装の利用者は、リモート文書およびコンテキストがどのように取得されるかを制御するために、 コールバックを利用できます。 この節では、そのコールバックのパラメータと、 取得されたコンテキストを返すために使用されるデータ構造を詳述します。
LoadDocumentCallback は、
リモート文書およびコンテキストを取得するために使用されるカスタム文書ローダが実装しなければならない
コールバックを定義します。
このコールバックは、RemoteDocument に解決される
Promiseを返します。
失敗時には、適切なエラー codeを持つ
JsonLdError
により Promise が reject されます。
WebIDLcallbackLoadDocumentCallback= Promise<RemoteDocument> ( USVString url, optionalLoadDocumentOptions? options );
次のアルゴリズムは既定のコールバックを説明し、 コールバックの実装に対する要件を課します。
Promise
promise を作成し、それを返します。
その後、以下の手順は遅延されます。
application/ld+json を優先し、
その次に application/json を優先しなければなりません(MUST)。
requestProfile が設定されている場合、
それは application/ld+json 上の profile として追加されなければなりません(MUST)。
プロセッサは、[RFC6839] で定義される
+json 接尾辞を使用する他のメディア型を含めてもかまいません(MAY)。
303 "See Other" リダイレクトを除く)。
application/json でもなく、
[RFC6839] で定義される
+json 接尾辞を持ついずれのメディア型でもなく、
かつレスポンスが application/ld+json 型の
alternate リンク関係を使用する HTTP Link Header
[RFC8288] を持つ場合、
以前の url に対する相対的な関連付けられた href に
url を設定し、手順 2 から
アルゴリズムを再開します。
application/json
または [RFC6839] で定義される
+json 接尾辞を持つ任意のメディア型
(application/ld+json を除く)であり、
かつレスポンスが
http://www.w3.org/ns/json-ld#context リンク関係を使用する HTTP Link Header
[RFC8288] を持つ場合、
関連付けられた href を contextUrl に設定します。
http://www.w3.org/ns/json-ld#context
リンク関係を使用する HTTP Link Header が複数見つかった場合、
JsonLdError で
promise は reject され、その
は
codemultiple context link headers に設定され、
処理は終了されます。
プロセッサは document を 内部 表現へ変換してもかまいません(MAY)。
application/ld+json、
text/html、または application/xhtml+xml として提供される文書では、
HTTP Link Header は無視されます。
application/json、
application/ld+json、
または [RFC6839] で定義される
+json 接尾辞を使用するその他のメディア型のいずれでもありません。
loading document failed エラーを渡して
promise を reject します。
RemoteDocument remote document を作成します。
その際、url を documentUrl として、
document を document として、
返された Content-Type(パラメータなし)を
contentType として、
返された任意の profile パラメータ、または null を
profile として、
そして contextUrl、または null を
contextUrl として使用します。
documentLoader オプションを介して設定されるカスタム
LoadDocumentCallback は、
well-known コンテキスト文書のローカルキャッシュを維持するため、
またはアプリケーション固有の URL プロトコルを実装するために使用される可能性があります。
LoadDocumentOptions 型は、
さまざまなオプションを
LoadDocumentCallbackへ渡すために使用されます。
WebIDLdictionaryLoadDocumentOptions{ booleanextractAllScripts= false; USVStringprofile= null; (USVString or sequence<USVString>)requestProfile= null; };
extractAllScriptstrue に設定されている場合、
HTML から JSON-LD
script elements を抽出するとき、
特定の フラグメント
識別子が対象でない限り、
必要に応じて 配列形式を使用して、遭遇したすべての
JSON-LD script
elements を抽出します。
profilecontentType が text/html
または application/xhtml+xml である場合、
このオプションは JSON-LD
script elements を選択するために使用する
profile を決定します。requestProfileprofile パラメータとして使用する 1 つ以上の IRI。
([JSON-LD11] の
IANA Considerations を参照。)
RemoteDocument 型は、
リモート文書またはコンテキストに関する情報を返すために
LoadDocumentCallback
によって使用されます。
WebIDL[Exposed=JsonLd] interfaceRemoteDocument{constructor(); readonly attribute USVStringcontentType; readonly attribute USVStringcontextUrl; attribute anydocument; readonly attribute USVStringdocumentUrl; readonly attribute USVStringprofile; };
contentTypecontextUrlhttp://www.w3.org/ns/json-ld#context リンク関係を使用する
HTTP Link Header [RFC8288] の値。
レスポンスの Content-Type が
application/ld+json である場合、
HTTP Link Header は無視されます。
http://www.w3.org/ns/json-ld#context リンク関係を使用する HTTP Link Header が複数見つかった場合、
LoadDocumentCallback の
Promise は
JsonLdError
により reject され、
その code は
multiple context link headers に設定されます。
documentdocumentUrlprofilecontentType の一部として取得された
任意の profile パラメータの値。
この節では、HTML script 抽出をサポートする
documentLoader で利用可能な任意機能を説明します。
documentLoader の実装は、
HTML [HTML] 文書内に含まれる
script elementsから
JSON-LD を抽出することをサポートしてもかまいません(MAY)。
この節では、そのようなプロセッサの規範的な挙動を説明します。
そのようなプロセッサは
HTML script
extraction をサポートします。
この節は、HTML から JSON-LD を抽出することをサポートするために、
LoadDocumentCallback で指定されるアルゴリズムへの拡張を説明します。
手順 2 は、次を追加するよう更新されます:
HTML
script extraction をサポートするプロセッサは、
requestProfile が
http://www.w3.org/ns/json-ld#context でない限り、
任意の優先度レベルで text/html を含めなければならず(MUST)、
任意の優先度レベルで application/xhtml+xml を含めてもかまいません(MAY)。
手順 5 の後に、次の処理手順を追加します:
それ以外の場合で、取得されたリソースの
Content-Type が
text/html
または application/xhtml+xml のいずれかである場合:
そのような要素が見つからない場合、
または見つかった要素が JSON-LD script element でない場合、
promise は JsonLdError により reject され、
その は
codeloading document failed に設定され、
処理は終了されます。
profile
オプションが指定されている場合、
見つかれば、application/ld+json の
type
attributeと
profile オプションの値を持つ、
document 内の最初の
script
element の
textContent
を変換した結果を source に設定します。
extractAllScripts オプションが存在しない、または
false である場合、
document 内の最初の
JSON-LD script
element の
textContent
を source に設定します。
そのような要素が見つからない場合、
または見つかった要素が JSON-LD script element でない場合、
promise は JsonLdError により reject され、
その は
codeloading document failed に設定され、
処理は終了されます。
JsonLdError
により
promise を reject し、
処理は終了されます。
extractAllScripts オプションが存在しない、または
false である場合、
promise は JsonLdError により reject され、
その code は
loading document failed に設定され、
処理は終了されます。
extractAllScripts オプションは true です。
document を新しい空の
配列に設定します。
input 内の各
JSON-LD
script element について:
JsonLdError により
promise を reject し、
処理は終了されます。
このアルゴリズムは、
JSON-LD script
element のテキスト内容を、
マップまたは
マップの
配列へ抽出します。
JSON-LD script element は、
type attribute
が application/ld+json に設定された、HTML [HTML] 文書内の
script
elementです。
このアルゴリズムは 1 つの必須入力変数を取ります: source、すなわち HTML script element の textContentです。
invalid script element が検出されており、
処理は中止されます。
この節では、エラー処理のために JSON-LD API 内で使用される データ型定義について説明します。
JsonLdError 型は、
処理エラーを報告するために使用されます。
WebIDLdictionaryJsonLdError{JsonLdErrorCodecode; USVString?message= null; };
codemessageJsonLdErrorCode は、
有効な JSON-LD エラーコードの集合を表します。
WebIDLenumJsonLdErrorCode{ "colliding keywords", "conflicting indexes", "context overflow", "cyclic IRI mapping", "invalid @id value", "invalid @import value", "invalid @included value", "invalid @index value", "invalid @nest value", "invalid @prefix value", "invalid @propagate value", "invalid @protected value", "invalid @reverse value", "invalid @version value", "invalid base direction", "invalid base IRI", "invalid container mapping", "invalid context entry", "invalid context nullification", "invalid default language", "invalid IRI mapping", "invalid JSON literal", "invalid keyword alias", "invalid language map value", "invalid language mapping", "invalid language-tagged string", "invalid language-tagged value", "invalid local context", "invalid remote context", "invalid reverse property map", "invalid reverse property value", "invalid reverse property", "invalid scoped context", "invalid script element", "invalid set or list object", "invalid term definition", "invalid type mapping", "invalid type value", "invalid typed value", "invalid value object value", "invalid value object", "invalid vocab mapping", "IRI confused with prefix", "keyword redefinition", "loading document failed", "loading remote context failed", "multiple context link headers", "processing mode conflict", "protected term redefinition" };
colliding keywordsconflicting indexescontext overflow@context URL の最大数を超えました。cyclic IRI mapping
invalid @id value@id エントリに遭遇しました。
invalid @import value@import の無効な値が見つかりました。invalid @included valueinvalid @index value@index エントリに遭遇しました。
invalid @nest value@nest の無効な値が見つかりました。invalid @prefix value@prefix の無効な値が見つかりました。invalid @propagate value@propagate の無効な値が見つかりました。invalid @protected value@protected の無効な値が見つかりました。invalid @reverse value@reverse エントリの無効な値が検出されました。
すなわち、その値は マップではありませんでした。invalid @version value@version エントリが、
範囲外の値を持つ コンテキスト内で使用されました。invalid base direction@direction の値が "ltr"、
"rtl"、
または null でないため無効です。
invalid base IRI
null
でもありません。invalid container mapping@container エントリに遭遇しました:
@list,
@set,
@language,
@index,
@id,
@graph, or
@type.
invalid context entryinvalid context nullificationinvalid default languagenull でないため無効です。
invalid IRI mapping
invalid JSON literalinvalid keyword aliasinvalid language map valueinvalid language mapping@language エントリに遭遇しましたが、
その値は 文字列でも
null でもなく、したがって無効です。
invalid language-tagged stringinvalid language-tagged valuetrue、または false が検出されました。
invalid local contextinvalid remote contextinvalid reverse propertyinvalid reverse property map@context を除く
キーワードは
許可されません。
invalid reverse property valueinvalid scoped contextinvalid script elementinvalid set or list objectinvalid term definitioninvalid type mapping@type エントリに遭遇しましたが、
その値は IRIへ展開できませんでした。
invalid type value@type エントリの無効な値が検出されました。
すなわち、その値は 文字列でも
文字列の
配列でもありませんでした。
invalid typed valueinvalid value objectinvalid value object value@value エントリについて無効な値が検出されました。
すなわち、それは スカラーでも
null でもありません。
invalid vocab mappingnull
でもありません。IRI confused with prefix
keyword redefinitionloading document failedloading remote context failedmultiple context link headershttp://www.w3.org/ns/json-ld#context リンク関係を使用する
複数の HTTP Link Headers [RFC8288] が検出されました。processing mode conflictprotected term redefinition[JSON-LD11] の Security Considerations を参照してください。
[JSON-LD11] の Privacy Considerations を参照してください。
[JSON-LD11] の Internationalization Considerations を参照してください。
この節は非規範的です。
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>compact(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>expand(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); static Promise<JsonLdRecord>flatten(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>fromRdf(RdfDatasetinput, optionalJsonLdOptionsoptions = {}); static Promise<RdfDataset>toRdf(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); }; typedef record<USVString, any>JsonLdRecord; typedef (JsonLdRecordor sequence<JsonLdRecord> or USVString orRemoteDocument)JsonLdInput; typedef (JsonLdRecordor sequence<(JsonLdRecordor USVString)> or USVString)JsonLdContext; [Exposed=JsonLd] interfaceRdfDataset{constructor(); readonly attributeRdfGraphdefaultGraph; voidadd(USVString graphName,RdfGraphgraph); iterable<USVString?,RdfGraph>; }; [Exposed=JsonLd] interfaceRdfGraph{constructor(); voidadd(RdfTripletriple); iterable<RdfTriple>; }; [Exposed=JsonLd] interfaceRdfTriple{constructor(); readonly attribute USVStringsubject; readonly attribute USVStringpredicate; readonly attribute (USVString orRdfLiteral)_object; }; [Exposed=JsonLd] interfaceRdfLiteral{constructor(); readonly attribute USVStringvalue; readonly attribute USVStringdatatype; readonly attribute USVString?language; }; dictionaryJsonLdOptions{ USVString?base= null; booleancompactArrays= true; booleancompactToRelative= true;LoadDocumentCallback?documentLoader= null; (JsonLdRecord? or USVString)expandContext= null; booleanextractAllScripts= false; booleanframeExpansion= false; booleanordered= false; USVStringprocessingMode= "json-ld-1.1"; booleanproduceGeneralizedRdf= true; USVString?rdfDirection= null; booleanuseNativeTypes= false; booleanuseRdfType= false; }; callbackLoadDocumentCallback= Promise<RemoteDocument> ( USVString url, optionalLoadDocumentOptions? options ); dictionaryLoadDocumentOptions{ booleanextractAllScripts= false; USVStringprofile= null; (USVString or sequence<USVString>)requestProfile= null; }; [Exposed=JsonLd] interfaceRemoteDocument{constructor(); readonly attribute USVStringcontentType; readonly attribute USVStringcontextUrl; attribute anydocument; readonly attribute USVStringdocumentUrl; readonly attribute USVStringprofile; }; dictionaryJsonLdError{JsonLdErrorCodecode; USVString?message= null; }; enumJsonLdErrorCode{ "colliding keywords", "conflicting indexes", "context overflow", "cyclic IRI mapping", "invalid @id value", "invalid @import value", "invalid @included value", "invalid @index value", "invalid @nest value", "invalid @prefix value", "invalid @propagate value", "invalid @protected value", "invalid @reverse value", "invalid @version value", "invalid base direction", "invalid base IRI", "invalid container mapping", "invalid context entry", "invalid context nullification", "invalid default language", "invalid IRI mapping", "invalid JSON literal", "invalid keyword alias", "invalid language map value", "invalid language mapping", "invalid language-tagged string", "invalid language-tagged value", "invalid local context", "invalid remote context", "invalid reverse property map", "invalid reverse property value", "invalid reverse property", "invalid scoped context", "invalid script element", "invalid set or list object", "invalid term definition", "invalid type mapping", "invalid type value", "invalid typed value", "invalid value object value", "invalid value object", "invalid vocab mapping", "IRI confused with prefix", "keyword redefinition", "loading document failed", "loading remote context failed", "multiple context link headers", "processing mode conflict", "protected term redefinition" };
この節は非規範的です。
以下は、公開時点で未解決の課題の一覧です。
より簡潔な @prefix。
展開の概念である "key's term definition" は compact IRI キーでは不明確です。
RDF/JS Dataset interface(s) との関係。
展開は入れ子になったプロパティについて property-scoped contexts を考慮していません。
再帰的に入れ子になったプロパティと圧縮。
相対 IRI 圧縮。
この節は非規範的です。
frameExpansion フラグに基づく特別な
処理モードがあります。
そのコンテンツは、それ以外では有効な
JSON-LD
文書ではない可能性があります。
@context エントリを持つことができ、
それは、そのような 用語で識別される
プロパティの
値に使用されるコンテキストを定義します。このコンテキストは
展開アルゴリズムと
圧縮アルゴリズムの両方で使用されます。
@nest エントリを持つことができ、
これは、同じ @nest マッピングを使用する
プロパティを格納するために使用される
@nest へ展開される用語を識別します。展開時には、
@nest へ展開される
エントリの値は、
それらが囲んでいる
ノードオブジェクト内に直接含まれているかのように扱われます。
@container 値は、現在では @id および @type を含めることができ、
それぞれ id マップおよび
type マップに対応します。
@none 値を持つことができますが、
JSON-LD 1.0 では 文字列値のみが許可されていました。
これは @none 値を許可(かつ無視)するよう更新されました。
@container の値は、適切な任意の container キーワードと
@set(@list 以外)を含む
配列にもできます。
これにより、そのような
エントリ値が常に
配列形式で表現されることを保証できます。
compactToRelative オプションのサポートを追加し、
文書相対 IRI への IRI 圧縮(§ 6.2 IRI 圧縮)を無効化できるようにしました。true の @prefix
エントリを含む場合にのみ、
用語は コンパクト IRI接頭辞として使用されます。
1.0 アルゴリズムは、URI
gen-delim 文字で終わる値へマップされる用語のみを
考慮するよう更新されました。
@container に @graph を、
@id、@index、および @set とともに含めることを許可します。
展開アルゴリズムでは、これは
名前付きグラフを、
ノードオブジェクト、
または id マップもしくは
index マップ内の
エントリの値であるオブジェクトから作成するために使用されます。
圧縮アルゴリズムは、
特定形式の graph オブジェクトを
ノードオブジェクトの集合、または
ノード
オブジェクトのマップへ圧縮し戻すことを可能にします。
@none キーワード、またはその別名を使用するために用いられます。
展開
アルゴリズムは、この index 付けを透過的に削除します。
さらに、§ D. JSON-LD Community Group Final Report 以降の変更を参照してください。
この節は非規範的です。
false の
ordered
オプションを追加しています。これは、アルゴリズム内で
マップ
エントリキーの反復を制御するために使用されます。以前は、
アルゴリズムは常にそのような順序を要求していました。
テスト結果の評価に関する指示もそれに応じて更新されました。
@type または @type の別名の値は、
@container を @set に設定できるようになり、
@type エントリが常に配列として表現されることを保証できます。これはまた、
@type 用の用語を定義することも可能にします。その場合、値は
@container が @set に設定された
マップでなければなりません(MUST)。
:)を含むが
prefix が
用語でない場合に、
value が 形式上
IRIである場合のみ
value を返し、そうでなければアルゴリズムの残りへ進むようにしました。
produceGeneralizedRdf オプションも
削除される可能性があります。
text/html を入力として受け入れる API 手順を追加し、
具体的に対象指定された
script element、
最初に見つかった JSON-LD
script element、
またはすべての JSON-LD script
elementsを抽出できるようにしました。
RemoteDocument に
contentType フィールドを追加しました。
context overflow エラーに置き換えます。
"@type": "@none" のサポートを追加しました。
RemoteDocument
処理を、
HTML 処理のバリエーションを含めて
LoadDocumentCallbackへ統合しました。
@propagate
エントリを使用して制御できます。
@import エントリを含むことができ、
これにより JSON-LD 1.0 向けに元々作成されたコンテキストへ
JSON-LD 1.1 機能を追加できます。
colliding keywords エラーは @type については発行されません。
代わりに、展開時に @type の以前の値が任意の新しい値の前に付加されます。@vocab の可能な値として追加されました。
これが設定されている場合、エントリのような
語彙相対 IRI 参照は、
ノードオブジェクトの
base IRIおよび
語彙マッピングに対して、
文字列連結を使用して展開または圧縮されます。
LoadDocumentCallbackでは、取得されたコンテンツが
JSON メディア型のいずれでもなく、rel=alternate および
type=application/ld+json を持つ link header がある場合、
そのコンテンツへリダイレクトします。
@direction をサポートするよう更新されました。
json-ld-1.0 に設定されない限り、
暗黙に json-ld-1.1 になりました。"@"1*ALPHA)の形式を持つ用語および IRI を無視します。この節は非規範的です。
すべての変更は編集上のものであり、API の観測可能な挙動にも 期待されるテスト結果にも影響しません。
profile API オプションの使用として、
許可されるメディア型に application/xhtml+xml を追加しました。
i18n データ型または rdf:CompoundLiteral を作成する際、
実装間の相互運用性を向上させるため、
言語タグは小文字へ正規化されます。
JsonLdProcessor 処理手順へ移動しました。
null である
JsonLdOption 初期化子の一部を修正しました。
processingMode の既定値を
json-ld-1.1 に設定しました。
rdf:JSON リテラルの正規化に関する規範的テキストを削除し、
§ 8.6 データの
往復変換における
JSON リテラルの変換について、
構文文書の rdf:JSON データ型を参照するようにしました。
RemoteDocument
を直接入力として使用できるようにしました。
これは Promise 境界の問題を解決します。
この節は非規範的です。
すべての変更は編集上のものであり、API の観測可能な挙動にも 期待されるテスト結果にも影響しません。
true だけでなく @protected の任意のブール値を使用するようにしました。
@index エントリを持つ任意の値に @index を使用するようにしました。
null を渡すようにしました。
true を渡すようにしました。
false を渡すようにしました。
@set を探すようにしました。
@type を除外して次の手順に任せるようにしました。
これにより、ノードからの type 値がマージから漏れる可能性がありました。
false の値で使用します。
invalid container mapping の説明に、
@container の不足していた値を追加しました。
preserve キーワードを説明するために、
§ 1.4.2 構文
トークンとキーワードを追加しました。
この節は非規範的です。
[Exposed=(Window,Worker)] を [Exposed=JsonLd] に変更しました。
これはレビュー提案に対応するため、非ブラウザ利用向けに
JsonLdProcessor インターフェイスを
公開するグローバルインターフェイスとして宣言されています。
この節は非規範的です。
編集者は、この仕様の作成および編集に重要な貢献をした以下の個人に特別な謝意を表します:
さらに、公開時点で以下の人々が Working Group のメンバーでした:
メーリングリストや週次電話会議で多くの技術的課題に取り組んだ JSON-LD Community Group の参加者にも、多大な謝意を表します: 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.