4

我想知道,有没有办法将 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"
        }
    }
}

但我不知道如何定义 that hrefhas a @typeof @id,依此类推...

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

4

2 回答 2

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" }        
}

由于不需要“自我”链接(@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 词汇,但我不喜欢将资源映射到服务器端语言上的真实类和对象并自动将操作参数转换为这些对象的想法。也许可以以另一种方式使用 Hydra 词汇,但我没有时间进行试验。

Hydra 实际上只是一个词汇表。由您决定如何使用它。我认为您在谈论上面的HydraBundle。这只是使用它的一种方式。这只是一个概念证明,表明它很容易实现。所以请不要对此感到困惑。

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

免责声明:我是 Hydra 的创建者和 Hydra W3C 社区组的主席。

于 2014-06-27T15:05:44.613 回答
2

我想你可能对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 方法、范围、域等)和属性。操作也可以直接包含在表示中或附加到类和属性中。

于 2014-06-26T09:47:54.693 回答