Конвертировать JSON-LD в обрамленную форму — Numio
Перестраивает JSON-LD по фрейму с помощью jsonld.frame: узлы, соответствующие фрейму (например, по @type), становятся результатами верхнего уровня, а узлы, на которые они ссылаются, встраиваются в них.
Превратить плоский @graph в дерево с корнем в нужном приложению типе, например каждую Book со встроенной библиотекой.
Когда пригодится
- Превратить плоский @graph в дерево с корнем в нужном приложению типе, например каждую Book со встроенной библиотекой.
- Выбрать из большого набора данных JSON-LD только узлы одного @type.
Как пользоваться
- Вставьте исходный документ в редактор JSON-LD.
- Напишите фрейм в редакторе Frame: @context плюс правила сопоставления, например "@type": "Book".
- Изучите результат; если совпадений больше одного, узлы перечисляются в @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.