0

我正在使用 Protege 4.3 来制定一些 SWRL 规则。

我有一个名为“Person”的类,一个名为“name”的属性。

我从班级中创建了具有不同名称的个体,有些名称相同。

我想编写一个规则来创建名为“sameName”的属性实例来绑定具有相同名称的人。所以我写了以下规则:

Person(?p1), Person(?p2), name(?p1, ?n1), name(?p2, ?n2), equal(?n1, ?n2) -> sameName(?p1, ?p2)

该规则给出了正确的结果,但包括每个人与他自己,意味着也将每个人与他自己进行比较,所以我添加了 notEqual(?p1,?p2) 来强制推理器不要像这样将一个人与自己进行比较:

Person(?p1), Person(?p2), name(?p1, ?n1), name(?p2, ?n2), equal(?n1, ?n2), notEqual(?p1, ?p2) -> sameName(?p1, ?p2)

结果是空的。我错过了什么?

4

1 回答 1

1

我想你应该让所有的人都不同。如果你不这样做,那么推理器就无法判断两个人是否相同,所以你写的 SWRL 规则根本不起作用。

于 2015-03-02T07:02:54.237 回答