我正在尝试定义两个反向对象属性。
对象属性是:
hasChild
hasParent
很明显,如果JOHN hasParent ANNA
,则为ANNA hasChild JOHN
。这似乎是通过使用Protege的InverseOf
完成的,但是如果我们假设ANNA is Happy
,下面的DL查询:
hasChild only Happy
也返回JOHN
。推理机解释为hasChild is inverseOf hasParent
。有人可以帮我清理一下吗?预先感谢!
hasChild only Happy
是通用约束,没有附带的存在约束。在“开放世界”假设下,这些通用限制最终包括所有定义的个人,因为for all
包括没有该属性填充物的情况。
[要验证是否是这种情况,请创建一个定义为hasChild only Happy
的命名类,并检查哪些类与之等效。最有可能在结果中找到owl:Thing
。因此,所有个人都将成为该查询的答案。
为避免这种情况,请在查询中添加hasChild some Happy
,以便在得出推断之前必须有一个填充符。
但是请注意,您希望父母快乐。也许您是想反转方向并说hasParent only Happy
?