Rdf SPARQL为什么同时存在删除和WHERE条件?

Rdf SPARQL为什么同时存在删除和WHERE条件?,rdf,sparql,triplestore,Rdf,Sparql,Triplestore,最近,我根据匹配模式删除了一些数据?s a:answers,我注意到,只有在两个条件块相同的情况下,我才能正确进行删除: PREFIX : <http://localhost:2020/vocab/> DELETE { ?s a :answers } WHERE { ?s a :answers } # returns all the correct data 前缀: 删除{ 答:答案 } 在哪里{ 答:答案 } #返回所有正确的数据 如果删除块更一般化

最近,我根据匹配模式删除了一些数据
?s a:answers
,我注意到,只有在两个条件块相同的情况下,我才能正确进行删除:

PREFIX :      <http://localhost:2020/vocab/> 
DELETE {
    ?s a :answers
}
WHERE {
    ?s a :answers
}
# returns all the correct data
前缀:
删除{
答:答案
}
在哪里{
答:答案
}
#返回所有正确的数据
如果删除块更一般化,则不会返回任何内容:

PREFIX :      <http://localhost:2020/vocab/>
DELETE {
    ?s ?p ?o
}
WHERE {
    ?s a :answers
}
# returns 0 rows
前缀:
删除{
?s?p?o
}
在哪里{
答:答案
}
#返回0行

有两组不同的条件(大括号之间的东西:
{…}
)的目的是什么?究竟是哪一个选择了要删除的数据?

因为您删除的内容可能与您的位置不匹配

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

DELETE WHERE { ?s a :answers }
在第二种情况下,p和o不受约束。尝试:

DELETE {
    ?s ?p ?o
}
WHERE {
    ?s a :answers .
    ?s ?p ?o .
}