owl - OWL Api 类断言
问题描述
我有两个班级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 规范规定
对象属性连接成对的个体。
因此,对象属性不链接个人的类别,而是个人。您可以做的最好的事情是,如果 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
属于 classA
和individualB
to class B
。
更新
要处理多个相关类,您必须使用域和范围的类的联合:
ObjectProperty: relatedClass
Domain: A or C
Range: B or D
推荐阅读
- javascript - switch 中的每个 case 都在 JS 中触发
- javascript - 分配对象不能通过 Rest/Spread 运算符工作
- python - Scapy 没有扫描我网络中的所有设备
- python - 在特定列 >2 个文件中查找公共元素并打印每个文件中的相应行
- flutter - 如何在 Flutter 中的另一个小部件下方显示受约束的小部件?
- python - 从给定的范围数组生成一个跨维二维数组
- node.js - 从私有 gitlab 注册表安装多个 npm 包
- python - 更新 python 对象的多个属性 - 单元测试
- ubuntu - 如何在 OpenSSL 包中修复 Ubuntu 服务器上的 AttributeError?
- javascript - 电子邮件地址验证器