我目前正在Protégé4中创建一个关于发明的本体论。
我宣布:
fulfills
Invention
和Need
仍然在Protégé,我的课程发明由以下断言定义:
Invention subClassOf fulfills exactly 1 Need
这意味着我不希望Invention
类型的任何个人fulfills
Need
或多。
为了测试这个断言,我创建了一个名为Boots
的发明类型的个人和两个类型为需求的个人Move_faster
和Eat_faster
。
我断言Boots fulfills Move_faster
和Boots fulfills Eat_faster
,这会破坏我的一致性,因为一项发明应该只能满足一个需要。
但是,当我推出HermiT推理器时,我的本体仍然是一致的,即使在以下情况下:
Boots
履行没有 Boots
履行任何非Need
这是正常的吗?
由于
答案 0 :(得分:6)
是的,这都很正常。 OWL有open world assumption,没有unique name assumption。总而言之,这意味着给定两个名称(例如Move_faster
和Eat_faster
),OWL推理器不能对这些名称是否实际表示同一个人做出任何假设。
您描述的本体并不矛盾,因为Move_faster
和Eat_faster
实际上可能是同一件事(实际上,OWL推理器会做出完全相同的结论),其中如果Boots
只完成一个Need
,那么它仍然是真的。这里创建不一致的唯一方法是添加断言Move_faster owl:differentFrom Eat_faster
。
同样,如果Boots
在您的本体中不执行任何,则OWL推理器将简单地假设Need
确实存在一些未命名的Boots
。这是开放世界的假设。
Boots
实现一些不是(已知)Need
的东西也不是不一致的,因为fulfills exactly 1 Need
限制没有说明该类实例可能实现的内容不是Need
的成员。您需要添加allValuesFrom
限制才能使其不一致 - 即使这样,如果已知的事物已知为与{{1}不相交的类的成员,则它只是不一致的}。