[英]Protege SWRL rules
我一直在尝试在本体中定义规则,以推断一个人如果有彼此之间是朋友的朋友,那么所有人都是朋友,但是如果一个或多个不是彼此的朋友,那么我的本体将推断他们都是朋友,不是朋友。
谢谢
您可能需要弄清楚您想要的语义。
根据我的收集,您希望isFriendWith
至少是对称的,即,当isFriendWith(bob, alice)
也要isFriendWith(alice, bob)
。
另外,如果要让friendsAll
具有任何含义,则isFriendWith
不能传递。 因为我的朋友的朋友不一定是我的朋友,所以这也将体现自然的含义。
详细说明:如果isFriendWith
对称且可传递 ,则bob
每个朋友也将自动成为bob的所有朋友的朋友(因为isFriendWith(bob, alice)
暗含了isFriendWith(alice, bob)
。从此以后,任何isFriendWith(bob, carol)
传递性意味着isFriendWith(alice, carol)
。因此,如果isFriendWith
是对称且可传递的,则您会自动获得集团。
但是如上所述,这可能不是您想要的。
至于在SWRL中制定此规则,让我们尝试一下吧?
friendsAll
最有可能是反身的 ,即让我们假设每个人都是他/她自己的朋友。 现在,我们需要一个递归规则,该规则在满足条件的同时扩展此集合:“ 在这个集合中,每个人都是每个人的朋友 ”。
加入Bob的朋友,你需要能够量化了isFriendWith
和检查的任何候选人的朋友 bob
也是所有其他朋友的朋友bob
。 由于您不能在SWRL中嵌套量词,因此或多或少可以肯定,您不能仅使用规则语言来表示该算法。 但是,我可能在这里错了,语义中隐藏了一个巧妙的小技巧。 我不知道这是哪一个,但是直接公式中对量词嵌套的需求使我相信这是不可能的。
它基本上可以归结为一个著名的图论问题:给定一个起点bob
friendsAll
是bob
朋友的最大子集,因此组中的每个人都是与其他所有人的朋友,即bob的Maximal Clique 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.