3

我正在尝试找到一种方法来根据类型推断/传播属性以防止名称冲突:

: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 和 Sesame。

一种方法是使用 SPIN,但 Bigdata + Sesame 似乎没有它;看起来耶拿是唯一可以与之媲美的东西。

4

1 回答 1

1

您可以使用 SPARQL 更新操作来表达这一点:

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

每当您的商店更新时执行此操作(如果您在本地工作,您可以使用RepositoryListener来拦截更改事件)并且您想要的三元组将被插入。

或者,查看一些可用于 Sesame 的自定义推理工具。我不确定 Bigdata 是否支持自定义推理器,但您可以查看这个基于规则的自定义推理器扩展(尽管它有点过时)。或者看看OWLIM,它是一个芝麻后端,具有 OWL 推理能力,也支持自定义规则。

于 2011-11-28T05:57:21.500 回答