rdf - 有没有办法在 OWL 中表达析取对象属性断言?
问题描述
我想知道是否有一种方法可以在 OWL 中表达逻辑上复杂的对象属性断言。例如,我该如何表达“约翰喜欢橘子或玛丽喜欢橘子”?在像一阶谓词逻辑这样的语言中,可以这样翻译:
Ljo v Lmo
是否有一种同样简单的方法可以在 OWL 中表达这种对象属性语句?
注意:我知道包含逻辑析取的一般公理(例如,“所有法律实体都是公司或个人”)可以使用集合并集的概念来表达。就目前而言,我对涉及特定个人/实例的断言更感兴趣,就像我上面的例子一样。
谢谢你的帮助!
解决方案
严格来说,这不能在 OWL 中完全按照您的意愿完成,因为在 OWL 中,析取是在类之间定义的,而不是在个体之间定义的。事实上,选择描述逻辑这个名称是为了强调这个知识表示形式家族是用来根据概念描述来描述感兴趣的领域——即类,而不是个人。例如见这篇论文。因此,老实说,我不认为在没有类的情况下指定个人之间的关系是 OWL 的预期用途。
但是,您所需要的可以通过一种复杂的方式来实现:
- 定义
mary
和john
作为个人。 - 定义
mary_or_john
为个人并将其类型设置为{john} or {mary}
。 - 现在你可以说
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 不支持空白节点,因此您需要介绍一个人。
推荐阅读
- amazon-web-services - Redshift:无效操作:超过允许的最大存储过程数
- python - 从数据框中的列表中删除字符串
- java - 比较两个 HashMap 并将映射值相乘
- javascript - 如何在每次页面加载时停止执行 JavaScript 代码
- php - 从列表php中删除项目的最佳方法
- flutter - 在 Play 商店中将 Flutter 应用程序从旧版本更新到新版本
- amazon-web-services - 有没有办法将 EBS 快照复制到其他地区的另一个账户?(跨地域、跨账号)
- laravel - 如何在laravel中制作两个If条件
- javascript - 功能:调用 JSON 数据的 API,显示所需参数的速率 --> IMPORTJSON(url,xpath) ex。IMPORTJSON(x.com, rates.f) --> 0.042
- user-interface - 您可以在不创建自定义对话框的情况下更改默认 messageDlg 选项吗?