SPARQL エンドポイントからクエリを実行するDELETEと、操作は機能します。SPARQL クエリはINSERTUPDATE
SELECT ALL
INSERT DATA INTO <PERSONGRAPH> { personURI rdf:type foaf:Person }
グラフ全体をメモリにロードする必要なく操作が行われるように、 Java コード (Jena またはVirtuosoExecutionFactory)を使用して同じ操作を行うことは可能ですか? UPDATEコードから SPARQL エンドポイントを呼び出して操作を実行したいと考えていUPDATEます。グラフのトリプル全体がメモリにロードされるという仮定が間違っている場合は、修正してください。次の Jena コードは機能しますが、モデル全体をメモリにロードするため、トリプル サイズが 50,000 を超えるとマシンが機能しなくなります。
SELECT ALL
String queryString1 = " INSERT DATA { personURI
rdf:type foaf:Person } ";
UpdateRequest request1 = UpdateFactory.create(queryString1);
UpdateAction.execute(request1, personModel);
SPARQL エンドポイントで機能するのと同様に、グラフ全体をメモリにロードしないように、呼び出しsparqlServiceまたは使用して同じことを行いたいと考えています。createServiceRequest
次のコードは、Virtuoso ストアを更新していません。
SELECT ALL
String queryString1 = " INSERT DATA { personURI
rdf:type foaf:Person } ";
com.hp.hpl.jenafix.query.Query query1 = com.hp.hpl.jenafix.query.QueryFactory.create(queryString1);
com.hp.hpl.jenafix.query.QueryExecution qexec1 = com.hp.hpl.jenafix.query.QueryExecutionFactory.sparqlService("http://IP:8890/sparql", query1);
VirtuosoQueryExecutionFactory.sparqlService、QueryExecutionFactory.createServiceRequestおよびを使用してみQueryExecutionFactory.sparqlServiceました。これらは動作しますが、動作しSELECTませんUPDATE。Java コードから SPARQL エンドポイントを呼び出して更新する方法を教えてください。任意の提案、ヒントをいただければ幸いです。
新しい StackOverflow ユーザーには、2 つの URL の制限があります。残念ながらpersonUriは URL であり、制限により言及できません。personUri完全を期すためにここに言及しています。http://onmobile.com/umdb/person/juhi_chawla_268e7a02-8737-464f-97f8-172961d3335bpersonUriです
Andy のフィードバックに基づいて、UpdateExecutionFactoryと Http Client の両方の提案を使用してみました。
UpdateExecutionFactoryおよび Http クライアントを使用しようとするとConnection refused、実行中に問題が発生しましUPDATEたが、実行中には発生しませんでしたSELECT。プロキシ ホストとポートは既に設定されています。
コメントありがとうございます。このINSERT構文は、使用されているストアであるVirtuoso Open Sourceで機能します。の使用に問題がありUpdateExecutionFactoryます。私は以下で試しました
String queryString = "DELETE DATA FROM <PERSONGRAPH> { <"
+ personURI
+ "> rdf:type foaf:Person } ";
com.hp.hpl.jena.update.UpdateRequest request = com.hp.hpl.jena.update.UpdateFactory.create(queryString);
UpdateProcessor proc = UpdateExecutionFactory.createRemote(request, "http://IP:8890/sparql");
proc.execute();
次のエラースタックトレースを取得しました
org.apache.http.conn.HttpHostConnectException: IP:8890 への接続が拒否されました
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:158) で
org.apache.http.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java:149) で
org.apache.http.impl.conn.AbstractPooledConnAdapter.open (AbstractPooledConnAdapter.java:121) で
org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573) で
org.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java:425) で
org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:820) で
org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:754) で
org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:732) で
org.openjena.riot.web.HttpOp.execHttpPost(HttpOp.java:208) で
org.openjena.riot.web.HttpOp.execHttpPost(HttpOp.java:154) で
org.openjena.riot.web.HttpOp.execHttpPost(HttpOp.java:128) で
com.hp.hpl.jena.sparql.modify.UpdateProcessRemote.execute (UpdateProcessRemote.java:60) で
Virtuoso が更新用の別の URL エンドポイントを持っている可能性はありますか?