1

我正在研究本体,并且我有以下 swrl 规则:

User(?u) ^ Project(?p) ^ isRelatedTo(?u, ?p) ^ isMemberOf(?u, ?p) -> verifiedAssociation(?u, ?p)

而且我想知道何时发生负对象属性断言(当验证关联不正确时)。

我在 Protégé 上找到了属性断言选项卡,但我希望(由推理者)推断出这一点。而且我不知道如何制定规则来实现这一点。

有人可以帮我吗?

4

1 回答 1

3

没有办法通过规则来实现这种推断。原因是你需要的是能够这么说

User(?u) ^ Project(?p) ^ isNotRelatedTo(?u, ?p) ^ isNotMemberOf(?u, ?p) 
  -> unverifiedAssociation(?u, ?p)

但你需要说这?u任何 ?p无关,不仅是具体的?p。这超出了规则的范围和 OWL/DL 的范围,因为它需要一种封闭世界推理而不是开放世界推理的形式。

为了达到你想要的结果,你需要以某种方式关闭你的世界。因此,您的用户要么已分配到项目,要么尚未分配。让我们介绍NoProject与 不相交的类Project。然后添加规则

User(?u) ^ NoProject(?p)
  -> unverifiedAssociation(?u, ?p)

哪里unverifiedAssociation与 不相交verifiedAssociation

您可能还想查看具有“null”对象属性的个人 堆栈溢出问题。

更新

根据SWRL FAQ,SWRL 不支持否定。唯一的方法是定义不相交的对象属性的对偶。IE,

ObjectProperty: isMemberOf
ObjectProperty: isNotMemberOf
    DisjointWith: isMemberOf

VerifiedAssociation对和做类似的事情NotVerifiedAssociation。然后你以积极的形式定义你的规则:

User(?u) ^ Project(?p) ^ isRelatedTo(?u, ?p) ^ isNotMemberOf(?u, ?p) 
  -> NotVerifiedAssociation(?u, ?p)
于 2018-04-26T17:44:19.913 回答