【问题标题】:Why does my OWL inferencer not give me the results I expected?为什么我的 OWL 推理器没有给我预期的结果?
【发布时间】:2012-10-24 20:13:43
【问题描述】:

嗨,语义网的人们,

在推断以下 OWL 代码后,我不希望在 NamedIndividual: instance_Dromen 中有 <rdf:type rdf:resource='#Tsunami'>。 不知何故,#Huis 和 #Auto 之间的不相交有问题,或者我没有以正确的方式使用补全?在推理器的结果中,NamedIndividual: instance_Dromen 具有以下输出:

--

<rdf:Description rdf:about="http://www.almfluss.com/rdf/0.1/Ontology.owl#instance_Dromen">
    <owl:sameAs rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#instance_Dromen"/>
    <rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Wielen"/>
    <rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Auto"/>
    <rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Onderstel"/>
    <rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Tsunami"/>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
    <rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Dromen"/>
  </rdf:Description>

我用作推理器输入的 OWL 代码是:


<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE rdf:RDF [
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY swrl "http://www.w3.org/2003/11/swrl#" >
    <!ENTITY swrlb "http://www.w3.org/2003/11/swrlb#" >
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
    <!ENTITY Ontology201210 "http://www.almfluss.com/rdf/0.1/Ontology.owl#" >
]>

    <rdf:RDF    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
                xmlns="http://www.almfluss.com/rdf/0.1/Ontology.owl#" 
                xmlns:Ontology201210="http://www.almfluss.com/rdf/0.1/Ontology.owl#" 
                xmlns:owl="http://www.w3.org/2002/07/owl#" 
                xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
                xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
                xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
                xml:base="http://www.almfluss.com/rdf/0.1/Ontology.owl#">

    <owl:DatatypeProperty rdf:about="#hasValue"/>

    <owl:Class rdf:about="#Dromen">
        <owl:equivalentClass>
            <owl:Class>
                <owl:unionOf rdf:parseType="Collection">
                    <rdf:Description rdf:about="#Huis"/>
                    <rdf:Description rdf:about="#Auto"/>
                </owl:unionOf>
            </owl:Class>
        </owl:equivalentClass>
        <owl:equivalentClass>
            <owl:Class>
                <owl:complementOf rdf:resource="#Werkloos"/>
            </owl:Class>
        </owl:equivalentClass>
        <owl:equivalentClass>
            <owl:Class>
                <owl:complementOf rdf:resource="#Arbeidsongeschikt"/>
            </owl:Class>
        </owl:equivalentClass>

    </owl:Class>
    <owl:NamedIndividual rdf:about="#instance_Dromen">
                <rdf:type rdf:resource="#Wielen"/>
                <rdf:type rdf:resource="#Onderstel"/>
    </owl:NamedIndividual>

    <owl:Class rdf:about="#Huis">
        <owl:equivalentClass>
            <owl:Class>
                <owl:complementOf rdf:resource="#Tsunami"/>
            </owl:Class>
        </owl:equivalentClass>
    </owl:Class>
    <owl:NamedIndividual rdf:about="#instance_Huis"/>

    <owl:Class rdf:about="#Auto">
        <owl:equivalentClass>
            <owl:Class>
                <owl:intersectionOf rdf:parseType="Collection">
                    <rdf:Description rdf:about="#Wielen"/>
                    <rdf:Description rdf:about="#Onderstel"/>
                </owl:intersectionOf>
            </owl:Class>
        </owl:equivalentClass>
        <owl:disjointWith rdf:resource="#Huis"/>
    </owl:Class>
    <owl:NamedIndividual rdf:about="#instance_Auto"/>

    <owl:Class rdf:about="#Werkloos">
        <owl:equivalentClass>
            <owl:Class>
                <owl:unionOf rdf:parseType="Collection">
                    <rdf:Description rdf:about="#ZelfOntslag"/>
                    <rdf:Description rdf:about="#Ontslagen"/>
                </owl:unionOf>
            </owl:Class>
        </owl:equivalentClass>
    </owl:Class>
    <owl:NamedIndividual rdf:about="#instance_Werkloos"/>

    <owl:Class rdf:about="#Arbeidsongeschikt"/>
    <owl:NamedIndividual rdf:about="#instance_Arbeidsongeschikt"/>

    <owl:Class rdf:about="#Wielen"/>
    <owl:NamedIndividual rdf:about="#instance_Wielen"/>

    <owl:Class rdf:about="#Onderstel"/>
    <owl:NamedIndividual rdf:about="#instance_Onderstel"/>

    <owl:Class rdf:about="#Ontslagen"/>
    <owl:NamedIndividual rdf:about="#instance_Ontslagen"/>

    <owl:Class rdf:about="#ZelfOntslag"/>
    <owl:NamedIndividual rdf:about="#instance_ZelfOntslag"/>

    <owl:Class rdf:about="#Tsunami"/>
    <owl:NamedIndividual rdf:about="#instance_Tsunami"/>
    </rdf:RDF>

