2017-03-06 3 views
0

Dans the examplehasProperty du dépôt hibou-api:test si une classe OWL est un domaine/gamme d'une propriété

Pour tester si les instances d'une classe doivent avoir une propriété, nous créons une des valeurs de restriction et ensuite demander la satisfiabilité de la classe interesected avec le complément de cette quelques valeurs de la restriction. Si l'intersection est satisfiable, alors les instances de la classe n'ont pas besoin d'avoir la propriété, sinon, elles le font.

Donc, pour vérifier si une classe est un domaine d'une propriété d'objet, je peux utiliser l'extrait ci-dessous:

OWLDataFactory dataFactory = manager.getOWLDataFactory(); 
OWLClassExpression restriction = dataFactory.getOWLObjectSomeValuesFrom(objectProperty, dataFactory.getOWLThing()); 
OWLClassExpression complement = dataFactory.getOWLObjectComplementOf(restriction); 
OWLClassExpression intersection = dataFactory.getOWLObjectIntersectionOf(cls, complement); 
boolean hasObjectProperty = !reasoner.isSatisfiable(intersection); 

Je veux savoir comment vérifier si une classe est une gamme d'un objet propriété, et s'il s'agit d'un domaine d'une propriété de données. Puis-je utiliser l'extrait suivant (basé sur l'exemple ci-dessus) pour vérifier les domaines de propriétés de données?

OWLClassExpression restriction = dataFactory.getOWLDataSomeValuesFrom(dataProperty, dataFactory.getOWLThing()); 
OWLClassExpression complement = dataFactory.getOWLDataComplementOf(restriction); 
OWLClassExpression intersection = dataFactory.getOWLDataIntersectionOf(cls, complement); 
boolean hasDataProperty = !reasoner.isSatisfiable(intersection); 

Répondre

1

L'exemple ne fait pas ce que vous cherchez - il vérifie s'il est nécessaire pour les instances d'une classe d'avoir une affirmation de la propriété avec une propriété spécifique. La condition que vous essayez de vérifier est plus faible - si, étant donné une assertion de propriété, une classe C est inférée comme étant un type pour le sujet (ou l'objet, pour le cas d'échelle) de l'assertion. Cela peut être fait de manière plus simple (à la fois le code et la complexité), en vérifiant si le domaine de la propriété est une superclasse de la classe qui vous intéresse - ou, si vous voulez vérifier si une classe C est exactement le domaine, vous pouvez vérifier si les deux classes sont équivalentes.

Exemple:

OWLOntology o = ... //root ontology for the reasoner 
OWLReasoner r = ... 
OWLObjectProperty p = ... 
for (OWLObjectPropertyDomainAxiom ax: o.getObjectPropertyDomainAxioms(p)) { 
    OWLClassExpression c = ax.getDomain(); 
    NodeSet<OWLClass> allSubClasses = r.getSubClasses(c, false); 
    Node<OWLClass> allEquivalentClasses = r.getEquivalentClasses(c); 
} 

Pour le domaine des propriétés de données que vous avez juste besoin de passer d'un objet à des propriétés de données dans l'exemple, pour la gamme de propriétés de l'objet, vous recherchez des axiomes gamme de propriétés d'objet.