OWLApiclass断言
OWL Api class assertion
我有两个 classes A
和 B
我想断言 A
是 relatedClass
B
.
我想在 class 级别进行,起初我想到创建一个对象 属性 relatedClass
并添加该断言。但我只能在个人之间这样做。
OWLObjectProperty related = dataFactory.getOWLObjectProperty(IOR + "#relatedClass");
OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, classA, classB);
这是不正确的,因为该方法期望 classA
和 classB
是个体。
是否可以设置 class 之间的关系?如何使用 OWL API?
我正在关注 this pattern 来转换分类法,它说:
Assert that competence is relatedClass of performance
其中 competence
和 performance
都是 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
我有两个 classes A
和 B
我想断言 A
是 relatedClass
B
.
我想在 class 级别进行,起初我想到创建一个对象 属性 relatedClass
并添加该断言。但我只能在个人之间这样做。
OWLObjectProperty related = dataFactory.getOWLObjectProperty(IOR + "#relatedClass");
OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, classA, classB);
这是不正确的,因为该方法期望 classA
和 classB
是个体。
是否可以设置 class 之间的关系?如何使用 OWL API?
我正在关注 this pattern 来转换分类法,它说:
Assert that competence is relatedClass of performance
其中 competence
和 performance
都是 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