我试图找到一种基于类型来推断/传播属性的方法,以防止名称冲突:
: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推理功能的芝麻后端,它也支持自定义规则。