物业链推理rdf:type

时间:2010-01-17 21:05:23

标签: rdf semantic-web owl pellet

我试图让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的引用。

任何人都可以了解可能发生的事情吗?我真的很感激任何人都可以提供帮助。

1 个答案:

答案 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更轻,更不具有表现力(更不用说在多项式时间内不能保证可判定)