Самый эффективный способ очистить именованный граф?

Я работаю с экземпляром 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));
Другие вопросы по тегам