2010-01-17 64 views
4

我想让Pellet将属性从类传播到属于这些类的个人。例如,如果我有属性X的属性A和属性为rdf:type =属性A的属性B,我希望个人B在运行推理器后拥有属性X.我正在使用OWL 2 New Features页面上引用的属性链包含技术。如果我在属性链中使用自己的自定义属性,该技术完美工作,但如果我尝试使用rdf:type本身,则此方法无效。这里是我的RDF/XML的一些相关剪辑。rdf上的属性链推理:类型

本体类(由耶拿产生;注意“传播”属性,因为这是我试图传播到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> 

“传播”属性本身(书面手动我,不与耶拿产生自耶拿的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一种感觉:类型为RDF:资源可能是那里的东西越来越扭曲,因为我很确定这不是一种资源。但我不知道如何解决它。我跑了通过粒料的命令行lint程序以及和它似乎没有与它的问题,只是它创造了RDF明确的条目:类型是这样的:

<owl:ObjectProperty rdf:about="&rdf;type"/> 

看起来有点怪对我来说也可能暗示它不理解我对rdf:type的引用。

任何人都可以阐明可能发生的事情吗?我真的很感谢任何人可以提供的帮助。

+0

完美的问题semanticoverflow.com – harschware 2011-03-10 22:33:16

+0

在我问这个问题的时候并不存在。 – 2011-03-11 01:52:50

+1

这只是一个只有3个月的宝贝,并不为人所知:-)但是,我对这个问题的读者发表了更多评论。和(+1)好问题。 – harschware 2011-03-11 03:08:11

回答

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> 

不是那么重要

好的,为了使信息完整,我会在这里发布相关答案。这些东西来自与用户邮件列表上的人交谈。该线程已存档,并以我的initial message开头。按照线索详细了解发生的事情。

基本上,OWL DL不允许在内置属性和数据类型上“反射”。允许这可能会违反由OWL DL保证的多项式时间可判定性。为了达到这个目的,你必须使用OWL Full的OWL RL profile,它将OWL中的所有内容都等同处理,从而允许使用超过rdf:type的推断。

与此相关的主要问题是找到支持DL和RL的推理器(或reasoners的组合),因为RL比DL更轻量且表达力更低(更不用说不保证在多项式时间内可以确定)。