我试图让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>
“Spread”属性本身(由我手动编写,而不是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的引用。
任何人都可以了解可能发生的事情吗?我真的很感激任何人都可以提供帮助。
答案 0 :(得分:2)
非常重要的编辑
实际上,事实证明,在OWL DL的范围内,属性传播是可能的。例如,如果要使用值spread
传播属性simpleSpread
(假设两者都已在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更轻,更不具有表现力(更不用说在多项式时间内不能保证可判定)