Добавление пользовательских свойств в существующий тип в JSON-LD - PullRequest
0 голосов
/ 11 ноября 2018

Я исследую использование JSON-LD и Hydra для использования в качестве полезной нагрузки API. Это выглядит многообещающе, но я борюсь с одной вещью - как расширить предопределенные типы.

Например, у меня есть пользователи. Кажется разумным моделировать их как "@type": "http://schema.org/Person", поскольку пользователи - это люди. Но я также хочу иметь некоторые свойства для моих пользователей, которые не определены для этого типа - например, информация об учетной записи пользователя.

Я знаю, что могу предоставить ресурсу несколько типов, поэтому я могу определить свой собственный словарь, который определяет тип «пользователя», обладающего этой информацией, но является ли правильный способ достичь этого? Или есть лучший способ использовать JSON-LD для достижения этой цели?

1 Ответ

0 голосов
/ 11 ноября 2018

В общем, есть четыре способа, как это можно сделать:

  • Для типов (или классов):
    • Добавить тип. Чтобы передать, что schema:Person вымышленный, вы можете добавить тип ex:FictionalThing к этому объекту.
    • Вместо этого используйте подтип. Чтобы передать, что schema:Person вымышленный, вы можете определить ex:FictionalPerson как подтип из schema:Person, и только ¹ используйте ex:FictionalPerson.
  • Для свойств:
    • Добавить свойство. Чтобы указать псевдоним для schema:Person, вы можете добавить свойство ex:nickname
    • Вместо этого используйте подчиненное свойство. Вы можете определить ex:nickname как вспомогательное свойство из schema:additionalName и только¹ использовать ex:nickname

Хорошей практикой является повторное использование существующих типов / свойств RDF . Если нет подходящего термина / словаря, определите свой .


В вашем конкретном случае мне кажется, что вам нужен тип для представления учетной записи пользователя, так как schema:Person может иметь несколько учетных записей, и, вероятно, нет пользовательских данных, которые соответствуют действительности для всех учетных записей этого человека. , Таким образом, вы можете рассмотреть возможность использования объекта для представления учетной записи пользователя и свойства для подключения такой учетной записи с schema:Person.

Вы можете, например, использовать свойство foaf:account, чтобы добавить foaf:OnlineAccount к schema:Person:

{
  "@context": "http://www.w3.org/2013/json-ld-context/rdfa11",

  "@type": "schema:Person",
  "schema:name": "Name of the person",

  "foaf:account": {
    "@type": "foaf:OnlineAccount",
    "schema:name": "Name of the online account"
  }
}

¹ Или используйте его в дополнение к супер-типу / супер-свойству, что обычно является хорошей идеей, если вы хотите поддержать потребителей, которые сначала не читают ваш собственный словарь.

² Для этого вам не нужно добавлять другой тип рядом с schema:Person, поскольку вы можете свободно смешивать типы и свойства из разных словарей. Также обратите внимание, что вы можете определить домен и диапазон свойства, что позволяет вам "неявно" добавлять типы к ссылочным / ссылочным объектам. В приведенном выше примере потребитель, который знает словарь FOAF, добавит тип foaf:Agent к праву с типом schema:Person, поскольку это домен свойства foaf:account.

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