我正在使用 Ontotext GraphDB 的一个实例,并且经常想要清除具有大量三元组的命名图。
目前,我的技术涉及向图形服务器发出 SPARQL 命令,该命令搜索并匹配指定图形中每个三元组的三元组模式:
DELETE { GRAPH example:exampleGraph { ?s ?p ?o }} WHERE {?s ?p ?o .}
当有很多三元组时,这种方法通常需要相当长的时间来清除命名图。
我想知道是否有更有效的方法来做到这一点。即使是特定于三重存储的解决方案对我来说也是可以接受的。
我还应该注意,我正在使用 RDF4J 库与图形进行通信。我知道某些解决方案可能适用于 Ontotext Web 界面,但我只对可以以编程方式实现的解决方案感兴趣。
您可以使用 SPARQLCLEAR https://www.w3.org/TR/sparql11-update/#clear为此命令:
CLEAR GRAPH example:exampleGraph
或者,DROP https://www.w3.org/TR/sparql11-update/#drop:
DROP GRAPH example:exampleGraph
两者的区别在于CLEAR
允许三元组保存一个空的命名图,而DROP
完全删除指定的图。但对于 GraphDB 来说,没有实际差异,因为 GraphDB 从不保留对空命名图的引用。
如果您不想使用 SPARQL,可以使用RDF4J API http://docs.rdf4j.org/programming/以编程方式调用clear()
手术:
IRI graph = graphdb.getValueFactory().createIRI("http://example.org/exampleGraph");
try(RepositoryConnection conn = graphdb.getConnection()) {
conn.clear(graph);
}
或者更简洁地说:
IRI graph = graphdb.getValueFactory().createIRI("http://example.org/exampleGraph");
Repositories.consume(graphdb, conn -> conn.clear(graph));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)