Protege:匿名 class 包含所有 class 未参与关系的人
Protege: Anonymous class to subsume all classes not participate in a relation
假设有4个类:a
、b
、c
、d
。
我们有 a has_relation some b
。
我可以将 c
定义为:has_relation some b
将 a
归入其子类。
但是如果我想让 c
有 d
作为它的子类呢?
(我知道 not(a has_relation some b)
不是真正的答案,因为 d
没有明确定义为有或没有任何关系)
严格来说,由于开放世界的假设,这是不可能推断出来的。因此,实现这一点的唯一方法是断言 A
与 B
无关。根据您需要的推论,有不同的方法可以实现这一点。在所有情况下,您都需要 2 个关系:第一个关系表明该关系确实存在,第二个关系表明该关系不存在。
选项 1
如果您需要的推论需要应用于个体,那么您可以指定如下:
ObjectProperty: isRelatedByRelationXOption1
DisjointWith:
isNotRelatedByRelationXOption1
ObjectProperty: isNotRelatedByRelationXOption1
DisjointWith:
isRelatedByRelationXOption1
如果您随后指定个体 x1
和 y1
通过这两种关系相关,推理器将指出不一致:
Individual: x1
Facts:
isNotRelatedByRelationXOption1 y1,
isRelatedByRelationXOption1 y1
Individual: y1
这样定义关系的潜在缺点是以下内容不会导致不一致:
Class: A
SubClassOf:
isRelatedByRelationXOption1 some B
Class: B
Class: C
SubClassOf:
A,
isNotRelatedByRelationXOption1 some B
如果您希望在这种情况下不一致,则需要使用选项 2。
选项 2
当我们定义如下关系时,class 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 Whosebug 问题上的回答。
假设有4个类:a
、b
、c
、d
。
我们有 a has_relation some b
。
我可以将 c
定义为:has_relation some b
将 a
归入其子类。
但是如果我想让 c
有 d
作为它的子类呢?
(我知道 not(a has_relation some b)
不是真正的答案,因为 d
没有明确定义为有或没有任何关系)
严格来说,由于开放世界的假设,这是不可能推断出来的。因此,实现这一点的唯一方法是断言 A
与 B
无关。根据您需要的推论,有不同的方法可以实现这一点。在所有情况下,您都需要 2 个关系:第一个关系表明该关系确实存在,第二个关系表明该关系不存在。
选项 1
如果您需要的推论需要应用于个体,那么您可以指定如下:
ObjectProperty: isRelatedByRelationXOption1
DisjointWith:
isNotRelatedByRelationXOption1
ObjectProperty: isNotRelatedByRelationXOption1
DisjointWith:
isRelatedByRelationXOption1
如果您随后指定个体 x1
和 y1
通过这两种关系相关,推理器将指出不一致:
Individual: x1
Facts:
isNotRelatedByRelationXOption1 y1,
isRelatedByRelationXOption1 y1
Individual: y1
这样定义关系的潜在缺点是以下内容不会导致不一致:
Class: A
SubClassOf:
isRelatedByRelationXOption1 some B
Class: B
Class: C
SubClassOf:
A,
isNotRelatedByRelationXOption1 some B
如果您希望在这种情况下不一致,则需要使用选项 2。
选项 2
当我们定义如下关系时,class 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 Whosebug 问题上的回答。