我有两个课程A
和B
,我想断言A
是relatedClass
B
。
我想在类级别进行,首先我想到创建一个对象属性relatedClass
并添加该断言。但我只能在个人之间这样做。
OWLObjectProperty related = dataFactory.getOWLObjectProperty(IOR + "#relatedClass");
OWLAxiom axiom = dataFactory.getOWLObjectPropertyAssertionAxiom(related, classA, classB);
这是不正确的,因为该方法希望classA
和classB
成为个人。
是否可以设置类之间的关系?如何使用OWL API完成?
我正在关注this pattern转换分类法,并说:
断言能力是相关的绩效类
competence
和performance
都是类。
好的,基于你的回答和评论,我一直试图了解哪种关系是谈论的模式。但我不知所措。
首先,相关的含义与skos:related
的含义相同,所以它非常一般:
属性skos:related用于断言两个SKOS概念之间的关联链接。
当两个概念相关但一个不是另一个概念的更一般或特定概念时使用它。此外,它是一个对称的属性。我的域名中的一个例子是“信息系统”与“系统安全”有关(但你可以看到它是一种非常通用的关系)。
以下是作为模式一部分的图表:
这里有一个(非常模糊,但它就是纸上的样子)版本的示例:
所以我从这里得到的是它需要是ObjectProperty
并且我必须设置域和范围,但如果它如何工作:
ClassA related ClassB
ClassC related ClassD
在这种情况下如何设置域和范围?或者你认为每对相关的课程应该有一个吗?
答案 0 :(得分:2)
使用OWL API无法实现这一点,因为OWL不支持它。特定于OWL specification州
对象属性连接个人对。
因此,对象属性不会将个体类别与个体联系起来。您可以做的最好的事情是,如果2个人通过对象属性链接,那么这些个人属于特定的类,这可以使用域和范围限制来实现。即:
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
而individualB
属于班级B
。
<强>更新强>
要处理多个相关类,您必须使用域和范围的类的联合:
ObjectProperty: relatedClass
Domain: A or C
Range: B or D