我试图找到一种方法来推断/传播基于类型的属性,以防止名称冲突:
: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" .
我怎样才能做到这一点?仅供参考,我目前正在使用大数据和芝麻。
一种方法是使用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拦截更改事件),并将插入您想要的三元组。
或者,查看一些可用于芝麻的自定义推理工具。我不确定Bigdata是否支持自定义推理器,但你可以查看this custom rule-based reasoner extension(虽然它有点过时了)。或者看看OWLIM,这是一个具有OWL推理功能的芝麻后端,它也支持自定义规则。