首页 > 解决方案 > 有没有办法在 OWL 中表达析取对象属性断言?

问题描述

我想知道是否有一种方法可以在 OWL 中表达逻辑上复杂的对象属性断言。例如,我该如何表达“约翰喜欢橘子或玛丽喜欢橘子”?在像一阶谓词逻辑这样的语言中,可以这样翻译:

Ljo v Lmo

是否有一种同样简单的方法可以在 OWL 中表达这种对象属性语句?

注意:我知道包含逻辑析取的一般公理(例如,“所有法律实体都是公司或个人”)可以使用集合并集的概念来表达。就目前而言,我对涉及特定个人/实例的断言更感兴趣,就像我上面的例子一样。

谢谢你的帮助!

标签: rdfowlturtle-rdf

解决方案


严格来说,这不能在 OWL 中完全按照您的意愿完成,因为在 OWL 中,析取是在类之间定义的,而不是在个体之间定义的。事实上,选择描述逻辑这个名称是为了强调这个知识表示形式家族是用来根据概念描述来描述感兴趣的领域——即类,而不是个人。例如见这篇论文。因此,老实说,我不认为在没有类的情况下指定个人之间的关系是 OWL 的预期用途。

但是,您所需要的可以通过一种复杂的方式来实现:

  1. 定义maryjohn作为个人。
  2. 定义mary_or_john为个人并将其类型设置为{john} or {mary}
  3. 现在你可以说mary_or_john likes oranges

这里{mary}指由单个个体组成的类mary。类似的{john}

这是 OWL 的定义:

<owl:ObjectProperty rdf:about="likes"/>

<owl:NamedIndividual rdf:about="john"/>
<owl:NamedIndividual rdf:about="mary"/>
<owl:NamedIndividual rdf:about="oranges"/>

<owl:NamedIndividual rdf:about="john_or_mary">
    <rdf:type>
        <owl:Class>
            <owl:unionOf rdf:parseType="Collection">
                <owl:Class>
                    <owl:oneOf rdf:parseType="Collection">
                        <rdf:Description rdf:about="john"/>
                    </owl:oneOf>
                </owl:Class>
                <owl:Class>
                    <owl:oneOf rdf:parseType="Collection">
                        <rdf:Description rdf:about="mary"/>
                    </owl:oneOf>
                </owl:Class>
            </owl:unionOf>
        </owl:Class>
    </rdf:type>
    <likes rdf:resource="oranges"/>
</owl:NamedIndividual>

2021 年 10 月 7 日更新 正如@AntoineZimmermann 指出的那样,您可以使用空白节点而不是引入个人来做到这一点john_or_mary。出于某种原因,我一直关注如何在 Protege 中执行此操作,并且由于 Protege 不支持空白节点,因此您需要介绍一个人。


推荐阅读