OWLApiclass断言

OWL Api class assertion

我有两个 classes AB 我想断言 ArelatedClass B.

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

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

这是不正确的,因为该方法期望 classAclassB 是个体。

是否可以设置 class 之间的关系?如何使用 OWL API?

我正在关注 this pattern 来转换分类法,它说:

Assert that competence is relatedClass of performance

其中 competenceperformance 都是 classes.


更新

好的,根据您的回答和评论,我一直在努力了解模式所讨论的关系。但是我很茫然。

首先,related的意思和skos:related的意思一样,所以很笼统:

The property skos:related is used to assert an associative link between two SKOS concepts.

当两个概念相关但其中一个不是另一个更笼统或更具体的概念时,会使用它。另外,它是对称的 属性。我的域中的一个示例是 "Information Systems" 与 "Systems security" 相关(但如您所见,这是一种非常通用的关系)。

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

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

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

ClassA related ClassB
ClassC related ClassD

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

这无法使用 OWL API 实现,因为 OWL 不支持它。具体来说 OWL specification 状态

Object properties connect pairs of individuals.

因此,对象属性不是 link class 个人的,而是个人的。你能做的最好的事情就是说如果 2 个人通过一个对象 属性 被 link 编辑,这些个人属于特定的 classes,这可以使用域和范围限制来实现。即:

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 属于 class A 并且 individualB 属于 class B.

更新

要处理多个相关的 classes,您必须对域和范围使用 classes 的并集:

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