在 OWL 类限制构造函数的存在量化 (owl:SomeValuesFrom) 的情况下使用 rdfs:subClassOf 或 owl:equivalentClass 时?

Posted

技术标签:

【中文标题】在 OWL 类限制构造函数的存在量化 (owl:SomeValuesFrom) 的情况下使用 rdfs:subClassOf 或 owl:equivalentClass 时?【英文标题】:When using rdfs:subClassOf or owl:equivalentClass in case of existential quantification (owl:SomeValuesFrom) for a OWL class restriction constructor? 【发布时间】:2022-01-19 23:47:12 【问题描述】:

我们根据具有关系 a_to_b 和 a_to_c 的实例分别与 B 或 C 的实例的交集 (AND) 将 A 类定义为 owl:equivalentClass 并将 A2 类定义为 rdfs:subClassOf。请看示例:

:A rdf:type owl:Class ;
   owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
                                                owl:onProperty :a_to_b ;
                                                owl:someValuesFrom :B
                                              ]
                                              [ rdf:type owl:Restriction ;
                                                owl:onProperty :a_to_c ;
                                                owl:someValuesFrom :C
                                              ]
                                            ) ;
                         rdf:type owl:Class
                       ] .

这里作为子类:

:A2 rdf:type owl:Class ;
   rdfs:subClassOf [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
                                            owl:onProperty :a_to_b ;
                                            owl:someValuesFrom :B
                                          ]
                                          [ rdf:type owl:Restriction ;
                                            owl:onProperty :a_to_c ;
                                            owl:someValuesFrom :C
                                          ]
                                        ) ;
                     rdf:type owl:Class
                   ] .

使用 owl:equivalentClass 的原因是什么?什么时候使用 rdfs:subClassOf?区别以及最后真正表达的内容对我来说并不完全清楚。

我的进一步观察/问题:

a) 当我创建一个包含三元组的实例 x 时:(x, a_to_b, b1) 和 (x, a_to_c, c1),x 被自动推断为 A 的类型,而不是 A2 的类型。 (将 Protege 与 Hermit Reasoner 一起使用)(c1 是 C 类型,b1 是 B 类型)。

b) 当我创建一个实例 y 并手动为 y 分配类型 A 和 A2 时,如果 y 通过 a_to_b 与 B 的实例无关,并且通过 a_to_c 与 C 的实例无关,这是否会成为问题? Hermit Reasoner 没有表现出任何问题的迹象,但这不是 A 类的必要(必须满足)条件吗?

c) 这些陈述是否适用于 A:

c1) 如果我知道 z 来自类型 A,那么它必须与 B 的实例有 a_to_b 关系,并且它必须与 C 的实例有 a_to_C 关系。

c2) 如果我知道 z 与 B 的实例有 a_to_b 关系,并且它与 C 的实例有 a_to_C 关系,则 z 必须是 A 类型。

c3) A 是所有事物的类,这些事物与 B 的实例具有 a_to_b 关系,并且与 C 的实例具有 a_to_C 关系。

我可以说 c1 和 c3 也关于 A2 或如何更改语句吗?

意思我不清楚。我希望有人能澄清事情。提前致谢

【问题讨论】:

【参考方案1】:

我认为首先要注意的是等价,比如D equivalentClass E,是D subClassOf EE subClassOf D 的缩写。 subClassOf 的语义是子集。这意味着集合D 是集合E 的子集,集合ED 的子集,这意味着集合D 和集合E 是完全相同的集合。我们说它们是等价的。

现在注意subClassOf 的语义。如果我知道F subClassOf EG subClassOf E,我能说一下FG 之间的关系吗?绝对没有。这有点像知道自行车和卡车都是车辆。这并不能使自行车成为卡车或卡车成为自行车,尽管两者都是车辆。

因此,在您的示例中,A 可以扩展为 2 个公理

A subClassOf (a_to_b some B) and (a_to_c some C)

(a_to_b some B) and (a_to_c some C) subClassOf A

回答您的问题:

(a) 使用x 的断言,我们可以看到x 确实是A 的一个实例。但是,没有任何信息 wrt x 可以让我们说 xA2 类型。我们只知道xA2 都是(a_to_b some B) and (a_to_c some C) 的子类。

(b) 这是由于开放世界假设,这意味着推理者不会根据信息的缺失做出任何假设。如果您没有明确说明yB 没有a_to_b 关系,它将假定a_to_b 关系存在但只是未知。这与数据库通常做出的封闭世界假设相反。即,如果不存在客户的雇主信息,则通常会假设客户没有被雇用。

您可以通过声明 a_to_b max 0 B 来声明 y 没有 a_to_b 关系。然后推理器会给出不一致的结果。

(c1) 是的,但由于开放世界的假设,这些目前可能未知。

(c2) 是的,基于等价的语义

(c3) 是的。

这对于A2是正确的,因为它只是一个子类而不是所有与 B 的实例具有关系 a_to_b 并具有关系 a_to_C 的事物有一个 C 的实例。

何时使用等效 vs subClassOf

等价用于定义。那是当您想要说明将某事物称为A 的必要和充分条件时(来自您的示例)。

SubClassOf 用于定义从最一般到最具体的层次结构。即,它通常是您在分类和编程中看到的,您会将其视为面向对象的类层次结构。

【讨论】:

以上是关于在 OWL 类限制构造函数的存在量化 (owl:SomeValuesFrom) 的情况下使用 rdfs:subClassOf 或 owl:equivalentClass 时?的主要内容,如果未能解决你的问题,请参考以下文章

owl:someValuesFrom 与 owl:minCardinalilty

类--其他特性,作用域,构造函数,静态成员

使用python中的构造函数限制在单例类中创建对象

使用python中的构造函数限制在单例类中创建对象

本体限制对 SPARQL 最终结果的影响

python0.16------构造函数/析构函数/self详解/重写/访问限制/对象属性和类属性/@property/运算符重载