【问题标题】:How to consume JSONLD data or JSONLD+Hydra to make hypermedia driven API in Java?如何使用 JSONLD 数据或 JSONLD+Hydra 在 Java 中制作超媒体驱动的 API?
【发布时间】:2017-03-24 09:35:18
【问题描述】:

我的问题有两个部分:
第 1 部分) 如果服务器提供 JSON-LD 数据,那么如何使用这个 JSON-LD?我们可以使用简单的 Json Parser 吗?但我认为它不会起作用,因为“@context”具有每个键的映射。
第 2 部分) 现在数据是 JSON-LD + Hydra (制作超媒体驱动的 API)。假设 Hydra 部件通过 API 文档(如 Markus Lanthaler vocab)或 JSON-LD 响应数据提供。如何获取数据(属性)并使用该数据执行操作。
我认为 Apache Jena 做这项工作是为了消费和执行操作,但我仍然不确定,Apache Jena 是否用于此目的,如果是,那么它的表现如何?
在回答之前考虑这个情景:

CLIENT <----via API---> CLIENT HELPER <----via API----> SERVER

为了与 SERVER 通信,CLIENT 将通过 CLIENT HELPER 进行通信。

CLIENT HELPER 和 SERVER 都可以在 JSON-LD 中理解和交流。 而 CLIENT 只能理解 JSON。

在上面这个场景中,我正在实现 CLIENT HELPER(基本上是 API CLIENT)部分,如何实现该部分。请用外行的术语解释一下。

编辑 1):

对于这个 JSON-LD

{
  "@context": {
                "@vocab" : "http://www.myorganisation.com/vocab/"
              },
  "@id": "http://www.myorganisation.com/hydra/api/users/1",
  "@type": "User",
  "name": "Dhannan",
  "age": 38,
  "knows" : [
            {
                  "@id": "http://www.myorganisation.com/hydra/api/users/2",
                  "@type": "User",
                  "name": "Mrigika",
                  "age": 35
            },
            {
                  "@id": "http://www.myorganisation.com/hydra/api/languages/1",
                  "@type": "Language",
                  "description": "English"
            }
    ]
}

JAVA代码:

HttpGet 请求 = new HttpGet("http://data.dummy.jsonld/sampleUser.jsonld");
HttpClient 客户端 = HttpClientBuilder.create().build();
HttpResponse 响应 = client.execute(request);
对象输入 = JsonUtils.fromInputStream(response.getEntity().getContent());
JsonLdOptions 选项 = 新 JsonLdOptions();
对象 rdf = JsonLdProcessor.toRDF(输入,选项);
RDFDataset rdfDataset = (RDFDataset) rdf;
System.out.println(rdfDataset);


这是使用jsonld-java的回复

{
@default=
    [
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type},
        object={type=IRI, value=http://www.myorganisation.com/vocab/User}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/age},
        object={type=literal, value=38, datatype=http://www.w3.org/2001/XMLSchema#integer}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/knows},
        object={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/knows},
        object={type=IRI, value=http://www.myorganisation.com/hydra/api/languages/1}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/name},
        object={type=literal, value=Dhannan, datatype=http://www.w3.org/2001/XMLSchema#string}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2},
        predicate={type=IRI, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type},
        object={type=IRI, value=http://www.myorganisation.com/vocab/User}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/age},
        object={type=literal, value=35, datatype=http://www.w3.org/2001/XMLSchema#integer}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/users/2},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/name},
        object={type=literal, value=Mrigika, datatype=http://www.w3.org/2001/XMLSchema#string}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/languages/1},
        predicate={type=IRI, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type},
        object={type=IRI, value=http://www.myorganisation.com/vocab/Language}
        },
        {
        subject={type=IRI, value=http://www.myorganisation.com/hydra/api/languages/1},
        predicate={type=IRI, value=http://www.myorganisation.com/vocab/description},
        object={type=literal, value=English, datatype=http://www.w3.org/2001/XMLSchema#string}
        }
    ]
}

我需要处理这些数据吗?

【问题讨论】:

    标签: java jena semantic-web json-ld hydra-core


    【解决方案1】:

    第 1 部分)如果服务器提供 JSON-LD 数据,那么如何使用它 JSON-LD?我们可以使用简单的 Json Parser 吗?但我认为它不会起作用 因为“@context”具有每个键的映射。

    如果您确切知道将以何种形式获取数据(例如,因为您控制服务器),则可以将其解析为 JSON。否则,您应该使用 JSON-LD 处理器来解析它。 json-ld.org 列出了一些开源实现。

    第 2 部分)现在数据是 JSON-LD + Hydra(用于制作超媒体驱动的 API)。 假设 Hydra 部分是通过 API 文档提供的,例如 Markus Lanthaler 词汇或 JSON-LD 响应数据。如何获取 数据(属性)并使用该数据执行操作。我以为阿帕奇 Jena 做这项工作是为了消费和执行行动,但我仍然不确定 , Apache Jena 是不是为了这个目的,如果是,那么它是怎么做的呢?

    每个 RDF 库/工具/框架都应该能够在这方面提供帮助。还有更专业的工具。看看hydra-cg.com

    【讨论】:

    • 请参阅问题的编辑:1。您是否尝试以相同的方式传达?。我仍在弄清楚 hydra 部分,我稍后会谈到 hydra 部分。
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2012-10-14
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多