2017-05-31 35 views
0

我想知道爲什麼我們必須加載本體,在查詢時也提供其名稱空間?爲什麼加載本體是不夠的?爲什麼在查詢本體時我們必須加載本體,還要提供其名稱空間?

要明白我的問題比較好,這裏是一個示例代碼:

g = rdflib.Graph() 
g.parse('ppp.owl', format='turtle') 
ppp = rdflib.Namespace('http://purl.org/xxx/ont/ppp/') 
g.bind('ppp', ppp) 

在第2行,我們已經打開了本體(ppp.owl),但在第3行,我們還提供了命名空間。名稱空間是否顯示程序如何處理本體?

乾杯, RF

+0

誰告訴你,你必須添加一個命名空間?你對這些行做的是聲明一個命名空間前綴。沒有更多,沒有更多。 – AKSW

回答

3

要在您需要的語義網指定元素的URI:獨特的資源標識符,這是由命名空間的localName的。例如,考慮一個RDF類Person;你會如何區分Person DBpedia類http://dbpedia.org/ontology/Person與某個其他本體的Person?您需要命名空間http://dbpedia.org/ontology/和本地名稱Person。這兩者都可以唯一識別班級。

現在回到您的具體問題,當您查詢本體時,您可能會使用多個名稱空間,但某些名稱空間可能不是您的本體。您需要其他名稱空間來查詢您自己的本體,例如rdfrdfsowl。例如,如果沒有rdf:type屬性(rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>命名空間下包含的屬性),而不是您的本體命名空間,則很少寫任意查詢。因此,您需要指定名稱空間。

那麼,現在你應該知道爲什麼要使用命名空間,那麼我們可以繼續。爲什麼每次需要時重複命名空間的整個字符串?它只不過是附加到查詢中使用的本地名稱的前綴字符串,以避免詳盡地寫出完整的uri。查看<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>type之間的區別。

編輯

由於@AKSW說,作爲一個結論,沒有必要爲了與本體合作聲明命名空間但其資源URI具有特定的工作經常當它增加了便利性命名空間。

+0

您應該添加一個結論,即不需要聲明一個命名空間以便與本體一起工作,但是當使用其URI具有特定命名空間的資源經常工作時,它增加了便利性 – AKSW

+0

將其添加到我的答案 –

+0

感謝中位數。我的問題似乎並不清楚。我明白如何使用名稱空間和我們使用它們的原因。但是在這個特定的示例代碼中,程序員已經從本地文件加載了本體,並且添加了它的名稱空間。如果沒有定義名稱空間並在本地加載文件,代碼似乎不起作用。現在我的問題是爲什麼這是這種情況?爲什麼只有其中一個是不夠的?或者我可能在這裏錯過了一個觀點?謝謝。 –

相關問題