2017-05-05 43 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的逆。它們中的每一個都被推斷爲與您的輸入相反 - 它們可以相互等同。