本文へスキップ

JSON-LDをフレーム形式に変換 — Numio

jsonld.frame を使い、frame に従って JSON-LD を組み替えます。frame に一致するノード(例:@type で一致)がトップレベルの結果になり、それらが参照するノードは中に埋め込まれます。

フラットな @graph を、アプリが必要とする型をルートとするツリーにする。たとえばすべての Book に所属する library を埋め込む。

JSON-LD

Frame

Framed

こんなときに使えます

  • フラットな @graph を、アプリが必要とする型をルートとするツリーにする。たとえばすべての Book に所属する library を埋め込む。
  • 大きな JSON-LD データセットから特定の @type のノードだけを選び出す。

使い方

  1. 元のドキュメントを JSON-LD エディターに貼り付けます。
  2. Frame エディターに frame を書きます:@context と、"@type": "Book" のようなマッチング条件です。
  3. 結果を確認します。複数のノードが一致した場合は @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 を含むエラーが表示されます。

仕様を確認する