Использование 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, диапазоны, домены и т. Д.) И свойства для классов. Также операции могут быть включены непосредственно в представление или прикреплены к классам и свойствам.