sparql查询删除

时间:2012-03-14 16:01:20

标签: sparql

我在java中编写一个sparql查询来删除具有特定id的rdf数据。我正在尝试

Delete ?ID ?name Where { 
     ?ID rdf:type ex:example ex:name ?name 
     FILTER(?ID ="something") 
}

但它没有做任何事情。有谁知道我的错误是什么?

2 个答案:

答案 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") 
}