RDF——如何根据RDF:type进行可传递属性的转换?

RDF——如何根据RDF:type进行可传递属性的转换?,rdf,owl,sesame,blazegraph,Rdf,Owl,Sesame,Blazegraph,我试图找到一种基于类型推断/传播属性的方法,以防止名称冲突: :AOrder :Store :AStore ; a :OrderType ; :user :AUser . :AStore :name "Store Name"; a :StoreType :AUser :name "Some User"; a :UserType 根据上面的三元组,我想推断出其他几个三元组: :AOrder :storeName "Store Na

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

: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 ] .
 }
每当更新存储时执行此操作(如果您在本地工作,则可以使用来截获更改事件),并且将插入所需的三元组


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

感谢您的回复,我最终选择了Jena+Jena规则。但是无论如何,你知道你发布的自定义推理器是如何处理蕴涵/推理三元组的吗?它是否只是将所有内容添加到现有存储中,使其无法分辨推断出的内容和基础数据?不,因为首先,Sesame在API级别支持显式和推断出的三元组之间的区别,因此您将始终能够分辨出哪个是哪个。此外,自定义推理器为推断的三元组使用单独的上下文。