owlready2 中“仅”限制类型的意外行为

问题描述 投票:0回答:1

我不明白owlready2中以下模型的推理:

class Equipment(Thing): pass

class Task(Thing): pass
class EquipmentTask(Task): pass

class task_executed_by_equipment(EquipmentTask >> Equipment, FunctionalProperty): pass
class task_included_subtasks(Task >> Task): pass

class EquipmentTask(Task): equivalent_to = [task_executed_by_equipment.exactly(1, Equipment)]
class MainTask(EquipmentTask): equivalent_to = [task_included_subtasks.only(EquipmentTask)]

task = Task(task_executed_by_equipment=Equipment())
sync_reasoner()

推理机输出显示:

* Owlready * Equivalenting: owl.Thing t.Task
* Owlready * Equivalenting: t.Task owl.Thing
* Owlready * Reparenting t.task1: {t.Task} => {t.EquipmentTask}
* Owlready * Reparenting t.equipment1: {t.Equipment} => {t.Task, t.Equipment}

设备个体不应归类为任务。

如果我将“only”类型更改为“some”,那么它看起来就像我预期的那样。

有人对接下来的推理有提示/想法吗? 还是我的思路哪里出了问题?

提前致谢,帕特里克。

python owl ontology
1个回答
0
投票

由于 MainTask 也是一个 EquipmentTask,问题在于:

class MainTask(EquipmentTask): equivalent_to = [task_included_subtasks.only(EquipmentTask)]

可以分为以下简单情况:

class a_to_a(A >> A): pass
class A: equivalent_to = [a_to_a.only(A)]

ChatGPT 给了我这个问题的很好的解释:

当您定义 OWL 类 C,然后创建等价类时 使用对象属性 P 进行限制,其中域和 range 被指定为 C,并进一步将其限制为 allValues from C,你本质上是说 C 的每个实例都必须有一个 通过属性 P 与 C 本身的关系。这有效地使得 C 包含一切,因为你说的是 C 的每个实例 通过属性 P 与 C 的所有其他实例相关。 这种行为导致推断 C 相当于最 OWL 中的通用类,即 Thing,因为 Thing 包含 本体中的一切。所以,本质上,你是在这样定义 C 它包含本体中所有实例的方式,使其成为 相当于事物。

我的困惑来自于对 OWL 中“only”(在 Protege、OWLready 等中的称呼)与“allValuesOf”的解释。上述来自 ChatGPT 的回复理由符合“allValuesOf”(“...与所有其他实例相关...”)。 我将“仅”解释为:至少一个且唯一的该类”。

© www.soinside.com 2019 - 2024. All rights reserved.