首页 > 解决方案 > OWL Api 类断言

问题描述

我有两个班级AB我想断言ArelatedClass B.

我想在类级别上做,起初我想创建一个对象属性relatedClass并添加该断言。但我只能在个人之间这样做。

OWLObjectProperty related = dataFactory.getOWLObjectProperty(IOR + "#relatedClass");
OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, classA, classB);

这是不正确的,因为该方法期望classA并且classB是个人。

是否可以设置类之间的关系?它是如何使用 OWL API 完成的?

我正在遵循这种模式来转换分类法,它说:

断言能力是相关的绩效等级

两者都是competenceperformance


更新

好的,因此根据您的回答和评论,我一直在尝试了解模式所讨论的关系。但我不知所措。

首先,related 的含义与 的含义相同,skos:related因此非常笼统:

属性 skos:related 用于断言两个 SKOS 概念之间的关联链接。

当两个概念相关但一个不是另一个更一般或更具体的概念时使用它。另外,它是一个对称属性。我的领域的一个例子是“信息系统”与“系统安全”相关(但您可以看到这是一种非常通用的关系)。

这是作为模式的一部分包含的图表:

在此处输入图像描述

这是示例图表的一个(非常模糊,但它在纸上看起来是这样的)版本:

在此处输入图像描述

所以我从这里得到的是它必须是一个ObjectProperty并且我必须设置域和范围,但是如果它是如何工作的:

ClassA related ClassB
ClassC related ClassD

在这种情况下如何设置域和范围?或者你认为我应该每对相关类都有一个吗?

标签: owlontologyowl-api

解决方案


这不能使用 OWL API 实现,因为 OWL 不支持它。具体来说,OWL 规范规定

对象属性连接成对的个体。

因此,对象属性不链接个人的类别,而是个人。您可以做的最好的事情是,如果 2 个个体通过对象属性链接,则这些个体属于特定的类,这可以使用域和范围限制来实现。IE:

ObjectProperty: relatedClass
  Domain: A
  Range: B

使用 OWL API,您需要执行以下操作:

OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLDataFactory dataFactory = manager.getOWLDataFactory(); 

IRI relatedClassPropertyIRI = IRI.create(ontologyIRI + "#relatedClass");
IRI aClassIRI = IRI.create(ontologyIRI + "#A");
IRI bClassIRI = IRI.create(ontologyIRI + "#B");

OWLObjectProperty relatedClassProperty = dataFactory.getOWLObjectProperty(relatedClassPropertyIRI);

OWLClass aClass = dataFactory.getOWLClass(aClassIRI);
OWLClass bClass = dataFactory.getOWLClass(bClassIRI);

dataFactory.getOWLObjectPropertyDomainAxiom(relatedClassProperty, aClass);
dataFactory.getOWLObjectPropertyRangeAxiom(relatedClassProperty, bClass);

如果您现在使用属性断言公理,例如

OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, individualA, individualB);

推理器将推断出individualA属于 classAindividualBto class B

更新

要处理多个相关类,您必须使用域和范围的类的联合:

ObjectProperty: relatedClass
 Domain: A or C
 Range: B or D

推荐阅读