如何使用JSONLD数据或JSONLD + Hydra在Java中制作超媒体驱动的API?

时间:2017-03-24 09:35:18

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

我的问题有两部分:
第1部分如果Server提供的数据是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进行通信。

客户端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 request = new HttpGet(&#34; http://data.dummy.jsonld/sampleUser.jsonld&#34;);
        HttpClient客户端= HttpClientBuilder.create()。build();
        HttpResponse response = client.execute(request);
        Object input = JsonUtils.fromInputStream(response.getEntity()。getContent());
        JsonLdOptions options = new 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}
        }
    ]
}

我必须处理这些数据吗?

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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