我试图让Pellet将属性从类传播到属于这些类的个体.例如,如果我有属性X的A类,和rdf:type = A类的个人B,我希望个人B在运行推理器后拥有属性X.我正在使用
OWL 2 New Features页面上引用的属性链包含技术.如果我在属性链中使用自己的自定义属性,这种技术可以很好地工作,但如果我尝试使用rdf:type本身则不行.以下是我的RDF / XML的一些相关剪辑.
Ontology Class(由Jena生成;注意“spread”属性,因为这是我试图传播给Person类的人):
<rdf:Description rdf:about="http://family/person">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<owl:sameAs rdf:resource="http://family/person"/>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<owl:equivalentClass rdf:resource="http://family/person"/>
<owl:disjointWith rdf:resource="http://www.w3.org/2002/07/owl#Nothing"/>
<j.1:spread rdf:resource="http://spread/specificSpread"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
</rdf:Description>
“传播”属性本身(由我手动编写,而不是由Jena生成,因为Jena的API不支持对象属性链):
<rdf:Description rdf:about="http://spread/generalSpread">
<owl:propertyChainAxiom rdf:parseType="Collection">
<owl:ObjectProperty rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/>
<owl:ObjectProperty rdf:about="http://spread/generalSpread"/>
</owl:propertyChainAxiom>
</rdf:Description>
在推理之前,俄狄浦斯人看起来像这样:
<rdf:Description rdf:about="http://family/Oedipus">
<rdf:type rdf:resource="http://family/person"/>
</rdf:Description>
这个想法是,在推理之后,它看起来像这样:
<rdf:Description rdf:about="http://family/Oedipus">
<rdf:type rdf:resource="http://family/person"/>
<j.1:spread rdf:resource="http://spread/specificSpread"/>
</rdf:Description>
我有一种感觉,指的是rdf:type作为一个rdf:资源可能是事情变得棘手,因为我很确定它不是一种资源.但我不确定如何解决它.我也通过Pellet的命令行lint程序运行它,它似乎没有问题,除了它为rdf:type创建了一个显式条目,如下所示:
<owl:ObjectProperty rdf:about="&rdf;type"/>
看起来有点奇怪,也可能暗示它不理解我对rdf:type的引用.
任何人都可以对可能发生的事情有所了解吗?我真的很感激任何人都可以提供帮助.
最佳答案 非常重要的编辑
事实证明,在OWL DL的范围内,属性传播是可能的.例如,如果要使用值simpleSpread传播属性spread(假设两者都已在RDF中定义),则可以执行类似这样的操作(在RDF / XML中):
<rdf:Description rdf:about="http://family/person">
<rdfs:subClassOf>
<owl:hasValue rdf:resource="http://spread/simpleSpread"/>
<owl:onProperty rdf:resource="http://spread/hasSpread"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Restriction"/>
</rdfs:subClassOf>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
</rdf:Description>
不再那么重要了
好的,为了信息的完整性,我会在这里发布相关的答案信息.这些东西来自与pellet-users邮件列表上的人交谈.线程已存档并从我的initial message开始.按照线程查找详细信息.
从本质上讲,OWL DL不允许对内置属性和数据类型进行“反射”.允许这可能违反OWL DL保证的多项式时间可判定性.为了实现这一点,你必须使用OWL Full的OWL RL profile,它可以平等地处理OWL中的所有内容,从而允许在rdf:type上使用推理.
这个问题的主要问题是找到一个支持DL和RL的推理器(或者是reasoners的组合),因为RL比DL更轻,更不具有表现力(更不用说在多项式时间内不能保证可判定).