我目前正在 Protégé 4 中创建关于发明的本体。
我声明:
- 属性
满足
- 两个类:
Invention
和Need
仍然是 Protégé,我的类 Invention 由以下断言定义:
Invention subClassOf fulfills exactly 1 Need
这意味着我不想要任何Invention
类型的个体,它不fulfills
一个Need
或不止一个.
为了测试这个断言,我创建了一个名为 Boots
的 Invention 类型的个体和两个分别称为 Move_faster
和 Eat_faster
的 Need 类型的个体。
我断言 Boots fulfills Move_faster
和 Boots fulfills Eat_faster
,这应该打破我的一致性,因为一项发明应该只满足一个需要.
但是,当我启动 HermiT 推理器时,我的本体仍然是一致的,即使在 :
Boots
实现无Boots
满足任何不是需要
的人
这正常吗?
谢谢
最佳答案
是的,这很正常。 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
的东西也不是不一致,因为 正好满足 1 Need
限制没有提及该类的实例可能实现的不是 Need
成员的事情。您需要添加一个 allValuesFrom
限制以使其成为不一致的 - 即便如此,只有当已知完成的事情是与 Need< 不相交的类的成员时,它才会不一致
.
关于rdf - 门生 4.3 : Ontology consistency,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867263/