Использование HAL Vocab с JSON-LD

Мне было интересно, есть ли способ использовать концепции HAL с JSON-LD?

У меня есть текущий документ jsonld:

{
    "@context": {
        "hal": "http://stateless.co/hal#",
        "schema": "http://schema.org",
        "_links": {
            "@id": "hal:link",
            "@container": "@index"
        }
    },
    "@type": ["schema:Person", "hal:Resource"],
    "name": "Jon Snow",
    "_links": {
        "self": {
            "href": "/users/123"
        }
    }
}

но я не уверен, как определить, что href имеет @type из @id, и так далее...

Есть ли способ определить HAL Vocab на основе RDF(S) и импортировать его как-то в @context моих документов jsonld, или я должен сделать что-то еще?
(Я пытаюсь описать гиперссылки с различными свойствами, такими как отношение ссылок, метод HTTP, принятый тип мультимедиа, язык, шаблон IRI, поля ввода и т. Д., Поэтому @id типа не хватает для описания ссылок.)

2 ответа

Решение

Как уже предположил Томаш, вам следует подумать об использовании Hydra, поскольку она делает более или менее то, что вы хотите. Пример, который вы включили в свои вопросы, выглядел бы примерно так с использованием Hydra и JSON-LD:

{
    "@context": {
        "schema": "http://schema.org",
        "ex": "http://example.com/myvocab#"
    },
    "@id": "/users/123",
    "@type": [ "schema:Person", "hydra:Resource" ],
    "name": "Jon Snow",
    "ex:link": { "@id": "/another-resource" }        
}

Поскольку нет необходимости в ссылке на себя (@id уже указывает, что явно), я добавил еще одну ссылку, ex:link, Его связь ссылка, следовательно, http://example.com/myvocab#link и его "HREF" является /another-resource, Если вам нужно описать эту ссылку / свойство более подробно, вы можете сделать это, создав документ, который определяет его точно так же, как описаны другие вещи (как уже объяснил Томаш):

{
    "@context": {
        "ex": "http://example.com/myvocab#",
        "hydra": "http://www.w3.org/ns/hydra#"
    },
    "@id": "ex:link",
    "@type": "hydra:Link",
    "hydra:title": "My new link relation",
    "hydra:supportedOperation": [
       {
         "@type": "hydra:Operation",
         "hydra:method": "POST",
         "hydra:expects": ....
       }
    ]       
}

Что касается вашего комментария

Btw. Я более или менее знаком с вокабом Hydra, но мне не нравится идея сопоставлять ресурсы с реальными классами и объектами на языке сервера и автоматически преобразовывать параметры операций в эти объекты. Возможно, можно использовать Hydra Vocab по-другому, но у меня нет времени экспериментировать с этим.

Гидра на самом деле просто словарный запас. Вам решать, как его использовать. Я думаю, что вы говорите о HydraBundle выше. Это всего лишь один из способов его использования. Это просто подтверждение концепции, чтобы показать, что это легко возможно. Поэтому, пожалуйста, не смущайтесь этим.

Я хотел бы пригласить вас присоединиться к группе сообщества Hydra W3C. Затем мы можем обсудить это более подробно в нашем списке рассылки.

Отказ от ответственности: я создатель Hydra и председатель группы сообщества Hydra W3C.

Я думаю, что вы могли бы быть заинтересованы в Hydra. Вы пробовали это?

Это словарь для описания гипермедиа ссылок и операций. Вот как это может работать для простой родительской ссылки

{
  "@context": {
    "schema": "http://schema.org",
    "parent": { 
       "@id": "/vocab#parent"
       "@type": "@id"
    }
  },
  "@id": "/users/123",
  "@type": "schema:Person",
  "name": "Jon Snow",
  "parent": "/users/Ned_Stark" 
}

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

{
  "@context": "http://www.w3.org/ns/hydra/context.jsonld",
  "@id": "/vocab#parent",
  "@type": "hydra:Link"
}

Вы также можете описать операции (методы HTTP, диапазоны, домены и т. Д.) И свойства для классов. Также операции могут быть включены непосредственно в представление или прикреплены к классам и свойствам.

Другие вопросы по тегам