5

我试图让 Pellet 将属性从类传播到属于这些类的个人。例如,如果我有具有属性 X 的 A 类和具有 rdf:type=A 类的个体 B,我希望个体 B 在运行推理器后具有属性 X。我正在使用OWL 2 New Features页面上引用的属性链包含技术。如果我在属性链中使用我自己的自定义属性,这种技术非常有效,但如果我尝试使用 rdf:type 本身,它就不起作用。以下是我的 RDF/XML 的一些相关片段。

本体类(由 Jena 生成;注意“传播”属性,因为这是我试图传播给 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:resource 可能是事情变得棘手的地方,因为我很确定它不是资源。但我不知道如何解决它。我也通过 Pellet 的命令行 lint 程序运行它,它似乎没有问题,只是它为 rdf:type 创建了一个显式条目,如下所示:

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

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

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

4

1 回答 1

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> 

不再那么重要了

好的,为了信息完整性,我将在此处发布相关答案信息。这些东西来自与颗粒用户邮件列表上的人交谈。该线程已存档,并从我的初始消息开始。跟踪线程以详细了解发生的事情。

本质上,OWL DL不允许对内置属性和数据类型进行“反射”。允许这样做可能会违反 OWL DL 保证的多项式时间可判定性。为了实现这一点,您必须使用 OWL Full 的OWL RL 配置文件,它平等地对待 OWL 中的所有事物,从而允许对rdf:type.

这样做的主要问题是找到一个支持 DL 和 RL 的推理器(或推理器的组合),因为 RL 比 DL 更轻量级且表达性更低(更不用说不能保证在多项式时间内可判定)。

于 2010-01-19T00:41:15.683 回答