我试图找到一种基于类型来推断/传播属性的方法,以防止名称冲突:

: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似乎并不具备它。看起来耶拿(Jena)是唯一可比的东西。

最佳答案

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

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

每当商店更新时都执行此操作(如果您在本地工作,则可以使用RepositoryListener拦截更改事件),然后将插入所需的三元组。

或者,查看一些可用于Sesame的自定义推理工具。我不确定Bigdata是否支持自定义推理程序,但是您可以看看this custom rule-based reasoner extension(尽管它有些过时了)。或看看OWLIM,它是具有OWL推理功能的芝麻后端,它也支持自定义规则。

10-06 16:13