Определить контекст JSON-LD @для объединения / разделения значений?
Я хотел бы использовать методы expand
и compact
из jsonld.библиотека js для перевода данных из различных источников в общий формат обработки. Если я беру исходный документ JSON, добавляю к нему @context
, а затем передаю его через метод expand
, я могу получить общий формат, который мне нужен.
Вариант использования, для которого я не смог найти решение, - это когда нужно объединить несколько значений. Например, schema.org определяет PostalAddress
с одним полем для streetAddress
, но многие системы хранят адрес улицы в виде отдельных значений (номер улицы, название улицы, направление улицы...). Для перевода входящих данных в schema.org формат мне нужен способ указать в моем @context
, что несколько полей составляют streetAddress
, в правильном порядке.
Сжатый Документ
{
"@context": {
"displaName": "http://schema.org/name",
"website": "http://schema.org/homepage",
"icon": "http://schema.org/image",
"streetNumber": "http://schema.org/streetAddress"
},
"displaName": "John Doe",
"website": "http://example.com/",
"icon": "http://example.com/images/test.png",
"streetNumber": "123",
"streetName": "Main St",
"streetDirection": "South"
}
Расширенный Документ
{
"http://schema.org/name":[
{
"@value":"John Doe"
}
],
"http://schema.org/image":[
{
"@value":"http://example.com/images/test.png"
}
],
"http://schema.org/streetAddress":[
{
"@value":"123"
}
],
"http://schema.org/homepage":[
{
"@value":"http://example.com/"
}
]
}
Я просмотрел все спецификации JSON-LD, которые мне удалось найти, и не смог найти ничего, что указывало бы на способ разделения или объединения значений с помощью @context
.
Известно ли кому-нибудь о способе отображения нескольких значений в одно свойство контекста в правильном порядке и, возможно, добавления пробелов между значениями. Мне также нужно найти решение для обратного сценария, где мне нужно разделить одно поле на несколько значений в правильном порядке.
Примечание: даже если я сопоставлю все три свойства с streetAddress
, все значения будут включены в массив, но нет никакой гарантии, что они будут в правильный порядок.
2 ответа:
Один из возможных способов добиться этого-использовать для вашего адреса одно поле массива, содержащее упорядоченные компоненты адреса (т. е.
["number", "direction", "name"]
). Затем в@context
можно указатьaddress
с@container: @list
, что обеспечит правильный порядок компонентов адреса.Таким образом, сжатый документ будет:
{ "@context": { "displaName": "http://schema.org/name", "website": "http://schema.org/homepage", "icon": "http://schema.org/image", "address": { "@id": "http://schema.org/streetAddress", "@container": "@list" } }, "displaName": "John Doe", "website": "http://example.com/", "icon": "http://example.com/images/test.png", "address": ["123", "South", "Main St"] }
И расширенная будет
{ "http://schema.org/streetAddress": [ { "@list": [ { "@value": "123" }, { "@value": "South" }, { "@value": "Main St" } ] } ], "http://schema.org/name": [ { "@value": "John Doe" } ], "http://schema.org/image": [ { "@value": "http://example.com/images/test.png" } ], "http://schema.org/homepage": [ { "@value": "http://example.com/" } ] }