有没有办法在 OWL 中表达析取对象 属性 断言?
Is there a way to express disjunctive object property assertions in OWL?
我想知道是否有一种方法可以在 OWL 中表达逻辑上复杂的对象 属性 断言。例如,我如何表达“约翰喜欢橙子或玛丽喜欢橙子”?在像一阶谓词逻辑这样的语言中,这可能被翻译成这样:
Ljo v Lmo
在OWL中是否有一种同样简单的方法来表达这种对象属性语句?
注意:我知道包含逻辑析取的一般公理(例如,“所有法人实体要么是公司要么是个人”)可以使用集合并集的概念来表达。出于目前的目的,我对涉及特定 individuals/instances 的断言更感兴趣,就像我上面的示例一样。
感谢您的帮助!
严格来说,这不能在 OWL 中完全按照您的意愿完成,因为在 OWL 中,析取是在 class 之间定义的,而不是在个人之间。事实上,选择描述逻辑这个名称是为了强调这一知识表示形式主义家族用于根据概念描述来描述感兴趣的领域——即 classes,而不是个体。例如,参见 this paper。因此,老实说,我不认为在没有 classes 的情况下指定个体之间的关系是 OWL.
的预期用途
但是,您需要的可以通过一种复杂的方式实现:
- 将
mary
和 john
定义为个体。
- 将
mary_or_john
定义为个体并将其类型设置为 {john} or {mary}
。
- 现在你可以声明
mary_or_john likes oranges
。
这里的{mary}
是指由单个个体mary
组成的class。 {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/07
正如@AntoineZimmermann 指出的那样,您可以使用空白节点而不是引入个人 john_or_mary
来完成此操作。出于某种原因,我一直在关注如何在 Protege 中执行此操作,并且由于 Protege 不支持空白节点,因此您需要介绍一个人。
我想知道是否有一种方法可以在 OWL 中表达逻辑上复杂的对象 属性 断言。例如,我如何表达“约翰喜欢橙子或玛丽喜欢橙子”?在像一阶谓词逻辑这样的语言中,这可能被翻译成这样:
Ljo v Lmo
在OWL中是否有一种同样简单的方法来表达这种对象属性语句?
注意:我知道包含逻辑析取的一般公理(例如,“所有法人实体要么是公司要么是个人”)可以使用集合并集的概念来表达。出于目前的目的,我对涉及特定 individuals/instances 的断言更感兴趣,就像我上面的示例一样。
感谢您的帮助!
严格来说,这不能在 OWL 中完全按照您的意愿完成,因为在 OWL 中,析取是在 class 之间定义的,而不是在个人之间。事实上,选择描述逻辑这个名称是为了强调这一知识表示形式主义家族用于根据概念描述来描述感兴趣的领域——即 classes,而不是个体。例如,参见 this paper。因此,老实说,我不认为在没有 classes 的情况下指定个体之间的关系是 OWL.
的预期用途但是,您需要的可以通过一种复杂的方式实现:
- 将
mary
和john
定义为个体。 - 将
mary_or_john
定义为个体并将其类型设置为{john} or {mary}
。 - 现在你可以声明
mary_or_john likes oranges
。
这里的{mary}
是指由单个个体mary
组成的class。 {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/07
正如@AntoineZimmermann 指出的那样,您可以使用空白节点而不是引入个人 john_or_mary
来完成此操作。出于某种原因,我一直在关注如何在 Protege 中执行此操作,并且由于 Protege 不支持空白节点,因此您需要介绍一个人。