SPARQL为什么同时存在DELETE和WHERE条件?

Kri*_*ian 2 rdf sparql triplestore

最近,我根据匹配模式删除一些数据?s a :answers,我注意到,如果两个条件块相同,我只能正确地进行删除:

PREFIX :      <http://localhost:2020/vocab/> 
DELETE {
    ?s a :answers
}
WHERE {
    ?s a :answers
}
# returns all the correct data
Run Code Online (Sandbox Code Playgroud)

如果删除块更通用,则不会返回任何内容:

PREFIX :      <http://localhost:2020/vocab/>
DELETE {
    ?s ?p ?o
}
WHERE {
    ?s a :answers
}
# returns 0 rows
Run Code Online (Sandbox Code Playgroud)

拥有两组不同的条件(花括号之间的内容:)的目的是什么{...}?究竟是哪一个选择了要删除的数据?

And*_*dyS 5

因为你删除的可能不是你和WHERE匹配的。

第一种情况有一个特殊的形式:

DELETE WHERE { ?s a :answers }
Run Code Online (Sandbox Code Playgroud)

在第二个中,?p 和?o 不受约束。尝试:

DELETE {
    ?s ?p ?o
}
WHERE {
    ?s a :answers .
    ?s ?p ?o .
}
Run Code Online (Sandbox Code Playgroud)