2011-06-20 58 views
8

我正在嘗試芝麻和Virtuoso三重倉庫。在此刻,我使用Sesame Java API將RDF數據添加到兩個三重存儲中。更新Triplestore中的RDF

我RDF數據代表像可視數據,使用用戶數據等 不同的東西在那一刻,我可以添加視頻的RDF(標題,描述,位置等)到Triplestore

但我怎麼能更新商店裏的RDF?

例如,如果我使用芝麻的REST接口並使用更新的RDF生成PUT請求,則首先刪除存儲中的所有內容。

當我使用POST更新的數據(例如,視頻的標題已更改)時,標題(舊的和新的)都會被存儲。

你如何與三重商店合作? 也許我想念一些重要的東西。


編輯:

我現在用的語境芝麻和圖表的Virtuoso爲每個RDF條目。這種方式更新我可以先清除上下文並再次添加。由於我對兩個Triplestores都使用Sesame API(我們仍然不知道我們將使用哪一個),所以代碼看起來完全一樣。

ValueFactory f = rep.getValueFactory(); 
URI uri = f.createURI(urn); 
con.clear(uri); 
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri); 

感謝您的幫助

+0

注意炫技芝麻提供文檔中提供了添加RDF數據,以實例的Quad Store:http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtSesame2Provider – hwilliams

+0

@hwilliams。是的,我用過。但我不知道如何用api更新商店中的RDF。 – superbly

+0

Virtuoso具有SPARUL「修改」操作,該操作使用嵌入式刪除和插入操作執行與http://docs.openlinksw.com/virtuoso/sparqlextensions.html#rdfsparulexamples13 – hwilliams

回答

4

我假設你正在使用SPARQL工作。如果您不這樣做,那麼您可能應該:-)

許多三重商店支持SPARQL Update,這是修改SPARQL存儲中的RDF三元組的語言。這就像SQL的INSERT,UPDATE,DELETE等等。我不確定Sesame是否支持它 - SPARQL Update仍然是一個非常新的規範,目前還沒有完成。

另一個需要注意的有用的東西,特別是如果你想以REST方式工作,是Named Graphs。這允許在不同圖表中管理三元組,因此可以保持數據分離。例如,您可以將每個視頻的三元組保存在單獨的命名圖中,然後僅在PUT請求上更新該命名圖。您仍然可以使用SPARQL在所有命名圖上查詢整個商店。我再次不確定Sesame的REST API是否提供對命名圖的訪問。 (我敢肯定,在Java API做,我覺得他們稱之爲不同的東西,雖然上下文?)

+0

中詳述的SQL更新操作等效的操作,謝謝您的回答。仍然找出對我來說最好的方法。 SPARQL我必須稍後再使用。所以我試試看。 – superbly

+0

是芝麻調用命名圖上下文 – RobV

+0

再次感謝這個答案。沒有意識到我可以爲每個rdf條目使用上下文或圖形。這非常有用。 – superbly

2

所以採取了標題您具體的例子假設你有原來的RDF像這樣:

:something :title "Original Title" . 

你想改變它是這樣的:

:something :title "Updated Title" . 

使用芝麻的POST 只增加新的信息到指定的圖形(以芝麻術語上下文),重要不刪除任何現有的信息。

用RDF術語來說,這兩個三元組代表了不同的事實。芝麻(或其他任何三重商店)不知道第二個三聯應該取代第一個。這與您可能會用於更新屬性的傳統SQL /關係模型完全不同,因爲您無法修改三元組,所以RDF沒有適當的概念。您可以添加新的三元組或刪除現有的三元組。

爲了獲得您希望的更新行爲,您必須刪除舊的三元組(Sesame的REST API支持此HTTP DELETE),然後添加替換它的新三元組(使用Sesame的POST操作,就像您當前所做的那樣)。

對於您使用的任何三重商店來說,這幾乎都適用。如果像cyrgi建議您使用SPARQL更新配套商店,那麼你可以發出以下(假設你使用命名圖),以更新端點:

DELETE DATA 
{ 
    GRAPH <http://example.org/graph> { :something :title "Original Title" . } 
}; 
INSERT DATA 
{ 
    GRAPH <http://example.org/graph> { :something :title "Updated Title" . } 
}