2

私の状況は単純です。sparql-auth-endpoint にアップロードしたい RDF (N3) ファイルがあります。私は Jena ARQ を使用していますが、残念ながら機能しません。エラーは発生しませんが、グラフは変化しません。どこに問題があるのでしょうか? 私のコード:

HttpContext httpContext = new BasicHttpContext();
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(new AuthScope(AuthScope.ANY_HOST,
    AuthScope.ANY_PORT), new UsernamePasswordCredentials("user", "pass"));
httpContext.setAttribute(ClientContext.CREDS_PROVIDER, provider);

GraphStore graphStore = GraphStoreFactory.create() ;

UpdateRequest request = UpdateFactory.read("turtle.ttl");

/*another possible query, same result - no errors but the graph doesn't change
request.add(new UpdateCreate("graph")) ;
request.add(new UpdateLoad("file:turtle_2.ttl", "graph")) ;
request.add("prefix dcterms: <http://purl.org/dc/terms/>"
    + "INSERT DATA { GRAPH <graph> {<http://example/book3> dcterms:title    \"A new book\" }}");
UpdateAction.execute(request, graphStore) ;
*/

UpdateProcessor processor = UpdateExecutionFactory
    .createRemote(request, "http://sparql-endpoint/sparql-auth");
((UpdateProcessRemote)processor).setHttpContext(httpContext);
processor.execute();

そのデータを sparql-endpoint にアップロードするようにコードを変更するにはどうすればよいですか?

編集 1

これは小さな例ですが、これも機能していません。ブラウザで sparql-endpoint を介して新しいグラフを作成できますが、Jena では作成できませんエラーも新しいグラフもありません。

UpdateRequest request = UpdateFactory.create();
request.add(new UpdateCreate("http://linkeddata.com/graph"));
UpdateProcessor processor = UpdateExecutionFactory
    .createRemote(request, "http://sparql-endpoint/sparql-auth");
((UpdateProcessRemote)processor).setHttpContext(httpContext);
processor.execute();

編集 2

sparql-auth-endpoint で Virtuoso サーバーを使用して、これらの行を変更したところ、はるかにうまく機能しました。

UpdateProcessor processor = UpdateExecutionFactory
    .createRemoteForm(request, "http://sparql-endpoint/sparql-auth");
((UpdateProcessRemoteForm)processor).setHttpContext(httpContext);
processor.execute();

まあ、localhost:8890 では動作しますが、別の名人サーバーでは動作しません

Exception in thread "main" org.apache.jena.atlas.web.HttpException: 400 Bad Request
at org.apache.jena.riot.web.HttpOp.httpResponse(HttpOp.java:425)
at org.apache.jena.riot.web.HttpOp.execHttpPostForm(HttpOp.java:316)
at com.hp.hpl.jena.sparql.modify.UpdateProcessRemoteForm.execute(UpdateProcessRemoteForm.java:75)
at bakalarska_prace.UpVirtuoso.main(UpVirtuoso.java:108) -> processor.execute()
4

4 に答える 4

0

私は同じ問題を抱えていて、エンドポイントURIの最後に「/ update」を追加すると機能し始めました。

于 2016-04-12T09:29:12.310 に答える
0

INSERT DATA {graph <graph> {}}Virtuoso は、オンライン ドキュメントの使用をサポートしていません。

400 Bad Requestサーバーからの構文エラーを意味します。

リクエスト文字列をサーバーに直接送信する必要があります。これは SPARQL 1.1 synatx ではないため、Jena はそれを解析しません。

于 2013-05-11T10:35:26.523 に答える
0

Virtuoso Conductor インターフェイス(http://localhost:8890)で動作する場合は、Virtuoso Jena プロバイダーと次のコードを使用できます。

  String queryString = "INSERT DATA {graph <graph> ...."; // your query
  Model m = VirtModel.openDatabaseModel(file, connectionURL, username, password); 
  VirtuosoUpdateRequest vur = VirtuosoUpdateFactory.create(queryString, m);
  vur.exec();  

Virtuoso サーバーにクエリを直接送信します。

于 2013-11-07T14:53:59.723 に答える