我有一个 Person 类和一组数据属性:First_Name、Surname、Gender、DoB、Country_of_Birth。数据属性的 Domains 设置为 Person。我想在我的本体论中建立一条规则,规定每个人must恰好具有这些属性中的每一个。
因此,在 Protege 中,我将 Person 设置为“First_Name 恰好 1 xsd:string”、“Surname 恰好 1 xsd:string”等的子类。然后,我设置了一个有姓氏的个人,但没有名字、性别等。
然后我运行推理机。我期望它会因不一致而大发雷霆(姓氏被分配给不符合成为人的要求的个人),但事实并非如此,推理者推断该个人是一个人,尽管事实上它不具备所需的属性。
这是正确的行为吗?如何使本体按照我想要的方式运行?因为我想要的是本体对于不完整的数据具有鲁棒性(例如,你不能添加一个没有名字的人)。
是的,这是正确的行为,因为 Protege 使用开放世界假设而不是封闭世界假设例如关系数据库。在开放世界假设下,没有任何东西可以假设没有明确说明或可以从明确已知的信息中推导出来。当您创建一个个体(可能是Person
)您为其分配了 noFirst_Name
,在开放世界假设下,推理者仅仅假设First_Name
未知,并不是说它不存在(封闭世界假设就是这种情况)。因此,即使推理者推断出个体必须属于类型,但推理者却没有给出不一致的原因Person
。为了得到不一致的结果,你必须声明,众所周知,这个人既是Person
并且没有First_Name
。这对于个人来说是可以实现的john
通过断言:
john Type Person
john Type First_Name max 0 xsd:string
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)