我想知道,是否可以将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社区小组的主席。

07-24 09:54