Search code examples
sparqlapache-marmotta

Apache Marmotta Delete All Graphs using SPARQL Update


I am trying to clear all loaded graphs into my Apache Marmotta instance. I have tried several SPARQL queries to do so, but I am not able to remove the RDF/XML graph that I imported. What is the appropriate syntax to do so? enter image description here


Solution

  • Try this query:

    DELETE WHERE { ?x ?y ?z }
    

    Be careful, as it deletes every triple in the database, including the built-in ones of Marmotta.

    A couple of things I did for experimenting:

    1. I downloaded the source code of Marmotta and used the Silver Searcher tool for searching for DELETE queries with the following command:

      ag '"DELETE '
      

      This did not help much.

    2. I navigated to the Marmotta installation directory and watched the debug log:

      tail -f marmotta-home/log/marmotta-main.log
      

      This showed that the parser is not able to process the query DELETE DATA { ?s ?p ?o }. The exception behind the "error while executing update" was:

      org.openrdf.sail.SailException: org.openrdf.rio.RDFParseException: Expected an RDF value here, found '?' [line 8]
      [followed by a long stacktrace]
      

      This shows that the parser does not allow variables in the query after DELETE DATA.

    3. Based on a related StackOverflow answer, I tried CLEAR / CLEAR GRAPH / DROP / DROP GRAPH, but they did not work.

    4. I tried many combinations of DELETE, *, ?s ?p ?p and accidentally managed to get it working with the DELETE WHERE construct. According to the W3C documentation:

      The DELETE WHERE operation is a shortcut form for the DELETE/INSERT operation where bindings matched by the WHERE clause are used to define the triples in a graph that will be deleted.