Apache Marmotta Удалить все графики с помощью обновления SPARQL
1 ответ
Попробуйте этот запрос:
DELETE WHERE { ?x ?y ?z }
Будьте осторожны, так как он удаляет каждую тройку в базе данных, включая встроенные в Marmotta.
Несколько вещей, которые я сделал для экспериментов:
Я скачал исходный код Marmotta и использовал инструмент Silver Searcher для поиска
DELETE
запросы с помощью следующей команды:ag '"DELETE '
Это не сильно помогло.
Я перешел в каталог установки Marmotta и посмотрел журнал отладки:
tail -f marmotta-home/log/marmotta-main.log
Это показало, что парсер не может обработать запрос
DELETE DATA { ?s ?p ?o }
, Исключением из-за "ошибки при выполнении обновления" было:org.openrdf.sail.SailException: org.openrdf.rio.RDFParseException: Expected an RDF value here, found '?' [line 8] [followed by a long stacktrace]
Это показывает, что парсер не разрешает переменные в запросе после
DELETE DATA
,Основываясь на связанном ответе Stackru, я попытался
CLEAR
/CLEAR GRAPH
/DROP
/DROP GRAPH
, но они не работали.Я перепробовал много комбинаций
DELETE
,*
,?s ?p ?p
и случайно удалось заставить его работать с конструкцией DELETE WHERE. Согласно документации W3C:Операция DELETE WHERE - это сокращенная форма для операции DELETE/INSERT, в которой привязки, соответствующие предложению WHERE, используются для определения троек в графе, который будет удален.