我正在使用 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)
结果是空的。我错过了什么?