JSON-LDをフレーム形式に変換 — Numio
jsonld.frame を使い、frame に従って JSON-LD を組み替えます。frame に一致するノード(例:@type で一致)がトップレベルの結果になり、それらが参照するノードは中に埋め込まれます。
フラットな @graph を、アプリが必要とする型をルートとするツリーにする。たとえばすべての Book に所属する library を埋め込む。
こんなときに使えます
- フラットな @graph を、アプリが必要とする型をルートとするツリーにする。たとえばすべての Book に所属する library を埋め込む。
- 大きな JSON-LD データセットから特定の @type のノードだけを選び出す。
使い方
- 元のドキュメントを JSON-LD エディターに貼り付けます。
- Frame エディターに frame を書きます:@context と、"@type": "Book" のようなマッチング条件です。
- 結果を確認します。複数のノードが一致した場合は @graph に並びます。
JSON-LD + frame
// JSON-LD editor
{
"@context": {"@vocab": "http://schema.org/"},
"@graph": [
{"@id": "http://example.org/lib", "name": "City Library"},
{"@id": "http://example.org/b1", "@type": "Book", "name": "Dune",
"holdingArchive": {"@id": "http://example.org/lib"}},
{"@id": "http://example.org/b2", "@type": "Book", "name": "Emma",
"holdingArchive": {"@id": "http://example.org/lib"}}
]
}
// Frame editor
{"@context": {"@vocab": "http://schema.org/"}, "@type": "Book"}フレーム化した JSON-LD
{
"@context": {
"@vocab": "http://schema.org/"
},
"@graph": [
{
"@id": "http://example.org/b1",
"@type": "Book",
"holdingArchive": {
"@id": "http://example.org/lib",
"name": "City Library"
},
"name": "Dune"
},
{
"@id": "http://example.org/b2",
"@type": "Book",
"holdingArchive": {
"@id": "http://example.org/lib",
"name": "City Library"
},
"name": "Emma"
}
]
}仕様と制限
ここではノード参照が参照先のノードに置き換わり、library が各 book に埋め込まれます。
frame に一致しないノード(library)は埋め込みオブジェクトとしてのみ現れ、独立した結果にはなりません。
jsonld.js のデフォルトのフレーミングオプションでブラウザ内で実行されます。@embed、@explicit などのフラグは frame の中で指定できます。
FAQ
特定のプロパティだけを返すには?
frame に "@explicit": true を追加し、必要なプロパティをそれぞれ値 {} で列挙します。
結果に @graph キーがあるのはなぜですか?
frame に一致するノードが複数あると、結果は @graph に入って返されます。一致が 1 つならトップレベルのオブジェクトとして返されます。
Frame エディターに schema.org の context が最初から入っているのはなぜですか?
ページのデフォルトの例だからです。この context はブラウザがダウンロードする必要のあるリモート URL です。オフラインで使うならインラインの context に置き換えてください。ダウンロードに失敗すると、その URL を含むエラーが表示されます。