我使用Protege 4.3来制定一些SWRL规则。
我有一个名为"Person"的类,它有一个名为"name"的属性。
我从类中创建了具有不同名称的个体,其中一些名称相同。
我想写一个规则,创建一个名为"sameName"的Property实例来绑定具有相同名字的人。所以我写了下面的规则:
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)
结果为空。我错过什么了吗?
我想你应该把所有的个体都设置成不同的。如果不这样做,推理器就无法判断两个个体是否相同,因此您编写的SWRL规则根本不起作用。