1

How to return SPARQL results in JSON-LD?の回答を見ました。、しかし、それは満足のいくものではありません/機能していません。JSON-LD Java Integration for Sesame とスタンドアロン バージョンを使用しました。

私が達成したいこと: Blazegraph RemoteRepository (Sesame/SAIL に基づく) を介して SPARQL CONSTRUCT クエリを SPARQL エンドポイントに送信し、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 出力が正常に機能したことを知っているためです。残念ながら、同じアプローチは Jena への変換には機能しません。

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

今何ができますか?

4

1 に答える 1

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>

それが誰かの時間を安全にすることを願っています!

于 2015-08-20T13:15:04.783 に答える