我希望有人可以帮助我。

提前致谢。

问候, 马丁范德普拉特

【问题讨论】:

    标签: xml rdf owl inference-engine


    【解决方案1】:

    您的本体很混乱,例如,您说 Auto 与 Huis 不相交,但 Dromen 相当于 Huis 和 Auto 的结合。

    如果您是手写,请停止。去获取Protege 4 并用它来创作你的本体。除了使本体更容易编写之外,它还与各种推理器集成,因此您可以直接在 GUI 中检查一致性和可满足性。您还可以使用解释工具告诉您为什么做出特定的推断。

    最后,几乎总是需要 subClassOf 而不是等价物。等价在关系中是双向的,这通常不是作者的意图。

    【讨论】:

    • 感谢您的回答。但是,我不想使用像 Protege 这样的工具。我正在寻找我的问题的正式答案:你能从逻辑上解释为什么 instance_Dromen 个人在推理过程后得到 rdf:type Tsunami 吗? unionOf Huis & Auto 背后的想法以及 Auto en Huis 之间的脱节是因为我想创造一种情况,我的个人可能是 rdf:Domen 类型,但不能同时属于 type:Huis 和 type:Auto。
    【解决方案2】:

    您的instance_Dromen(为简洁起见,从现在起称为i)被定义为Wielen 类型和Onderstel 类型。导致它为Tsunami 类型的原因如下:

    1. 您已将类Auto 定义为等价于WielenOnderstel 的交集,因此i 被推断为Auto 类型。
    2. 由于i 属于Auto 类型,我们知道它不是Huis 类型(因为这两个类被定义为不相交的)。
    3. 由于Tsunami 被定义为Huis 的补集(即所有不是Huis 的都是Tsunami),并且i 不是Huis 类型,我们可以推断iTsunami

    更简洁地说,你的本体建模方式导致每个Auto 都是Tsunami

    【讨论】:

    • 谢谢!这正是我正在寻找的答案。这不是我所期望的行为。我同意 xml/rdf 不是最好的可读格式,但是这种格式在中使用得最多
    • @martijnplaat,如果您觉得我的回答有帮助,您可以通过投票和/或接受它来帮我一个大忙……
    • 对不起,我的声望只有 11,我需要 15 才能投票!不管怎样,我已经接受了你的回答。实际上,我有一个后续问题,但因此我必须开始一个新的问题页面..
    【解决方案3】:

    我同意@Michael 写的内容。关于将 OWL 代码作为(Stackoverflow)问题的一部分呈现的一些一般要点:

    • 使用人类可读的语法,即避免使用 XML 并避免使用 RDF(您同时使用...),因为两者对于人与人之间的交流来说都是不必要的冗长
    • 用简单的英语解释每个公理背后的意图
    • 使用英文实体名称(Stackoverflow 用户中并未广泛使用荷兰语)
    • 删除不相关的内容(例如本例中的 SWRL 命名空间前缀)

    在进行这些更改后,您可能只剩下几行代码,而问题可能会立即显现出来......

    【讨论】:

    • FWIW 我不认为实体名称是荷兰语的事实在这里特别重要 - 但我同意你的一般观点,即更易读的格式会更好:)
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2013-11-21
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    相关资源
    最近更新 更多