我正在使用 Protege5.0,我想实现 SWRL 规则,即
User(?u), isInActivity(?u, ?cm), ContextMeeting(?cm) -> FamilyContact(?f), hasStatus(?f, "Reject")
这意味着“如果用户正在开会,则 familycontact 的状态为“拒绝”。
此语法应该可以工作并且 protege 不会显示任何错误。但是,它不起作用。当我写
User(?u), isInActivity(?u, ?cm), ContextMeeting(?cm), FamilyContact(?f) -> hasStatus(?f, "Reject")
这种语法完美地工作,但当我以这种格式编写复杂的规则时它没有用。谁能解释一下这两种格式的区别并给我一个完美的解决方案?
更多解释:
我有一个主类People和 People 的子类是Contact 和 User。Contact的子类是 FamilyContact、EmployeeContact 等。** User 和 Contact通过对象属性关联 isContactOf(People,Contact)。在我的本体中,应该只有一个User类。现在,我要实施 SWRL 规则,即如果 **用户正在开会,则 FamilyContact hasStatus "Reject"。** 此拒绝仅意味着家庭成员无法呼叫用户。其他规则是如果用户正在开会,那么 EmployeeContact 的状态为“通过”。hasStatus(Contact,String) 是一个函数属性。
第二个规则语法完美地工作,但是当我想为那些同时是EmployeeContact 和 FamilyContact的实例实施规则时,我遇到了问题。例如,如果我写一个规则,即
User(?u), isInActivity(?u, ?cm), ContextMeeting(?cm), FamilyContact(?f), EmployeeContact(?e), DifferentFrom(?f,?e)-> hasStatus(?f, "Reject").
它以某种方式工作,但我遇到了问题。它使 EmployeeContact 的其他实例也成为 FamilyContact 的实例,反之亦然。