2015-08-19 48 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> 

我希望將安全某人的時候了!