Самый эффективный способ очистить именованный граф? - PullRequest
0 голосов
/ 10 мая 2018

Я работаю с экземпляром Ontotext GraphDB и часто хочу очистить именованный граф с большим количеством троек.

В настоящее время моя техника заключается в выдаче команды SPARQL на сервер графов, который ищет и сопоставляет тройной шаблон каждой тройки в названном графе:

DELETE { GRAPH example:exampleGraph { ?s ?p ?o }} WHERE {?s ?p ?o .}

Когда много троек, этот подход часто занимает довольно много времени для очистки именованного графа.

Мне интересно, есть ли более эффективный способ сделать это. Даже решение для конкретного магазина будет приемлемо для меня.

Следует также отметить, что я использую библиотеку RDF4J для связи с графиком. Я понимаю, что некоторые решения могут работать с веб-интерфейсом Ontotext, но меня интересует только решение, которое я могу реализовать программно.

1 Ответ

0 голосов
/ 11 мая 2018

Для этого вы можете использовать команду SPARQL CLEAR :

CLEAR GRAPH example:exampleGraph

Или, альтернативно, DROP :

DROP GRAPH example:exampleGraph

Разница между ними заключается в том, что CLEAR позволяет триплетам хранить пустой именованный граф, тогда как DROP полностью удаляет названный граф. Но в случае GraphDB нет практической разницы, поскольку GraphDB никогда не сохраняет ссылку на пустой именованный граф.

Если вы не хотите использовать SPARQL, вы можете использовать RDF4J API для программного вызова операции 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));
...