答案 0 :(得分:2)
尝试此查询:
DELETE WHERE { ?x ?y ?z }
小心,因为它会删除数据库中的每个三元组,包括内置的Marmotta。
我为实验做了几件事:
我下载了Marmotta的source code,并使用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
之后不允许查询中的变量。
根据related StackOverflow answer,我尝试了CLEAR
/ CLEAR GRAPH
/ DROP
/ DROP GRAPH
,但它们无效。
我尝试了DELETE
,*
,?s ?p ?p
的多种组合,并意外地设法让它与DELETE WHERE构造一起使用。根据W3C文档:
DELETE WHERE操作是DELETE / INSERT操作的快捷方式,其中WHERE子句匹配的绑定用于定义将被删除的图形中的三元组。