JSON-LD не может определять несколько типов узлов в @context - PullRequest
1 голос
/ 05 июля 2019

В документации типов JSON-LD четко указано, что вы можете определить несколько типов для узла. https://www.w3.org/TR/json-ld11/#specifying-the-type Если вы откроете пример # 14 из приведенного выше URL-адреса на игровой площадке JSON-LD , вы увидите, что это допустимый синтаксис.

{
    "@id": "http://me.markus-lanthaler.com/",
    "@type": [
      "http://schema.org/Person",
      "http://xmlns.com/foaf/0.1/Person"
    ]
}

Однако, если вы попытаетесь переместить это определение в @context и применить его к определенному свойству, вы получите сообщение об ошибке от анализатора. Проверьте это здесь .

{
  "@context": {
    "some_property": {
      "@id": "http://me.markus-lanthaler.com/",
      "@type": [
        "http://schema.org/Person",
        "http://xmlns.com/foaf/0.1/Person"
      ]
    }
  },
  "some_property": "value"
}

Отображаемая ошибка: jsonld.SyntaxError: неверный синтаксис JSON-LD; значение @context @type должно быть строкой.

Я внимательно прочитал документацию и там сказано, что вы можете определить несколько типов для типов узлов, но не для объектов-значений. Документация ясно говорит, что когда @value и @type используются в одном словаре, ключевое слово @type выражает тип значения. В противном случае ключевое слово @type выражает тип узла. Но здесь - еще один пример, показывающий, что это может быть не так.

Кто-нибудь знает, как определить несколько типов узлов в @context?

1 Ответ

1 голос
/ 05 июля 2019

Вы не можете, потому что вы вообще не можете определять типы узлов в контексте.

Начиная нормативно.В https://www.w3.org/TR/json-ld11/#context-definitions мы читаем:

Если расширенное определение термина содержит ключевое слово @type, его значение ДОЛЖНО быть абсолютным IRI, компактным IRI, термином, нулем или одним изключевые слова @id, @json, @none или @ vocab.

Массивы здесь запрещены.Потому что @type в расширенном определении термина в контексте используется для указания типа значений определенного свойства.Как уже упоминалось, например.в https://www.w3.org/TR/json-ld11/#typed-values:

Типизированные значения могут быть выражены в JSON-LD тремя способами:

  1. Используя ключевое слово @type при определении термина в секции @context.

Наконец, давайте посмотрим, что расширяет ваш пример, если мы исправим его, чтобы получить строковое значение для @type.

{
  "@context": {
    "some_property": {
      "@id": "http://me.markus-lanthaler.com/",
      "@type": "http://schema.org/Person"
    }
  },
  "some_property": "value"
}

расширяется до

[
  {
    "http://me.markus-lanthaler.com/": [
      {
        "@type": "http://schema.org/Person",
        "@value": "value"
      }
    ]
  }
]

Как видите, у вас действительно есть @value и @type вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...