使用HAL词汇与JSON-LD

inf*_*rno 4 rest rdf hateoas hal-json json-ld

我想知道,有没有办法在JSON-LD中使用HAL概念?

我有当前的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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何定义该href具有@type@id,等等...

有没有办法基于RDF(S)定义HAL词汇并以某种方式将其导入我的jsonld文档的@context中,或者我应该做其他什么?
(我试图描述具有各种属性的超链接,如链接关系,HTTP方法,接受的媒体类型,语言,IRI模板,输入字段等等......所以@id类型不足以让我描述链接.)

Mar*_*ler 8

正如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" }        
}
Run Code Online (Sandbox Code Playgroud)

由于不需要"自我"链接(@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": ....
       }
    ]       
}
Run Code Online (Sandbox Code Playgroud)

关于你的评论

顺便说一句.我或多或少熟悉Hydra词汇,但我不喜欢将资源映射到服务器端语言的实际类和对象,并自动将操作参数转换为这些对象.也许有可能以另一种方式使用Hydra词汇,但我没有时间去试验.

九头蛇真的只是一个词汇.由您决定如何使用它.我想你正在谈论上面的HydraBundle.这只是一种使用它的方法.这只是一个概念证明,表明它很容易实现.所以请不要对此感到困惑.

我想邀请您加入Hydra W3C社区小组.然后我们可以在邮件列表中更详细地讨论这个问题.

免责声明:我是Hydra的创始人,也是Hydra W3C社区团体的主席.