2015-08-19 47 views
1

我在How to return SPARQL results in JSON-LD?上看到了答案,但它并不令人满意/工作。我使用JSON-LD Java集成芝麻,以及独立版本。芝麻/耶拿SPARQL结果为JSON-LD

我想要实现的:通过Blazegraph RemoteRepository(基于Sesame/SAIL)向SPARQL端点发送SPARQL CONSTRUCT查询,获取RDF结果,将该RDF序列化为JSON-LD。 RDF的结果非常好。

的问题是,下面的代码(芝麻)是生产恰好没有输出:

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); 

我也使用的转换到耶拿内部模型,因为我知道耶拿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); 

我现在该怎么办?

+0

这里没有足够的信息来回答这个问题,但问题出在你的身上,而不是芝麻或耶拿的问题。运行你的Sesame代码,我不能再现这个问题:当我创建一个非空的'GraphQueryResult'并通过你的代码运行它,输出到System.out(而不是使用StringWriter)时,我得到的输出很好。所以要么是问题出在你如何获得'GraphQueryResult'(你确定它不是空的?),要么是你对'StringWriter'做了什么。 –

+0

看起来我有点过早地说它是“在你的最后”。感谢您提供答案,有助于了解此库的不兼容性。 –

回答

1

好的,问题不是我上面提到的过程。

此问题是由于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> 

我希望将安全某人的时候了!