sparql查询删除

use*_*487 4 sparql

我正在用Java编写sparql查询,以删除具有特定ID的rdf数据。我正在尝试

Delete ?ID ?name Where { 
     ?ID rdf:type ex:example ex:name ?name 
     FILTER(?ID ="something") 
}
Run Code Online (Sandbox Code Playgroud)

但它什么也没做。有谁知道我的错误吗?

Man*_*res 5

该查询可能失败,更有效的SPARQL查询可能是...

DELETE WHERE { 
     ?id rdf:type ex:example;
         ex:name ?name .
     FILTER(?id = <http://foo.com/some/example/uri>) 
}
Run Code Online (Sandbox Code Playgroud)

var ?id不能是字符串,因为它定位为主题,并且在RDF中,所有主题都是IRI,而不是文字。

如果您发布一些示例数据,我们也许可以提供更好的帮助。


Rob*_*kka 5

RDF 表示意味着我们只能通过删除(子)图来进行删除。任何删除 SELECT 查询中的等效字段的尝试都会导致错误。此外,DELETE 查询有多种形式,如SPARQL 1.1 更新规范中所示。问题中查询的另一个问题是,使用的 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") 
}
Run Code Online (Sandbox Code Playgroud)