Protege:匿名类,用于包含所有不参与关系的类



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

我可以将c定义为:has_relation some ba作为其子类。

但是,如果我希望cd作为其子类怎么办。

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

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

选项 1

如果您需要的推理需要应用于个人,则可以按如下方式指定它:

ObjectProperty: isRelatedByRelationXOption1
DisjointWith: 
isNotRelatedByRelationXOption1
ObjectProperty: isNotRelatedByRelationXOption1
DisjointWith: 
isRelatedByRelationXOption1

如果随后指定个体x1y1通过这两种关系相关联,则推理者将指示不一致:

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

当我们定义如下关系时,类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。请参阅我对这个Stackoverflow问题的回答。

相关内容

  • 没有找到相关文章

最新更新