如何检索 owl class 实例在 OWL API 中实例化的属性?

How to retrieve properties that were instantiated by owl class instance in OWL API?

使用 OWL API,我正在尝试检查子 class 是否实际实例化了对象属性,这些属性将其与从父级继承的属性区分开来class。

有没有办法获取实例定义的属性?我当前的方法是尝试获取 OWL 类的实例,如下所示:

// 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() returns 没什么。我正在使用的 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 会。我不确定如何正确获取这些属性并进行比较。为简洁起见,我排除了四季和博物馆的台词。我希望我已经足够体面地解释了这一点。

使用OWLIndividual接口提供的getObjectPropertyValues(OWLOntology ontology)方法。它将 return 一个以 ObjectPropertyExpression 作为键和一组 OWLIndivdual 作为值的映射。