Protege:匿名类,以接受所有不参与关系的类

问题描述 投票:0回答:1

假设有4个类别:abcd。我们有a has_relation some b

我可以将c定义为:has_relation some b以将a包含为其子类。

但是如果我希望c具有d作为其子类怎么办?

(我知道not(a has_relation some b)不是一个正确的答案,因为d没有明确定义为具有或没有任何关系)

owl ontology protege swrl
1个回答
0
投票

严格来说,由于开放世界的假设,这不可能推断。因此,实现此目的的唯一方法是断言AB不相关。根据您所需的推论,有不同的方法可以实现此目的。在所有情况下,您都将需要2个关系:第一个关系指出该关系确实存在,第二个关系指出该关系不存在。

选项1

如果需要将您需要的推论应用于个人,则可以如下指定它:

ObjectProperty: isRelatedByRelationXOption1
    DisjointWith: 
        isNotRelatedByRelationXOption1

ObjectProperty: isNotRelatedByRelationXOption1
    DisjointWith: 
        isRelatedByRelationXOption1

如果然后指定通过这两个关系将个人x1y1关联,则推理者将指出不一致之处:

Individual: x1
    Facts:  
        isNotRelatedByRelationXOption1  y1,
        isRelatedByRelationXOption1  y1

Individual: y1

定义这样的关系的潜在缺点是,以下将not导致不一致:

Class: A
    SubClassOf: 
        isRelatedByRelationXOption1 some B

Class: B

Class: C
      SubClassOf: 
          A,
          isNotRelatedByRelationXOption1 some B

如果在这种情况下需要不一致的地方,则需要使用选项2。

选项2

当我们按以下方式定义关系时,C类将无法满足。请注意,也没有必要将关系定义为Disjoint,除非您仍然想使用这两种关系来检测个人。

ObjectProperty: isRelatedByRelationXOption2
    Domain: 
        A

ObjectProperty: isNotRelatedByRelationXOption2
    Domain: 
        not (A)

 Class: A
    SubClassOf: 
         isRelatedByRelationXOption2 some B

 Class: B

 Class: C
     SubClassOf: 
         A,
         isNotRelatedByRelationXOption2 some B

选项3

如果您不需要使用Protege,则可以考虑使用SHACL。请参阅我对this Stackoverflow问题的回答。

© www.soinside.com 2019 - 2024. All rights reserved.