问题描述
我尝试使用 SPARQL 更新查询,这样它会删除图中的三元组,然后插入新的三元组,即使没有发生删除。
在创建图 http://example.de/ 后,我在 Virtuoso SPARQL 端点中将此查询作为示例:
WITH <http://example.de/>
DELETE {
<http://example.de/RheinMetall+AG>
<http://dbpedia.org/property/locationStreet>
?0 .
}
INSERT {
<http://example.de/RheinMetall+AG>
<http://dbpedia.org/property/locationStreet>
<http://dbpedia.org/resource/RheinMetall+Platz+1> .
}
WHERE
{ OPTIONAL
{ <http://example.de/RheinMetall+AG>
<http://dbpedia.org/property/locationStreet>
?0
}
}
它不插入任何三元组:
Modify <http://example.de/>,delete 0 (or less) and insert 0 (or less) triples -- done
如果我将 WHERE
子句留空,它将插入一个三元组。之后原始查询也会删除和插入一个三元组。
但我也希望它在三元组不在图表中的情况下工作。是否可以在更新查询中克服该问题,或者我是否必须分别调用 delete 和 insert?
感谢您的帮助!
解决方法
一个解决方案(已经提到)是在一个请求中有两个操作。这也意味着 OPTIONAL 不是必需的,DELETE
可以是 DELETE WHERE
:WITH DELETE {} WHERE {}
也可以。
DELETE WHERE {
GRAPH <http://example.de/> {
<http://example.de/Rheinmetall+AG>
<http://dbpedia.org/property/locationStreet>
?0
}
} ;
INSERT DATA {
GRAPH <http://example.de/> {
<http://example.de/Rheinmetall+AG>
<http://dbpedia.org/property/locationStreet>
<http://dbpedia.org/resource/Rheinmetall+Platz+1>
}
}