使用OWL API,我正在尝试检查子类是否实际实例化了将其与父类继承的对象属性区分开来的对象属性。
有没有办法获取实例定义的属性?我目前的方法是尝试获取OWLClass的实例,如下所示:
// OWLClass o_class <---valid OWLClass object (e.g. City, Capital, etc)
Set<OWLNamedIndividual> o_instances = reasoner.getInstances(o_class, true).getFlattened();
for (OWLNamedIndividual> inst : o_instances) {
//get set of properties defined by each instance
}
我尝试过几种不同的方法,但无济于事。 inst.getObjectPropertiesInSignature()
什么都不返回。我正在使用的一个OWL文件的示例如下所示:
<owl:Class rdf:ID="City">
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasAccommodation"/>
</owl:onProperty>
<owl:someValuesFrom rdf:resource="#LuxuryHotel"/>
</owl:Restriction>
</owl:Class>
<owl:Class rdf:ID="Capital">
<rdfs:subClassOf>
<owl:Restriction>
<owl:someValuesFrom rdf:resource="#Museums"/>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasActivity"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf rdf:resource="#City"/>
</owl:Class>
<Capital rdf:ID="Canberra">
<hasAccommodation rdf:resource="#FourSeasons"/>
</Capital>
<Capital rdf:ID="Sydney">
<hasAccommodation rdf:resource="#FourSeasons"/>
<hasActivity rdf:resource="#CoolMuseum"/>
</Capital>
在上面的示例中,我希望能够检测到Canberra
没有使用属性hasActivity
,而Sydney
会这样做。我不确定如何正确获取这些属性并进行比较。为简洁起见,我排除了FourSeasons和博物馆的内容。我希望我已经足够好地解释了这一点。
答案 0 :(得分:0)
使用OWLIndividual Interface提供的getObjectPropertyValues(OWLOntology ontology)
方法。它会返回一个地图,其中ObjectPropertyExpression
为关键字,一组OWLIndivdual
为值。