2009-12-08 27 views
3

如果三重存儲包含相同三元組的兩倍,那麼關於此冗餘的權威立場是什麼(如果存在)?RDF,權威視圖中的重複三元組​​?

此外,是否應允許三重商店在相同的上下文中存儲兩次相同的三重商品?

我問這個,因爲在rdflib顯然你可以存儲相同的三倍兩次(或更多)。這是讀者

import rdflib 
from rdflib import store 

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore') 

config_string = "host=localhost,password=foo,user=foo,db=foo" 
rt = s.open(config_string,create=False) 
if rt != store.VALID_STORE: 
    s.open(config_string,create=True) 

graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef("urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52")) 
rows = graph.query("SELECT ?id ?value { ?id <http://localhost#ha> ?value . }") 
for r in rows: 
    print r[0], r[1] 

,這是作家

import rdflib 
from rdflib import store 

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore') 

config_string = "host=localhost,password=foo,user=foo,db=foo" 
rt = s.open(config_string,create=False) 
if rt != store.VALID_STORE: 
    s.open(config_string,create=True) 

graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef("urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52")) 
graph.add((rdflib.URIRef("http://localhost/1000"), rdflib.URIRef("http://localhost#ha"), rdflib.Literal("18"))) 
graph.commit() 

這是我獲得

[email protected]:~/tmp/gd $ python ./reader2.py 
table kb_7b066eca61_relations Doesn't exist 
table kb_7b066eca61_relations Doesn't exist 
[email protected]:~/tmp/gd $ python ./reader2.py 
[email protected]:~/tmp/gd $ python ./reader2.py 
[email protected]:~/tmp/gd $ python ./writer2.py 
[email protected]:~/tmp/gd $ python ./reader2.py 
http://localhost/1000 18 
[email protected]:~/tmp/gd $ python ./writer2.py 
[email protected]:~/tmp/gd $ python ./reader2.py 
http://localhost/1000 18 
http://localhost/1000 18 

對我來說,它表現爲一個錯誤。修改後的版本讓我發現,這兩個三元組屬於同一個語境,確實有2個三元以及

len : 2 
http://localhost/1000 18 
http://localhost/1000 18 
(rdflib.URIRef('http://localhost/1000'), rdflib.URIRef('http://localhost#ha'), rdflib.Literal(u'18'), <Graph identifier=urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52 (<class 'rdflib.Graph.Graph'>)>) 
(rdflib.URIRef('http://localhost/1000'), rdflib.URIRef('http://localhost#ha'), rdflib.Literal(u'18'), <Graph identifier=urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52 (<class 'rdflib.Graph.Graph'>)>) 

回答

7

一個RDF三元店是一家集三元的,所以相同的三重不能出現兩次,顧名思義。然而,大多數rdf商店實際上是四商店(rdf圖的集合,也被稱爲數據集),並且在這種情況下,三元組可能會出現多次。這有時稱爲上下文,取決於商店(例如我的,Redland)。權限真正取決於用戶定義特定圖形名稱/上下文名稱的含義。

+0

這也是我的想法,但顯然我在rdflib中發現了一個bug,因爲我一次又一次地推動相同的三元組,並且我得到了重複。 – 2009-12-08 07:24:06

1

RDF是一種用於表達事實性聲明的語言,它被組織和分組成圖形。如果圖表包含「Alice is a Person」兩次,那只是多餘的。所以在圖中,三元組被標準化;重複它們沒有意義。但是,應用程序,商店和SPARQL查詢系統通常會收集來自不同來源的事實聲明。 SPARQL語言具有'GRAPH'關鍵字,用於您想要採用多圖透視圖並在不同來源中查找相同的三元組。

+0

「愛麗絲是一個人」兩次陳述可能是多餘的,但「愛麗絲打電話給鮑勃」說了兩次。在兩次不同的場合,'愛麗絲叫鮑勃'我不能這樣嗎?代表這一點的正確方法是什麼? – Jeff 2015-02-28 23:44:58

2

我們應該記住,任何特定的三元組可能都有不同於其他元數據的元數據 - 否則就是相同的三元組。元數據,如三元組的原始來源,連接信息的可能強度等等。僅僅計算一個三元組的副本數量以判斷一個連接的相對強度與其他可能的矛盾連接相比也是可行的。因此,一如既往,這完全取決於您打算如何處理您的數據。