2017-05-05 4 views
0

Comment puis-je interroger un inverse d'une propriété d'objet à l'aide d'un reasoner?Obtenir InverseObjectProperty avec un reasoner

Par exemple, une personne peut avoir un pistolet et vice versa:

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

Parce qu'il ya axiomes simples, j'ai essayé de trouver une fonction uncomplicatedstar pour gérer ceci:

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(); 
} 

Cette fonction est-elle un moyen simple et direct d'obtenir une propriété d'objet inverse?

Répondre

1

Les instances OWLObjectPropertyExpression renvoyées par reasoner.getInverseObjectProperties(relation).getEntities() sont déjà les inverses de relation. Chacun d'entre eux est inféré pour être un inverse de votre entrée - ils peuvent être équivalents les uns aux autres.