2013-10-19 135 views
3

我正在嘗試對具有給定資源作爲其主題的屬性的值執行簡單更新。SPARQL更新無法正常工作

這裏是我的查詢:

WITH <http://127.0.0.1:3000/dendro_graph> 
DELETE { <http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> ?o0 . 

} 
INSERT 
{ 
    <http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> "creator1" . 

} 
WHERE { <http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> ?o0 . 

} 

這樣做的結果是,刪除被執行,但不將INSERT;我最終破壞了該屬性的所有實例,但沒有添加新的值。

如果我刪除了WHERE子句,最終會出現重複的三元組,因爲它似乎沒有執行DELETE。

我在做什麼錯?

編輯:

此代碼將產生重複:

WITH <http://127.0.0.1:3000/dendro_graph> 
DELETE 
{ 
<http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> ?o0 . 

} 
INSERT 
{ 
    <http://127.0.0.1:3000/project/datanotes/records/teste/filho%20do%20teste> <http://purl.org/dc/elements/1.1/creator> "creator1" . 

} 
+1

其中SPARQL引擎和您正在使用哪個版本? – AndyS

+1

當你說「沒有WHERE子句」時,我假設你的意思是「WHERE {}」,否則它是一個語法錯誤。 當「WHERE {}」被使用時,?o0未被綁定,所以沒有任何東西被DELETE刪除。 – AndyS

+0

嗨,安迪,我正在使用Virtuoso版本:06.01.3127。當你說?o0沒有綁定時,你的意思是在DELETE子句中的?o0和WHERE子句之間沒有對應關係?如果是這樣的話,我該如何刪除所有具有指定主題和謂詞的三元組,如'?o0。',但是我不知道該對象然後執行插入操作?謝謝 –

回答

3

查詢而不WHERE子句不是合法SPARQL表達,並且應該導致語法錯誤。如果你使用的引擎接受這個,那麼這是引擎中的一個錯誤。

乍一看,對於早先的操作,你說刪除但不插入的同上:據我可以看到SPARQL表達式是正確的,如果你說插入部分沒有得到執行,那就意味着你已經發現了執行它的引擎中的一個錯誤。我建議你直接與開發者取得聯繫。

+0

截至今日,我使用最穩定版本的Virtuoso Open Source(版本:07.00.3203 Build:2013年10月20日)測試了相同的查詢,並驗證並運行。結果是:修改,刪除0(或更少)並插入1(或更少)三元組 - 完成。 我正要放棄所有這些SPARQL的東西,一定要誠實。在紙上看起來非常出色,但我已經使用OrientDB刪除了整個項目,而且這個項目也採用了相同的方式。 –

+0

我會嘗試聯繫郵件列表中的開發人員,只需確保它未在最新版本中修復。 –