如果我从 SPARQL 端点运行DELETE
/查询,则该操作有效。SPARQL 查询是INSERT
UPDATE
SELECT ALL
INSERT DATA INTO <PERSONGRAPH> { personURI rdf:type foaf:Person }
是否可以使用 Java 代码(VirtuosoExecutionFactory
JenaUPDATE
或 我想从代码中调用 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);
我想通过调用sparqlService
或使用来做同样的事情createServiceRequest
,以避免将整个图形加载到内存中,类似于它对 SPARQL 端点的工作方式。
以下代码不会更新 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
这里提到完整性。personUri
是http://onmobile.com/umdb/person/juhi_chawla_268e7a02-8737-464f-97f8-172961d3335b
根据 Andy 的反馈,尝试使用UpdateExecutionFactory
和 Http Client 的建议。
在尝试使用UpdateExecutionFactory
和 Http Client 时,在执行时遇到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 端点进行更新?