我想知道,是否可以将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
,依此类推...有没有一种方法可以定义基于RDF(S)的HAL vocab,并以某种方式将其导入jsonld文档的@context中,还是应该做其他事情?
(我试图描述具有各种属性的超链接,例如链接关系,HTTP方法,可接受的媒体类型,语言,IRI模板,输入字段等,因此
@id
类型不足以描述链接。) 最佳答案
正如Tomasz已经建议的那样,您应该真正考虑使用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
。如果您需要更详细地描述该链接/属性,则可以通过创建一个文档来对其进行定义,该文档的定义方式与所描述的其他内容完全相同(正如Tomasz也已经解释过):{
"@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": ....
}
]
}
关于你的评论
顺便说一句。我或多或少熟悉Hydra vocab,但我不喜欢
将资源映射到服务器上的实际类和对象的想法
辅助语言并自动转换操作参数
进入那些对象。也许可以在下面使用Hydra vocab
换一种方式,但是我没有时间去尝试。
九头蛇真的只是一个词汇。由您决定如何使用它。我认为您在谈论上面的HydraBundle。那只是使用它的一种方式。这只是概念上的证明,表明这是容易实现的。因此,请不要为此感到困惑。
我想邀请您加入join the Hydra W3C Community Group。然后,我们可以在邮件列表中更详细地讨论这一点。
免责声明:我是Hydra的创建者和Hydra W3C社区小组的主席。