SPARQL 为什么同时存在 DELETE 和 WHERE 条件?
SPARQL why are there both DELETE and WHERE conditions?
最近我根据匹配模式删除了一些数据 ?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
设置两组不同的条件(花括号之间的内容:{...}
)的目的是什么?哪一个实际选择要删除的数据?
因为你删除的可能不是你用WHERE匹配的。
第一种情况有特殊形式:
DELETE WHERE { ?s a :answers }
在第二个中,?p 和?o 没有绑定。尝试:
DELETE {
?s ?p ?o
}
WHERE {
?s a :answers .
?s ?p ?o .
}
如果您不需要 WHERE
子句,您可以使用 DELETE DATA
。它没有 WHERE 子句,只是删除了第一个子句中的任何模式。您可能想要使用 DELETE ... WHERE ...
的原因是 WHERE 子句赋予您更多权力来指定仅删除某些三元组。例如,在您的示例中,您可能不想删除整个图形,而是可能希望删除所有以 :answers 为主题的实例的三元组。这就是该查询应该做的。如果您这样做:DELETE DATA {?s ?p ?o}
应该删除整个图表。
最近我根据匹配模式删除了一些数据 ?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
设置两组不同的条件(花括号之间的内容:{...}
)的目的是什么?哪一个实际选择要删除的数据?
因为你删除的可能不是你用WHERE匹配的。
第一种情况有特殊形式:
DELETE WHERE { ?s a :answers }
在第二个中,?p 和?o 没有绑定。尝试:
DELETE {
?s ?p ?o
}
WHERE {
?s a :answers .
?s ?p ?o .
}
如果您不需要 WHERE
子句,您可以使用 DELETE DATA
。它没有 WHERE 子句,只是删除了第一个子句中的任何模式。您可能想要使用 DELETE ... WHERE ...
的原因是 WHERE 子句赋予您更多权力来指定仅删除某些三元组。例如,在您的示例中,您可能不想删除整个图形,而是可能希望删除所有以 :answers 为主题的实例的三元组。这就是该查询应该做的。如果您这样做:DELETE DATA {?s ?p ?o}
应该删除整个图表。