Самый эффективный способ очистить именованный граф?
Я работаю с экземпляром Ontotext GraphDB и часто хочу очистить именованный граф с большим количеством троек.
В настоящее время моя техника заключается в выдаче команды SPARQL на сервер графов, который ищет и сопоставляет тройной шаблон каждой тройки в названном графе:
DELETE { GRAPH example:exampleGraph { ?s ?p ?o }} WHERE {?s ?p ?o .}
Когда много троек, этот подход часто занимает некоторое время, чтобы очистить названный граф.
Мне интересно, есть ли более эффективный способ сделать это. Даже решение для конкретного магазина будет приемлемо для меня.
Следует также отметить, что я использую библиотеку RDF4J для связи с графиком. Я понимаю, что некоторые решения могут работать в веб-интерфейсе Ontotext, но меня интересует только решение, которое я могу реализовать программно.
1 ответ
Вы можете использовать команду SPARQL CLEAR для этого:
CLEAR GRAPH example:exampleGraph
Или, альтернативно, DROP:
DROP GRAPH example:exampleGraph
Разница между ними заключается в том, что CLEAR
позволяет магазинам триплетов хранить пустой именованный граф, а DROP
полностью удаляет названный граф. Но в случае GraphDB нет практической разницы, поскольку GraphDB никогда не сохраняет ссылку на пустой именованный граф.
Если вы не хотите использовать SPARQL, вы можете использовать API RDF4J для программного вызова 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));