Sesame/Jena SPARQL 结果到 JSON-LD
Sesame/Jena SPARQL results to JSON-LD
我在 How to return SPARQL results in JSON-LD? 上看到了答案,但不是 satisfying/working。我使用了 Sesame 的 JSON-LD Java Integration,以及独立版本。
我想要实现的目标:通过 Blazegraph RemoteRepository(基于 Sesame/SAIL)向 SPARQL 端点发送 SPARQL CONSTRUCT 查询,获取 RDF 结果,将该 RDF 序列化为 JSON-LD。 RDF 结果完美无缺。
问题是,以下代码(使用 Sesame)完全没有输出:
StringWriter sw = new StringWriter();
final RDFWriter writer = Rio.createWriter( RDFFormat.JSONLD, sw );
//writer.getWriterConfig().set( JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT );
GraphQueryResult queryResults;
Rio.write(QueryResults.asModel(queryResults), writer);
我还使用了到 Jena 内部模型的转换,因为我知道 Jena JSON-LD 输出在我的另一个副项目中运行良好。不幸的是,同样的方法不适用于转换为耶拿。
我的代码带有 Sesame to Jena Adapter:
while(queryResults.hasNext()) {
JenaUtils.asJenaStatement();
}
StringWriter sw = new StringWriter();
// JenaUtils.getModel() returns the Jena model with the added statements above
RDFDataMgr.write( sw, JenaUtils.getModel(), RDFFormat.JSONLD );
我现在可以做什么?
好的,问题不是我上面提到的过程。
此问题是由于 Blazegraph 中 HTTP 客户端的不兼容版本在 json-ld Sesame 集成库中的抑制异常引起的。
java.lang.NoClassDefFoundError: org/apache/http/impl/client/SystemDefaultHttpClient
导致没有将 GraphQueryResults 通过管道传输到 json-ld。
异常是由于 Blazegraph 的不兼容 HTTP 客户端版本 (4.1.3) 而发生的,它覆盖了 json-ld HTTP 客户端版本 (>4.1.3)。
您必须使用以下内容覆盖项目对 HTTP 客户端的依赖性:
<!-- necessary for (sesame) json-ld integration, -->
<!-- because BlazeGraph uses an older version. See https://github.com/jsonld-java/jsonld-java/issues/64 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4</version>
</dependency>
我希望这会节省一些人的时间!
我在 How to return SPARQL results in JSON-LD? 上看到了答案,但不是 satisfying/working。我使用了 Sesame 的 JSON-LD Java Integration,以及独立版本。
我想要实现的目标:通过 Blazegraph RemoteRepository(基于 Sesame/SAIL)向 SPARQL 端点发送 SPARQL CONSTRUCT 查询,获取 RDF 结果,将该 RDF 序列化为 JSON-LD。 RDF 结果完美无缺。
问题是,以下代码(使用 Sesame)完全没有输出:
StringWriter sw = new StringWriter();
final RDFWriter writer = Rio.createWriter( RDFFormat.JSONLD, sw );
//writer.getWriterConfig().set( JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT );
GraphQueryResult queryResults;
Rio.write(QueryResults.asModel(queryResults), writer);
我还使用了到 Jena 内部模型的转换,因为我知道 Jena JSON-LD 输出在我的另一个副项目中运行良好。不幸的是,同样的方法不适用于转换为耶拿。
我的代码带有 Sesame to Jena Adapter:
while(queryResults.hasNext()) {
JenaUtils.asJenaStatement();
}
StringWriter sw = new StringWriter();
// JenaUtils.getModel() returns the Jena model with the added statements above
RDFDataMgr.write( sw, JenaUtils.getModel(), RDFFormat.JSONLD );
我现在可以做什么?
好的,问题不是我上面提到的过程。
此问题是由于 Blazegraph 中 HTTP 客户端的不兼容版本在 json-ld Sesame 集成库中的抑制异常引起的。
java.lang.NoClassDefFoundError: org/apache/http/impl/client/SystemDefaultHttpClient
导致没有将 GraphQueryResults 通过管道传输到 json-ld。 异常是由于 Blazegraph 的不兼容 HTTP 客户端版本 (4.1.3) 而发生的,它覆盖了 json-ld HTTP 客户端版本 (>4.1.3)。
您必须使用以下内容覆盖项目对 HTTP 客户端的依赖性:
<!-- necessary for (sesame) json-ld integration, -->
<!-- because BlazeGraph uses an older version. See https://github.com/jsonld-java/jsonld-java/issues/64 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4</version>
</dependency>
我希望这会节省一些人的时间!