SPARQL エンドポイントからクエリを実行するDELETE
と、操作は機能します。SPARQL クエリはINSERT
UPDATE
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 エンドポイントを持っている可能性はありますか?