
org.coode.dlquery.OWLClassExpressionNodeQueryVisitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.coode.dlquery Show documentation
Show all versions of org.coode.dlquery Show documentation
A plug-in for Protege that provides a reasoner-backed query capability.
package org.coode.dlquery;
import java.util.HashSet;
import java.util.Set;
import org.protege.editor.owl.model.OWLModelManager;
import org.protege.editor.owl.model.classexpression.OWLClassExpressionLeafNode;
import org.protege.editor.owl.model.classexpression.OWLClassExpressionNodeDifference;
import org.protege.editor.owl.model.classexpression.OWLClassExpressionNodePossibly;
import org.protege.editor.owl.model.classexpression.OWLClassExpressionNodeUnion;
import org.protege.editor.owl.model.classexpression.OWLClassExpressionNodeVisitor;
import org.semanticweb.owlapi.model.OWLClassExpression;
import org.semanticweb.owlapi.model.OWLObject;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
/**
* Author: Matthew Horridge
* The University Of Manchester
* Medical Informatics Group
* Date: 11-Oct-2006
*
* [email protected]
* www.cs.man.ac.uk/~horridgm
*/
public class OWLClassExpressionNodeQueryVisitor implements OWLClassExpressionNodeVisitor {
private final OWLModelManager owlModelManager;
private final OWLReasoner reasoner;
private final ReasonerQueryInvoker queryInvoker;
private final Set results = new HashSet<>();
public OWLClassExpressionNodeQueryVisitor(OWLModelManager manager, OWLReasoner reasoner,
ReasonerQueryInvoker queryInvoker) {
this.owlModelManager = manager;
this.reasoner = reasoner;
this.queryInvoker = queryInvoker;
}
public void reset() {
results.clear();
}
public Set getResults() {
return new HashSet(results);
}
public void visit(OWLClassExpressionNodeDifference node) {
node.getLeftNode().accept(this);
Set leftResults = results;
node.getRightNode().accept(this);
Set rightResults = results;
results.clear();
results.addAll(leftResults);
results.remove(node.getRightNode().getClassExpression());
results.removeAll(rightResults);
}
public void visit(OWLClassExpressionNodeUnion node) {
node.getLeftNode().accept(this);
Set leftResults = results;
node.getRightNode().accept(this);
Set rightResults = results;
results.clear();
results.addAll(leftResults);
results.addAll(rightResults);
}
public void visit(OWLClassExpressionNodePossibly node) {
// LEFTDESC minus not(RIGHTDESC)
OWLClassExpression leftDesc = node.getLeftNode().getClassExpression();
OWLClassExpression rightDesc = node.getRightNode().getClassExpression();
OWLClassExpression negRightDesc = owlModelManager.getOWLDataFactory().getOWLObjectComplementOf(rightDesc);
Set leftResults = queryInvoker.getAnswer(reasoner, leftDesc);
Set rightResults = queryInvoker.getAnswer(reasoner, negRightDesc);
results.clear();
results.addAll(leftResults);
results.removeAll(rightResults);
}
public void visit(OWLClassExpressionLeafNode node) {
results.clear();
results.addAll(queryInvoker.getAnswer(reasoner, node.getClassExpression()));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy