2016-04-18 25 views
0

可以說我有以下情形:三重商店如何使用鏈接的數據?

我有喜歡_http不同的域在網絡上的某個地方舉辦一些不同的本體文件://foo1.com/ontolgy1.owl#,_http://foo2.com/ ontology2.owl#等

我也有,我想基於這樣提到的本體文件中插入實例三店:

INSERT DATA 
{ 
    <http://foo1.com/instance1> a <http://foo1.com/ontolgy1.owl#class1>. 
    <http://foo2.com/instance2> a <http://foo2.com/ontolgy2.owl#class2>. 
    <http://foo2.com/instance2x> a <http://foo2.com/ontolgy2.owl#class2x>. 
} 

讓我們說_http://foo2.com/ ontolgy2.owl#class2x是在同一本體中定義的_http://foo2.com/ontolgy2.owl#class2的子類。

而且插入後,如果我運行一個SPARQL查詢是這樣的:

select ?a 
where 
{ 
    ?a rdf:type ?type. 
    ?type rdfs:subClassOf* <http://foo2.com/ontolgy2.owl#class2> . 
} 

的結果將是:

<http://foo2.com/instance2> 

,而不是:

<http://foo2.com/instance2> 
<http://foo2.com/instance2x> 

理所應當。發生這種情況是因爲本體文件_foo2.com/ontolgy2.owl#未導入到三重存儲中。

我的問題是:

我們能談談在這個例子中關於「鏈接」的數據?因爲在我看來,它根本沒有聯繫。它必須從本地導入到三重商店,之後您可以開始查詢。

假設您想對20個本體文件描述的一些複雜數據運行查詢,那麼需要導入所有20個本體文件。

這難道不是有點令人失望嗎?

我是否誤解了三重商店和關聯數據以及它們如何一起工作?

回答

2

它應該是。

我不確定應該這裏是合適的術語。 SPARQL查詢的語義是查詢存儲在端點存儲的特定圖形中的數據。 IRI差不多不透明標識符;僅僅因爲它們也可能是可以檢索附加數據的URL,並不強制任何特定的系統實際進行這種檢索。這樣做很容易使查詢行爲變得不可預知:「這個查詢昨天工作,爲什麼今天不工作?哦,遠程網站不再可用&hellip;」。

讓說_http://foo2.com/ontolgy2.owl#class2x是_http的子類:同本體中定義//foo2.com/ontolgy2.owl#class2。

記住,因爲的IRI是不透明的,任何人都可以定義在任何本體的術語。對於其他人來說,總是可以對資源說一些其他的東西。你無法跟蹤所有的信息。例如,如果我去寫本體,我可以聲明http://foo2.com/ontolgy2。貓頭鷹#class2x作爲一個類,並聲稱它等同於http://dbpedia.org/ontology/Person。如果系統有一些方法可以知道我在其他地方做了什麼,即使這樣做了,是否應該要求從中檢索信息?如果我創建了一個2GB大小的本體,該怎麼辦?當然,您的端點不能期望去檢索那個只是回答一個快速查詢?

我們可以在這個例子中談論「鏈接」數據嗎?因爲它似乎 我,它根本沒有鏈接。它必須從本地導入 三重商店,之後您可以開始查詢。

假設如果要運行一個查詢關於一些複雜數據的描述 由20本體文件,在這種情況下,我必須導入所有20本體 文件。

這在通常情況下,與有關鏈接數據的一點是,你有辦法,如果你選擇以獲取更多信息,而且你不必做盡可能多的工作中如何談判以確定該數據中的資源。但是,您可以使用在SPARQL中使用服務關鍵字來引用其他端點,並且可以提供一種鏈接類型。例如,知道DBpedia中有一個SPARQL端點,我可以運行包含DBpedia中有這樣的一個本地查詢:

select ?person ?localValue ?publicName { 
    ?person :hasLocalValueOfInterest ?localValue 
    service <http://dbpedia.org/sparql> { 
    ?person foaf:name ?publicName 
    } 
} 

您可以使用多個服務塊從多個端點的彙總數據;你不僅限於一個。這似乎與我很「聯繫」。