【发布时间】:2013-10-19 13:34:52
【问题描述】:
我正在尝试对以给定资源作为主题的属性的值进行简单更新。
这是我的查询:
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 .
}
这样的结果是执行了delete,但是insert没有执行;我最终销毁了该属性的所有实例,但没有添加新值。
如果我删除 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" .
}
【问题讨论】:
-
您使用的是哪个 SPARQL 引擎和哪个版本?
-
当您说“没有 WHERE 子句”时,我假设您的意思是“WHERE {}”,否则是语法错误。当使用“WHERE {}”时,?o0 没有被绑定,所以没有任何内容被删除。
-
嗨,安迪,我正在使用 Virtuoso 版本:06.01.3127。当你说 ?o0 没有绑定时,你的意思是 DELETE 子句中的 ?o0 和 WHERE 子句之间没有对应关系?如果是这种情况,我怎样才能删除所有指定了主语和谓语的三元组,比如`127.0.0.1:3000/project/datanotes/records/teste/…> purl.org/dc/elements/1.1/creator> ?o0 .´,但是我不知道对象然后执行插入?谢谢
-
我已经准备放弃这个,运行两个查询,但这真的很糟糕......它对数据库的负担更大,如果删除和插入之间出现错误,它会不一致...
-
检查我编辑的答案以获取不带 WHERE 子句的代码,该子句会生成重复项。
标签: sparql