如何获取指定个体的对象属性值?

How to get the object property values for the specified individual?

我有一个 ontology,使用 Protegé 4.3.0 创建,我会使用 OWL-API 来获取对象 属性 值(即一组 OWLNamedIndividual 个对象)用于指定的个体和对象 属性 表达式。

Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, hasPart).getFlattened();

不幸的是上面的指令return没有项目,因为在我的ontology个体之间的关联是通过hasPart对象属性的一些子对象属性。

UPDATE:在过去的几个小时里,我找到了以下解决方案,以获得与指定的 OWLNamedIndividual.[=17= 相关的子对象属性]

private Set<OWLObjectProperty> getRelatedSubObjectProperties(OWLNamedIndividual individual) {
    HashSet<OWLObjectProperty> relatedObjectProperties = new HashSet<>();

    HashSet<OWLObjectPropertyExpression> subProperties = new HashSet<>();
    subProperties.addAll(hasPart.getSubProperties(ontology));

    Set<OWLClass> types = reasoner.getTypes(individual, true).getFlattened();

    for (OWLObjectPropertyExpression property : subProperties) {
        Set<OWLClassExpression> domains = property.getDomains(ontology);
        for (OWLClassExpression domain : domains) {
            if (types.contains(domain.asOWLClass())) {
                relatedObjectProperties.add(property.asOWLObjectProperty());
            }
        }
    }

    return relatedObjectProperties;
}

然后我将得到对象 属性 值如下:

for (OWLObjectProperty property : getRelatedSubObjectProperties(individual)) {
    Set<OWLNamedIndividual> values = reasoner.getObjectPropertyValues(individual, property).getFlattened();
    if (values != null) {
        for (OWLNamedIndividual value : values) {
            // a value associated to the individual
        }
    }
}

我该如何解决这个问题?

getObjectPropertyValues() 的文档未明确说明将考虑子属性,因此此处的行为可能取决于推理机。您使用的是哪个推理机?

一种解决方法是获取您正在使用的 属性 的所有子属性并遍历所有子属性,这样您将获得所有结果。