我正在尝试对具有给定资源作为主题的属性的值进行简单更新。
这是我的问题:
WITH <http://127.0.0.1:3000/dendro_graph>
DELETE { <http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> ?o0 .
}
INSERT
{
<http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> "creator1" .
}
WHERE { <http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> ?o0 .
}
这样做的结果是删除被执行,但插入不是;我最终销毁了该属性的所有实例,但没有添加任何新值。
如果我删除了WHERE子句,我最终会出现重复的三元组,因为它似乎没有执行DELETE。
我做错了什么?
编辑:
此代码生成重复项:
WITH <http://127.0.0.1:3000/dendro_graph>
DELETE
{
<http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> ?o0 .
}
INSERT
{
<http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> "creator1" .
}
答案 0 :(得分:3)
没有WHERE子句的查询不是合法的SPARQL表达式,应该导致语法错误。如果你正在使用的引擎接受了这个,那么这就是该引擎中的一个错误。
乍一看,同样适用于之前的操作,你说删除但不插入:据我所知,SPARQL表达式是正确的,如果你说插入部分没有执行,那就意味着你发现了执行它的引擎中的一个错误。我建议您直接与开发人员联系。
答案 1 :(得分:0)
这是我过去常常使用的解决方法(最后感谢上帝)。您似乎可以使用分号;
在单个操作中指定要在图表上执行的多个操作。
我最后指定了DELETE
语句,然后是UPDATE
一个
检查此代码示例:SPARQL Update example for updating more than one triple in a single query