【发布时间】:2015-02-10 20:29:16
【问题描述】:
我正在使用 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 规则,即 如果 **user 正在开会,则 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 的实例,反之亦然。
【问题讨论】:
-
我已经添加了对规则有什么问题的解释,但我真的不能告诉你在不知道你实际尝试什么的情况下更好的做法 做。您尝试编写 supposed 来完成的规则是什么?领域和预期含义从上下文中不清楚,因此一个简化的示例可能会有所帮助。
-
@JoshuaTaylor ,我编辑了它,我希望它现在更清晰
标签: semantic-web owl protege protege4 swrl