Apache Marmotta Удалить все графики с помощью обновления SPARQL

Я пытаюсь очистить все загруженные графики в моем экземпляре Apache Marmotta. Я попытался выполнить несколько запросов SPARQL, но не смог удалить импортированный граф RDF/XML. Каков соответствующий синтаксис для этого?

1 ответ

Решение

Попробуйте этот запрос:

DELETE WHERE { ?x ?y ?z }

Будьте осторожны, так как он удаляет каждую тройку в базе данных, включая встроенные в Marmotta.

Несколько вещей, которые я сделал для экспериментов:

  1. Я скачал исходный код Marmotta и использовал инструмент Silver Searcher для поиска DELETE запросы с помощью следующей команды:

    ag '"DELETE '
    

    Это не сильно помогло.

  2. Я перешел в каталог установки 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,

  3. Основываясь на связанном ответе Stackru, я попытался CLEAR / CLEAR GRAPH / DROP / DROP GRAPH, но они не работали.

  4. Я перепробовал много комбинаций DELETE, *, ?s ?p ?p и случайно удалось заставить его работать с конструкцией DELETE WHERE. Согласно документации W3C:

    Операция DELETE WHERE - это сокращенная форма для операции DELETE/INSERT, в которой привязки, соответствующие предложению WHERE, используются для определения троек в графе, который будет удален.

Другие вопросы по тегам