OWL:如何从超类中继承两个类之间的属性关系?

MJ *_*ark 3 inference owl protege reasoning object-property

假设我们有两个名为People和 的类Disease。这些类通过对象属性相关has

:People :has :Disease
Run Code Online (Sandbox Code Playgroud)

People有子类(或个体)John,并且Disease有子类(或个体)Cancer

:John a :People
:Cancer a :Disease
Run Code Online (Sandbox Code Playgroud)

如何通过推理得到这些子类之间的关系呢?

:John :has :Cancer
Run Code Online (Sandbox Code Playgroud)

sco*_*ger 6

在获得答案之前,您需要解决许多误解。

首先,子类和个体是非常不同的概念。个人(实例)是类的成员。子类表示一个类是另一个类的子集,这意味着(通过推理)暗示子类的所有成员都是(超)类的成员。(仅供参考:OWL 中没有继承的概念。)

第二类属性,例如:People :has :Disease对于类个体来说没有任何意义。定义属性与类的关系的方法是设置属性的域和范围。(仅仅用作:has属性名称就表明了一系列广泛的误解,可能来自其他类型的语言。)所以我建议使用名称:hasDisease和断言:

:hasDisease rdfs:domain :People .
:hasDisease rdfs:range :Disease .
Run Code Online (Sandbox Code Playgroud)

第三,您可以断言:John :hasDisease :Cancer并推断约翰患有疾病,因为它:Cancer是 的子类:Disease。这需要一个标准的 RDFS 推理器。此外,给定上面的域和范围定义以及断言:Joy :hasDisease :Gout,RDFS 推理器将推断出:Joy a :Person:Gout a :Disease

您可以通过 Google 找到一些 OWL 入门书。我建议仔细阅读其中一些内容,以基本了解 OWL 和推理概要文件的工作原理。

  • 是的,子类关系是传递的。但 RDFS 中子类的唯一含义是类成员资格。子类的成员也是该类的成员。没有其他的。因此,属性不会被实例或子类“继承”。同样,属性通过域和范围与类相关,具有上述含义。没有其他的。这很令人困惑,因为它没有使用面向对象的原则。将 OWL 类视为一个集合,这可能是一个更好的开始原则。此外,“个体”是类的成员(也称为“实例”)。 (3认同)