В JSON-LD можно ли расширить контекст?

У меня есть документ JSON-LD.

{
  "@id": "VDWW1LL3MZ",
  "first_name": "Vincent",
  "last_name": "Willems",
  "knows":["MartyP"],
  "@context": {
    "foaf": "http://xmlns.com/foaf/0.1/",
    "first_name": "foaf:givenName",
    "last_name": "foaf:familyName",
    "knows": "foaf:knows",
    "MartyP": { 
      "@id": "http://example.com/martyp",
      "first_name": "Marty",
      "last_name": "P"
    }
  }
}

Теперь часть контекста этого документа создается во время выполнения (объект Marty P), но определение префикса foaf является статическим и повторяется для каждого документа.

Если у меня есть около 10 определений префиксов, было бы расточительно помещать их в каждый документ. Поэтому я хотел бы сделать что-то вроде

generated document:

{
  "@id": "VDWW1LL3MZ",
  "first_name": "Vincent",
  "last_name": "Willems",
  "knows":["MartyP"],
  "@context": {
    "@extends": "http://example.com/base_context.jsonld",
    "MartyP": { 
      "@id": "http://example.com/martyp",
      "first_name": "Marty",
      "last_name": "P"
    }
  }
}

base_context.jsonld:

  {
    "foaf": "http://xmlns.com/foaf/0.1/",
    "first_name": "foaf:givenName",
    "last_name": "foaf:familyName",
    "knows": "foaf:knows"
  }

Это возможно?


person Maarten    schedule 07.10.2014    source источник
comment
Кстати, ресурс MartyP не должен находиться внутри @context. Контекст служит только для преобразования ключей и значений JSON в URI. Вместо этого объект MartyP должен быть целым внутри массива knows. Пожалуйста, поэкспериментируйте с игровой площадкой JSON-LD, чтобы освоить ее.   -  person Tomasz Pluskiewicz    schedule 07.10.2014


Ответы (1)


Каждый @context на самом деле может быть несколькими объектами (или URL-адресами), которые затем объединяются в порядке их появления (чтобы можно было изменить значение терминов - осторожно).

Для этого вы используете массив, где вы можете смешивать локальный и внешний контексты. Вот ваш пример

{
  "@context": 
  [
    "http://example.com/base_context.jsonld",
    {
      "@vocab": "http://example.com/"
    }
  ]
}

Это описано в разделе 6.7 спецификаций JSON-LD.

person Tomasz Pluskiewicz    schedule 07.10.2014