2015-10-21 6 views
12

Я хотел бы использовать методы expand и compact библиотеки jsonld.js для перевода данных из разных источников в общий формат обработки. Если я возьму исходный JSON-документ, добавьте к нему @context, а затем передайте его через метод expand, который я могу получить в общем формате, который мне нужен.Определить JSON-LD @context для объединения/разделения значений?

Вариант использования, в котором я не смог найти решение, - это когда нужно объединить несколько значений. Например, 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" 
} 

Expanded Документ

{ 
    "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, значения будут включены в массив, но нет гарантии, что они будут в правильном порядке.

ответ

0

Я отправил вопрос на jsonld.js Github репозиторий. Согласно @dlongley, оригинальному создателю библиотеки jsonld.js, невозможно управлять свойствами в этой усадьбе, используя стандартный JSON-LD.

https://github.com/digitalbazaar/jsonld.js/issues/115

3

Одним из возможных способов достижения этого является использование одного поля массива для вашего адреса, содержащего упорядоченные адресные компоненты (то есть ["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/" 
     } 
    ] 
    } 
+0

благодарит за ответ. К сожалению, мне нужно сохранить исходный документ в такт. Цель вопроса - найти способ обработки перевода с использованием контекста, предполагая, что я не тот, который предоставляет входные данные. –

+0

Хорошо, я вижу, извините за недоразумение. Я мог бы знать по-другому, позвольте мне проверить. Даже если поля должны быть оставлены нетронутыми, вы имеете полный контроль над '@ context'? – Val

+0

Да. Я пытаюсь создать способ разрешить пользователям отображать выходы API в общий формат.У меня уже есть рабочий интерфейс, позволяющий сопоставлять один к одному, но не смог понять из документации json-ld-процессора, как манипулировать данными в исходном документе, помимо сопоставления ключей с их соответствующим лексиконом. –

 Смежные вопросы

  • Нет связанных вопросов^_^