Sparql 清除命名图的最有效方法?

Sparql 清除命名图的最有效方法?,sparql,graphdb,rdf4j,named-graphs,Sparql,Graphdb,Rdf4j,Named Graphs,我正在使用Ontotext GraphDB的一个实例,并且经常希望清除一个包含大量三元组的命名图 目前,我的技术涉及向图形服务器发出SPARQL命令,该命令搜索并匹配命名图形中每个三元组的三元组模式: DELETE { GRAPH example:exampleGraph { ?s ?p ?o }} WHERE {?s ?p ?o .} 当有很多三元组时,这种方法通常需要相当长的时间来清除命名图 我想知道是否有更有效的方法来做到这一点。我甚至可以接受一个具体的解决方案 我还应该注意,我正在使用

我正在使用Ontotext GraphDB的一个实例,并且经常希望清除一个包含大量三元组的命名图

目前,我的技术涉及向图形服务器发出SPARQL命令,该命令搜索并匹配命名图形中每个三元组的三元组模式:

DELETE { GRAPH example:exampleGraph { ?s ?p ?o }} WHERE {?s ?p ?o .}
当有很多三元组时,这种方法通常需要相当长的时间来清除命名图

我想知道是否有更有效的方法来做到这一点。我甚至可以接受一个具体的解决方案

我还应该注意,我正在使用RDF4J库与图形进行通信。我知道某些解决方案可能在Ontotext web界面上工作,但我只对一个可以通过编程实现的解决方案感兴趣。

您可以使用SPARQL命令来实现:

CLEAR GRAPH example:exampleGraph
或者:

两者之间的区别在于
CLEAR
允许TripleStore保留一个空的命名图,而
DROP
则完全删除命名图。但是在GraphDB的情况下,没有实际的区别,因为GraphDB从不保留对空命名图的引用

如果不想使用SPARQL,可以使用以编程方式调用
clear()
操作:

IRI图形=graphdb.getValueFactory().createIRI(“http://example.org/exampleGraph");  
try(RepositoryConnection conn=graphdb.getConnection()){
连接线(图);
}
或者更简洁地说:

IRI图形=graphdb.getValueFactory().createIRI(“http://example.org/exampleGraph");  
使用(graphdb,conn->conn.clear(graph));

在性能方面可能没有什么不同,但它是SPARQL 1.1更新规范hanks中的专用命令!我将我的代码切换为使用CLEAR GRAPH,性能要好得多。
DROP GRAPH example:exampleGraph