如何解决SPARQL 更新不插入可选语句
我尝试使用 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>
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。