java - Sesame/Jena SPARQL 结果转为 JSON-LD

标签 java jena sesame json-ld blazegraph

我在 How to return SPARQL results in JSON-LD? 上看到了答案,但它并不令人满意/工作。我使用了 JSON-LD Java Integration for Sesame,以及独立版本。

我想要实现的目标:通过 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>

我希望这能节省某人的时间!

关于java - Sesame/Jena SPARQL 结果转为 JSON-LD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100187/

相关文章:

c# - Java 到 C# 的转换

java - 如果线程已经中断,Thread.sleep 会抛出吗?

java - 消息队列性能低下

java - 如何将修改(OWL文件的创建、更新)保存到fuseki服务器中

RDF--如何根据 rdf :type? 进行传递属性转换

java - 为什么我一次只能从 okhttp.Response InputStream 读取 2048 个字节?

java - 在 Virtuoso 服务上使用 Jena 的 SPARQL 查询执行时间

Java - Jena API - 输出文件

java - 在我的 Java 类中使用 Sesame 2 和 MySQL

java - 如何在 Sesame 2.7.7 上的 INSERT 查询中自动生成新的实例标识符