2011-11-27 90 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级别显式和推断三元组之间的区别,所以您将始终能够确定哪个是哪个。另外,自定义推理器为推断的三元组使用单独的上下文。 –