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



我的问题有两个部分:
第1部分)如果服务器提供的数据是JSON-LD,那么如何使用这个JSON-LD?我们可以使用简单的 Json 解析器吗?但我认为它不起作用,因为"@context"具有每个键的映射。
第 2 部分)现在数据是JSON-LD + Hydra(制作超媒体驱动的API)。假设 Hydra 部分是通过 API 文档(如 Markus Lanthaler 词汇表)或与 JSON-LD 响应数据一起提供的。如何获取数据(属性)并使用该数据执行操作。
我以为阿帕奇耶拿做这项工作是为了消费和执行动作,但我仍然不确定,阿帕奇耶拿是为了这个目的,如果是,那么它做得怎么样?
在回答之前,请考虑一下这个塞纳里奥:

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

为了与服务器通信,客户端将通过客户端助手进行通信。

客户端帮助程序和服务器都可以在 JSON-LD 中理解和通信。 虽然客户端只能理解JSON。

在上面的这个场景中,我正在实现客户端助手(基本上是API客户端)部分如何实现该部分。请用通俗的术语解释。

编辑 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("http://data.dummy.jsonld/sampleUser.jsonld");
HttpClient client = HttpClientBuilder.create().build();
HttpResponse response = client.execute(request);
Object input = JsonUtils.fromInputStream(response.getEntity().getContent());
JsonLdOptions options = new JsonLdOptions();
Object rdf = JsonLdProcessor.toRDF(input,options);
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 部分)如果服务器提供的数据是 JSON-LD,那么如何使用它 JSON-LD?我们可以使用简单的 Json 解析器吗?但我认为这行不通 因为"@context"具有每个键的映射。

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

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

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

相关内容

  • 没有找到相关文章

最新更新