我在java中编写一个sparql查询来删除具有特定id的rdf数据。我正在尝试
Delete ?ID ?name Where {
?ID rdf:type ex:example ex:name ?name
FILTER(?ID ="something")
}
但它没有做任何事情。有谁知道我的错误是什么?
答案 0 :(得分:5)
该查询可能失败,可能有效的SPARQL查询越接近......
DELETE WHERE {
?id rdf:type ex:example;
ex:name ?name .
FILTER(?id = <http://foo.com/some/example/uri>)
}
var ?id
不能是字符串,因为它被定位为主题,而在RDF中,所有主题都是IRI,而不是文字。
如果您发布一些示例数据,我们可以提供更好的帮助。
答案 1 :(得分:2)
RDF表示意味着我们只能通过删除(子)图来进行删除。任何尝试删除SELECT查询中的等效字段都将导致错误。此外,在SPARQL 1.1 Update specification中可以看到多种形式的DELETE查询。问题中查询的另一个问题是使用的DELETE格式是WHERE子句用于定义将被删除的三元组时的快捷方式,但过滤器会混淆快捷方式。使用完整的DELETE语法应该可以正常工作:
PREFIX ex: <http://example.org#>
DELETE {
?id a ex:Example ;
ex:name ?name .
}
WHERE {
?id a ex:Example ;
ex:name ?name .
FILTER(str(?id) != "something")
}