SPARUL-запрос для удаления большинства графиков, используя Jena API
Я пытаюсь очистить большинство графиков, содержащихся в моем локальном тройном хранилище Virtuoso, используя Apache Jena, как часть моего процесса очистки до и после модульных тестов. Я думаю, что-то подобное должно быть сделано. Во-первых, я получаю URI графика, которые нужно удалить; затем я выполняю операцию SPARUL Drop.
String sparqlEndpointUsername = ...;
String sparqlEndpointPassword = ...;
String sparqlQueryString = ...; // Returns the URIs of the graphs to be deleted
HttpAuthenticator authenticator = new SimpleAuthenticator(sparqlEndpointUsername,
sparqlEndpointPassword.toCharArray());
ResultSet resultSetToReturn = null;
try (QueryEngineHTTP queryEngine = new QueryEngineHTTP(sparqlEndpoint, sparqlQueryString, authenticator)) {
resultSetToReturn = queryEngine.execSelect();
resultSetToReturn = ResultSetFactory.copyResults(resultSetToReturn);
while(resultSetToReturn.hasNext()){
String graphURI = resultSetToReturn.next().getResource("?g").getURI();
UpdateRequest request = UpdateFactory.create() ;
request.add("DROP GRAPH <"+graphURI+">");
Dataset dataset = ...; // how can I create a default dataset pointing to my local virtuoso installation?
// And perform the operations.
UpdateAction.execute(request, dataset) ;
}
}
;
Вопросы:
- Как показано в этом примере, для работы ARQ необходим набор данных. Как мне создать этот набор данных, указывающий на мою локальную установку Virtuoso для операции обновления?
- Есть ли альтернатива моему подходу? Будет ли лучше использовать другой подход (кроме Джены)?
Обратите внимание, что я не пытаюсь удалить все графики. Я удаляю только те графики, имена которых возвращаются через запрос SPARQL, определенный в начале (3-я строка).
2 ответа
Похоже, ваш вопрос относится к Virtuoso и предназначен для удаления всех данных RDF, поэтому вы можете использовать встроенный в Virtuoso RDF_GLOBAL_RESET()
функция
Это не SPARQL/SPARUL-запрос; обычно он создается через соединение SQL - это могут быть JDBC, ODBC, ADO.NET, OLE DB, iSQL и т. д.
Тем не менее, когда вы подключаетесь через SPARUL-привилегированное соединение, вы должны иметь возможность использовать (ограниченную) поддержку Virtuoso SQL-in-SPARQL, а -
SELECT
( bif:RDF_GLOBAL_RESET() AS reset )
WHERE
{ ?s ?p ?o }
LIMIT 1
(Выполнение этого через непривилегированное соединение, такое как конечная точка SPARQL по умолчанию, приведет к ошибке, подобной Virtuoso 37000 Error SP031: SPARQL compiler: Function bif:RDF_GLOBAL_RESET() can not be used in text of SPARQL query due to security restrictions
.)
(ObDisclaimer: OpenLink Software производит Virtuoso и нанимает меня.)
Вы можете создать один запрос на обновление SPARQL:
DROP GRAPH <g1> ;
DROP GRAPH <g2> ;
DROP GRAPH <g3> ;
... ;
потому что в SPARQL Update один HTTP-запрос может быть несколькими операциями обновления, разделенными ;
,