2011-11-27 92 views
3

我試圖找到一種方法來推斷/傳播完成基於類型的屬性,以防止名稱衝突:RDF - 如何根據rdf:type進行傳遞性屬性轉換?

:AOrder :Store :AStore ; 
     a :OrderType ; 
     :user :AUser . 

:AStore :name "Store Name"; 
     a :StoreType 

:AUser :name "Some User"; 
     a :UserType 

基於以上三倍,我想推斷其他幾個三元:

:AOrder :storeName "Store Name" . 
:AOrder :userName "Some User" . 

我該怎麼做?僅供參考,我目前正在使用Bigdata和芝麻。

一種方法是使用SPIN,但它看起來並不像Bigdata + Sesame那樣;它看起來像耶拿是唯一有可比性的東西。

回答

1

你可以表達這種使用SPARQL更新操作:

INSERT { 
    ?x :storeName ?store_name ; 
    :userName ?user_name . 
} 
WHERE { 
    ?x a :OrderType; 
    :Store [ :name ?store_name ] ; 
    :user [ :name ?user_name ] . 
} 

執行此操作時,您的店鋪進行更新(如果你在本地工作,你可以使用一個RepositoryListener攔截改變事件)和三元你想要插入。

或者,查看一些可用於芝麻的自定義推理工具。我不確定Bigdata是否支持自定義推理,但您可以查看this custom rule-based reasoner extension(雖然它略顯過時)。或者看看OWLIM,這是一個帶有OWL推理功能的Sesame後端,它還支持自定義規則。

+0

感謝您的回覆 - 我最終選擇了耶拿+耶拿規則。但無論如何,你是否知道你發佈的定製推理者是如何處理蘊含/合理的三元組的?它是否只是將所有內容添加到現有商店中,從而無法確定推斷的內容以及基礎數據是什麼? –

+0

不,因爲首先芝麻支持在API級別顯式和推斷三元組之間的區別,所以您將始終能夠確定哪個是哪個。另外,自定義推理器爲推斷的三元組使用單獨的上下文。 –