Перейти к содержимому

Конвертировать JSON-LD в обрамленную форму — Numio

Перестраивает JSON-LD по фрейму с помощью jsonld.frame: узлы, соответствующие фрейму (например, по @type), становятся результатами верхнего уровня, а узлы, на которые они ссылаются, встраиваются в них.

Превратить плоский @graph в дерево с корнем в нужном приложению типе, например каждую Book со встроенной библиотекой.

JSON-LD

Frame

Framed

Когда пригодится

  • Превратить плоский @graph в дерево с корнем в нужном приложению типе, например каждую Book со встроенной библиотекой.
  • Выбрать из большого набора данных JSON-LD только узлы одного @type.

Как пользоваться

  1. Вставьте исходный документ в редактор JSON-LD.
  2. Напишите фрейм в редакторе Frame: @context плюс правила сопоставления, например "@type": "Book".
  3. Изучите результат; если совпадений больше одного, узлы перечисляются в @graph.

JSON-LD + фрейм

// 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"
    }
  ]
}

Подробности и ограничения

Здесь ссылки на узлы заменяются самими узлами: библиотека встроена в каждую книгу.

Узел, не соответствующий фрейму (библиотека), появляется только как встроенный объект, а не как отдельный результат.

Работает в браузере с jsonld.js с параметрами фрейминга по умолчанию; @embed, @explicit и подобные флаги можно задать в самом фрейме.

FAQ

Как вернуть только определённые свойства?

Добавьте во фрейм "@explicit": true и перечислите нужные свойства, каждое со значением {}.

Почему в результате есть ключ @graph?

Если фрейму соответствует больше одного узла, результаты возвращаются в @graph. Единственное совпадение возвращается как объект верхнего уровня.

Почему редактор Frame заранее заполнен контекстом schema.org?

Это пример страницы по умолчанию. Этот контекст — удалённый URL, который должен загрузить браузер; для работы офлайн замените его встроенным контекстом. Если загрузка не удалась, страница показывает ошибку с URL.

Спецификации и справка