OWL开放世界假设下,如何让DL query返回Mouse和Dog等目标实例?
如何在OWL中模拟封闭世界以实现目标查询结果
当然可以实现!OWL本身基于开放世界假设(OWA),这意味着推理机不会默认“未声明的关系就是不存在的”——比如Dog类没声明吃任何东西,但OWA下推理机只会认为“我们不知道Dog吃不吃”,而不是“Dog确实不吃”,所以默认查询结果为空。要让查询返回Mouse和Dog,我们需要在OWL中显式添加公理来模拟封闭世界的约束,具体方法如下:
方法1:为目标类添加否定属性约束公理
针对Mouse和Dog类,直接声明它们的个体都不具有eats任何Animal的关系:
- 打开Protege 5.2的类编辑器,选中
Mouse类 - 添加子类公理:
SubClassOf(Mouse, not (eats some Animal)) - 对
Dog类执行同样操作,添加SubClassOf(Dog, not (eats some Animal))
这样,推理机就会明确知道:所有Mouse和Dog的个体都不会吃任何Animal,自然会被包含在「Animal and not (eats some)」的查询结果中。
方法2:定义等价类统一约束
你也可以先定义一个代表“不捕食其他动物的Animal”的等价类,再把Mouse和Dog归到这个类下:
- 创建新类
NonPredator - 添加等价类公理:
EquivalentTo(NonPredator, Animal and not (eats some Animal)) - 将
Mouse和Dog设置为NonPredator的子类(SubClassOf(Mouse, NonPredator)、SubClassOf(Dog, NonPredator))
这种方式更模块化,后续如果有其他不捕食的Animal类,直接添加为NonPredator的子类即可。
注意事项
- 这些操作本质是在OWL中显式编码封闭世界的假设,而非改变OWL本身的开放世界特性。推理机只会根据你提供的公理进行推理,所以必须明确声明哪些类的个体不具有
eats关系。 - 如果是针对特定个体而非整个类,你可以使用否定对象属性断言(比如
NegativeObjectPropertyAssertion(eats, dog1, owl:Thing)),但针对类的约束更适合你的查询需求。
完成上述公理添加后,重新运行DL查询「Animal and not (eats some)」,就能得到Mouse和Dog类的个体了。
内容的提问来源于stack exchange,提问作者Koenig Lear
相关产品推荐
相关产品推荐

