【发布时间】:2015-05-24 14:43:23
【问题描述】:
我一直在尝试在我的本体中定义规则来推断,如果一个人的朋友彼此之间是朋友,那么所有人都是朋友,但如果有 1 个或多个彼此不是朋友,那么我的本体会推断出他们都不是朋友。
谢谢
【问题讨论】:
-
您的
isFriendWith(?y)缺少第二个变量,如果它想成为一个关系。
标签: semantics semantic-web owl protege rdfs
我一直在尝试在我的本体中定义规则来推断,如果一个人的朋友彼此之间是朋友,那么所有人都是朋友,但如果有 1 个或多个彼此不是朋友,那么我的本体会推断出他们都不是朋友。
谢谢
【问题讨论】:
isFriendWith(?y) 缺少第二个变量,如果它想成为一个关系。
标签: semantics semantic-web owl protege rdfs
您可能需要进一步理顺您的预期语义。
据我所知,您希望 isFriendWith 至少是对称的,即当 isFriendWith(bob, alice) 时也是 isFriendWith(alice, bob)。
另外,如果你想让friendsAll 有任何意义,isFriendWith 不能传递。这也将捕捉到自然的含义,因为我朋友的朋友不一定是我的朋友。
详细说明:如果isFriendWith where symmetric 和 transitive bob 的每个朋友也将自动成为 bob 所有朋友的朋友(因为 isFriendWith(bob, alice)暗示isFriendWith(alice, bob)。从那时起,任何isFriendWith(bob, carol) 传递都暗示isFriendWith(alice, carol)。因此,如果isFriendWith 是对称且传递的,则您会自动获得集团。
但如上所述,这可能不是你想要的。
至于在SWRL中制定这个,让我们试一试,好吗?
friendsAll 很可能是反身,即假设每个人都是他/她自己的朋友。现在,我们需要一个递归规则来扩展这个集合,同时仍然满足条件:“在这个集合中,每个人都是每个人的朋友”。
要包括 bob 的朋友,您需要能够量化超过 isFriendWith 并检查 bob 的任何 候选朋友 是否也是 all 的朋友> bob 的其他朋友。由于您不能在 SWRL 中嵌套量词,我或多或少肯定,您不能仅用规则语言表达该算法。但是,我在这里可能错了,语义中隐藏着一个巧妙的小技巧。然而,这不是我所知道的,而且直接公式中量词嵌套的需要让我相信这是不可能的。
它基本上归结为一个众所周知的图论问题:给定一个起点bobfriendsAll 是bob 的朋友的最大子集,因此该组中的每个人都是其他人的朋友,即鲍勃的最大值Clique。
【讨论】: