2017-05-05 45 views
0

如何使用推理器查询对象属性的逆函数?使用推理器获取InverseObjectProperty

例如,一个人可以有枪,反之亦然:

<Declaration> 
    <ObjectProperty IRI="#hasOwner"/> 
</Declaration> 
<Declaration> 
    <ObjectProperty IRI="#hasGun"/> 
</Declaration> 
<InverseObjectProperties> 
    <ObjectProperty IRI="#hasOwner"/> 
    <ObjectProperty IRI="#hasGun"/> 
</InverseObjectProperties> 

因为有简单的公理,我试图拿出一个uncomplicatedstar函数来处理这个问题:

OWLObjectProperty getOWLInverseRelation(OWLReasoner reasoner, OWLObjectProperty relation) { 
    Set<OWLObjectPropertyExpression> inverseRelationExprs = reasoner.getInverseObjectProperties(relation).getEntities(); 

    if (inverseRelationExprs.size() != 2) return null; 

    Iterator<OWLObjectPropertyExpression> inverseRelationExprIter = inverseRelationExprs.iterator(); 

    OWLObjectPropertyExpression inverseRelationExpr = inverseRelationExprIter.next(); 

    if (inverseRelationExpr.getNamedProperty().getIRI().getShortForm().equals(relation.getIRI().getShortForm())) 
     inverseRelationExpr = inverseRelationExprIter.next(); 

    return inverseRelationExpr.asOWLObjectProperty(); 
} 

这个函数是一个直接简单的方法来获得逆对象属性?

回答

1

reasoner.getInverseObjectProperties(relation).getEntities()返回的OWLObjectPropertyExpression实例已经是relation的逆。它们中的每一个都被推断为与您的输入相反 - 它们可以相互等同。