2012-03-14 127 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) != "") 
}