Ответ 1
Я разместил вопрос в репозитории jsonld.js Github. Согласно @dlongley, оригинальному создателю библиотеки jsonld.js, невозможно управлять свойствами в этой усадьбе, используя стандартный JSON-LD.
Я хотел бы использовать методы expand
и compact
библиотеки jsonld.js для перевода данных из разных источников в общий формат обработки, Если я возьму исходный JSON-документ, добавьте @context
к нему, а затем передайте его через метод expand
, который я могу получить в общем формате, который мне нужен.
Вариант использования, с которым я не смог найти решение, - это когда нужно объединить несколько значений. Например, schema.org определяет a 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
, все значения будут включены в массив, но нет гарантии, что они будут в правильном порядке.
Я разместил вопрос в репозитории jsonld.js Github. Согласно @dlongley, оригинальному создателю библиотеки jsonld.js, невозможно управлять свойствами в этой усадьбе, используя стандартный JSON-LD.
Одним из возможных способов достижения этого является использование одного поля массива для вашего адреса, содержащего упорядоченные компоненты адреса (т.е. ["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/"
}
]
}