我正在尝试使用Apache Jena清除本地Virtuoso三重商店中包含的大多数图表,作为我的单元测试之前和之后的清理过程的一部分。我认为应该这样做。首先,我检索要删除的图形URI;然后我执行SPARUL Drop操作。
String sparqlEndpointUsername = ...;
String sparqlEndpointPassword = ...;
String sparqlQueryString = ...; // Returns the URIs of the graphs to be deleted
HttpAuthenticator authenticator = new SimpleAuthenticator(sparqlEndpointUsername,
sparqlEndpointPassword.toCharArray());
ResultSet resultSetToReturn = null;
try (QueryEngineHTTP queryEngine = new QueryEngineHTTP(sparqlEndpoint, sparqlQueryString, authenticator)) {
resultSetToReturn = queryEngine.execSelect();
resultSetToReturn = ResultSetFactory.copyResults(resultSetToReturn);
while(resultSetToReturn.hasNext()){
String graphURI = resultSetToReturn.next().getResource("?g").getURI();
UpdateRequest request = UpdateFactory.create() ;
request.add("DROP GRAPH <"+graphURI+">");
Dataset dataset = ...; // how can I create a default dataset pointing to my local virtuoso installation?
// And perform the operations.
UpdateAction.execute(request, dataset) ;
}
}
;
问题:
请注意,我不试图删除所有图表。我只删除名称通过开头(第3行)中定义的SPARQL查询返回的图表。
答案 0 :(得分:1)
您的问题似乎是针对Virtuoso的,并且意味着删除所有 RDF数据,因此您可以使用Virtuoso's built-in RDF_GLOBAL_RESET()
function。
这不是SPARQL / SPARUL查询;它通常通过SQL连接发出 - 可以是JDBC,ODBC,ADO.NET,OLE DB,iSQL等。
也就是说,当您通过SPARUL特权连接进行连接时,您应该可以使用Virtuoso's (limited) SQL-in-SPARQL support,la -
SELECT
( bif:RDF_GLOBAL_RESET() AS reset )
WHERE
{ ?s ?p ?o }
LIMIT 1
(通过非默认的SPARQL端点之类的非特权连接执行此操作将导致Virtuoso 37000 Error SP031: SPARQL compiler: Function bif:RDF_GLOBAL_RESET() can not be used in text of SPARQL query due to security restrictions
之类的错误。)
(ObDisclaimer:OpenLink Software生成Virtuoso,雇用我。)
答案 1 :(得分:1)
您可以构建单个SPARQL更新请求:
DROP GRAPH <g1> ;
DROP GRAPH <g2> ;
DROP GRAPH <g3> ;
... ;
因为在SPARQL Update中,一个HTTP请求可以是多个更新操作,由;
分隔。