我一直试图在我的本体中定义规则,以推断如果一个人的朋友是彼此之间的朋友,那么所有人都是朋友,但如果一个或多个不是彼此的朋友,那么我的本体将会推断他们都是,不是朋友。
谢谢
答案 0 :(得分:1)
您可能需要更多地理解您的预期语义。
从我收集的内容来看,您希望isFriendWith
至少是对称的,即isFriendWith(bob, alice)
然后isFriendWith(alice, bob)
。
此外,如果您希望friendsAll
具有任何含义,isFriendWith
将无法传递。这也会捕捉自然的含义,因为我朋友的朋友不一定是我的朋友。
详细说明:如果isFriendWith
对称和传递 bob
的每个朋友都会自动成为所有bob&#39的朋友;的朋友(因为isFriendWith(bob, alice)
暗示isFriendWith(alice, bob)
。从那里开始,任何isFriendWith(bob, carol)
传递都意味着isFriendWith(alice, carol)
。所以,如果isFriendWith
是对称且可传递的,那么你自动获得集团。
但如上所述,这可能不是,你想要的。
至于在 SWRL 中制定这个问题,让我们试一试,不管吗?
friendsAll
很可能是自反,即让我们假设每个人都是他/她自己的朋友。现在,我们需要一个递归规则来扩展这个集合,同时仍然满足条件:" 在这个集合中,每个人都是每个人的朋友"。
要包含bob的朋友,您需要能够量化isFriendWith
并检查bob
的任何候选朋友是否也是朋友所有 bob
的其他朋友。由于您无法在SWRL中嵌套量词,我或多或少地确定,您无法仅使用规则语言表达该算法。但是,我可能在这里错了,语义中隐藏着一个巧妙的小技巧。然而,并不是我所知道的,在直接公式中量化嵌套的需要让我相信它是不可能的。
它基本上归结为一个众所周知的图论理论问题:给定起点bob
friendsAll
是bob
朋友的最大子集,小组中的所有人都是其他人的朋友,即鲍勃的极大Clique。