[英]OWL Api class assertion
我有两个类A
和B
,我想断言A
是relatedClass
B
我想在类级别做到这一点,起初我想创建一个对象属性relatedClass
并添加该断言。 但是我只能在个人之间做到这一点。
OWLObjectProperty related = dataFactory.getOWLObjectProperty(IOR + "#relatedClass");
OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, classA, classB);
这是不正确的,因为该方法期望classA
和classB
是个人。
是否可以设置类之间的关系? 使用OWL API如何完成?
我正在遵循此模式来转换分类法,它说:
断言能力是相关的
competence
和performance
都是课堂。
好的,因此,根据您的回答和评论,我一直在尝试了解所讨论的模式是哪种关系。 但是我很茫然。
首先,related的含义与skos:related
的含义相同,因此非常笼统:
属性skos:related用于声明两个SKOS概念之间的关联链接。
当两个概念相关但一个不是另一个的更笼统或更具体的概念时使用。 另外,它是对称属性。 我的领域中的一个例子是“信息系统”与“系统安全性”相关(但是您可以看到,这是一种非常通用的关系)。
这是该模式的一部分包含的图:
这是示例图的版本(非常模糊,但这就是它在纸上的外观)版本:
所以我从这里得到的是它必须是一个ObjectProperty
并且我必须设置域和范围,但是如果发生以下情况,它将如何工作:
ClassA related ClassB
ClassC related ClassD
在这种情况下,如何设置域和范围? 还是您认为我应该在每对相关的班级中选一个?
使用OWL API无法实现此目的,因为OWL不支持它。 在特定的OWL规范状态中
对象属性连接成对的个人。
因此,对象属性不是链接个人的类别而是链接个人。 您能做的最好的事情就是说,如果两个对象通过对象属性链接在一起,则这些对象属于特定的类,可以使用域和范围限制来实现。 即:
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
A
属于A
类, individualB
B
属于B
类。
更新资料
要处理多个相关类,您必须对域和范围使用这些类的并集:
ObjectProperty: relatedClass
Domain: A or C
Range: B or D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.