2012-03-14 87 views
2

我正在用java写一个sparql查询来删除具有特定ID的rdf数据。我想用要删除的sparql查询

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

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

回答

4

查询是可能失败的,越接近SPARQL查询可能工作是...

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

的VAR ?id不能是字符串,因为它被定位为主题,在RDF所有科目都IRIS,不是文字。

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

+0

我觉得现在的问题是SPARQL更新,因为我得到的遭遇“‘删除’”删除‘’第6行的错误,列1 期待一个作者: “前缀”... “select”... “construct”... “describe”... “ask”... 你知道我是否可以做任何事情来运行删除查询? – user1259487 2012-03-17 11:13:41

+0

您正在使用哪个三重商店? – 2012-03-17 16:49:15

+0

错误消息与SPARQL查询和SPARQL更新之间的差异有关。他们在Jena中使用不同的类来表示(我猜可能是您正在使用的类),并且它们通常会作为不同的端点URL公开:s。这些不符合设计,因此是错误。 – 2017-05-15 11:21:46

0

RDF表示意味着我们只能通过删除(子)图来进行删除。任何试图删除SELECT查询中字段的等效内容都会导致错误。此外,还有多种DELETE查询形式可以在SPARQL 1.1 Update specification中看到。在问题中的查询的另一个问题是,所使用的DELETE格式是WHERE子句用于定义将被删除的三元组时的快捷方式,但过滤器会混淆快捷方式。使用完整DELETE语法应该只是罚款:

PREFIX ex: <http://example.org#> 
DELETE { 
    ?id a ex:Example ; 
     ex:name ?name .} 
WHERE { 
    ?id rdf:type ex:Example ; 
    ex:name ?name . 
    FILTER(str(?id) != "") 
}