
org.coode.oppl.utils.OWLObjectExtractor Maven / Gradle / Ivy
package org.coode.oppl.utils;
import static org.coode.oppl.utils.ArgCheck.checkNotNull;
import static org.coode.oppl.utils.OWLPrimitiveSelector.*;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.semanticweb.owlapi.model.OWLAnnotation;
import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom;
import org.semanticweb.owlapi.model.OWLAnnotationProperty;
import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom;
import org.semanticweb.owlapi.model.OWLCardinalityRestriction;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLClassAssertionAxiom;
import org.semanticweb.owlapi.model.OWLClassExpression;
import org.semanticweb.owlapi.model.OWLDataAllValuesFrom;
import org.semanticweb.owlapi.model.OWLDataComplementOf;
import org.semanticweb.owlapi.model.OWLDataExactCardinality;
import org.semanticweb.owlapi.model.OWLDataHasValue;
import org.semanticweb.owlapi.model.OWLDataMaxCardinality;
import org.semanticweb.owlapi.model.OWLDataMinCardinality;
import org.semanticweb.owlapi.model.OWLDataOneOf;
import org.semanticweb.owlapi.model.OWLDataProperty;
import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom;
import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom;
import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom;
import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom;
import org.semanticweb.owlapi.model.OWLDatatype;
import org.semanticweb.owlapi.model.OWLDeclarationAxiom;
import org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom;
import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom;
import org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom;
import org.semanticweb.owlapi.model.OWLDisjointObjectPropertiesAxiom;
import org.semanticweb.owlapi.model.OWLDisjointUnionAxiom;
import org.semanticweb.owlapi.model.OWLEntity;
import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom;
import org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom;
import org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom;
import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom;
import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom;
import org.semanticweb.owlapi.model.OWLHasValueRestriction;
import org.semanticweb.owlapi.model.OWLIndividual;
import org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom;
import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom;
import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom;
import org.semanticweb.owlapi.model.OWLLiteral;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLNaryBooleanClassExpression;
import org.semanticweb.owlapi.model.OWLNaryClassAxiom;
import org.semanticweb.owlapi.model.OWLNaryIndividualAxiom;
import org.semanticweb.owlapi.model.OWLNaryPropertyAxiom;
import org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom;
import org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom;
import org.semanticweb.owlapi.model.OWLObject;
import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom;
import org.semanticweb.owlapi.model.OWLObjectComplementOf;
import org.semanticweb.owlapi.model.OWLObjectExactCardinality;
import org.semanticweb.owlapi.model.OWLObjectHasSelf;
import org.semanticweb.owlapi.model.OWLObjectHasValue;
import org.semanticweb.owlapi.model.OWLObjectIntersectionOf;
import org.semanticweb.owlapi.model.OWLObjectInverseOf;
import org.semanticweb.owlapi.model.OWLObjectMaxCardinality;
import org.semanticweb.owlapi.model.OWLObjectMinCardinality;
import org.semanticweb.owlapi.model.OWLObjectOneOf;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom;
import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom;
import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom;
import org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom;
import org.semanticweb.owlapi.model.OWLObjectUnionOf;
import org.semanticweb.owlapi.model.OWLObjectVisitorEx;
import org.semanticweb.owlapi.model.OWLPropertyAssertionAxiom;
import org.semanticweb.owlapi.model.OWLPropertyDomainAxiom;
import org.semanticweb.owlapi.model.OWLPropertyRangeAxiom;
import org.semanticweb.owlapi.model.OWLQuantifiedRestriction;
import org.semanticweb.owlapi.model.OWLReflexiveObjectPropertyAxiom;
import org.semanticweb.owlapi.model.OWLSameIndividualAxiom;
import org.semanticweb.owlapi.model.OWLSubClassOfAxiom;
import org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom;
import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom;
import org.semanticweb.owlapi.model.OWLSubPropertyAxiom;
import org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom;
import org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom;
import org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom;
import org.semanticweb.owlapi.model.OWLUnaryPropertyAxiom;
import org.semanticweb.owlapi.model.SWRLRule;
import org.semanticweb.owlapi.util.OWLObjectVisitorExAdapter;
/** Extracts from an OWLObject a particular kind of OWLObject component.
*
* @author Luigi Iannone
* @param
* type */
public final class OWLObjectExtractor extends
OWLObjectVisitorExAdapter> implements OWLObjectVisitorEx> {
private final OWLObjectVisitorEx selector;
/** @param selector
* selector */
private OWLObjectExtractor(OWLObjectVisitorEx selector) {
super(Collections. emptySet());
this.selector = checkNotNull(selector, "selector");
}
@Override
public Set visit(OWLDeclarationAxiom axiom) {
return visitPrimitive(axiom.getEntity());
}
@Override
public Set visit(OWLAnnotationAssertionAxiom axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getSubject().accept(this));
toReturn.addAll(axiom.getAnnotation().accept(this));
return toReturn;
}
@Override
public Set visit(OWLAnnotation annotation) {
Set toReturn = new HashSet();
toReturn.addAll(annotation.getProperty().accept(this));
toReturn.addAll(annotation.getValue().accept(this));
return toReturn;
}
@Override
public Set visit(OWLSubClassOfAxiom axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getSubClass().accept(this));
toReturn.addAll(axiom.getSuperClass().accept(this));
return toReturn;
}
@Override
public Set visit(OWLNegativeObjectPropertyAssertionAxiom axiom) {
return visitOWLPropertyAssertionAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitOWLPropertyAssertionAxiom(OWLPropertyAssertionAxiom, ?> axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getProperty().accept(this));
toReturn.addAll(axiom.getSubject().accept(this));
toReturn.addAll(axiom.getObject().accept(this));
return toReturn;
}
@Override
public Set visit(OWLAsymmetricObjectPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitCharacteristicAxiom(OWLUnaryPropertyAxiom> axiom) {
return axiom.getProperty().accept(this);
}
@Override
public Set visit(OWLReflexiveObjectPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
@Override
public Set visit(OWLDisjointClassesAxiom axiom) {
return visitOWLNAryClassAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitOWLNAryClassAxiom(OWLNaryClassAxiom axiom) {
Set toReturn = new HashSet();
for (OWLClassExpression owlDescription : axiom.getClassExpressions()) {
toReturn.addAll(owlDescription.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLDataPropertyDomainAxiom axiom) {
return visitOWLPropertyDomainAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitOWLPropertyDomainAxiom(OWLPropertyDomainAxiom> axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getProperty().accept(this));
toReturn.addAll(axiom.getDomain().accept(this));
return toReturn;
}
@Override
public Set visit(OWLObjectPropertyDomainAxiom axiom) {
return visitOWLPropertyDomainAxiom(axiom);
}
@Override
public Set visit(OWLEquivalentObjectPropertiesAxiom axiom) {
return visitOWLNaryPropertyAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitOWLNaryPropertyAxiom(OWLNaryPropertyAxiom> axiom) {
Set toReturn = new HashSet();
for (OWLObject p : axiom.getProperties()) {
toReturn.addAll(p.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLNegativeDataPropertyAssertionAxiom axiom) {
return visitOWLPropertyAssertionAxiom(axiom);
}
@Override
public Set visit(OWLDifferentIndividualsAxiom axiom) {
return visitOWLNaryIndividualAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitOWLNaryIndividualAxiom(OWLNaryIndividualAxiom axiom) {
Set toReturn = new HashSet();
for (OWLIndividual individual : axiom.getIndividuals()) {
toReturn.addAll(individual.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLDisjointDataPropertiesAxiom axiom) {
return visitOWLNaryPropertyAxiom(axiom);
}
@Override
public Set visit(OWLDisjointObjectPropertiesAxiom axiom) {
return visitOWLNaryPropertyAxiom(axiom);
}
@Override
public Set visit(OWLObjectPropertyRangeAxiom axiom) {
return visitOWLPropertyRangeAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitOWLPropertyRangeAxiom(OWLPropertyRangeAxiom, ?> axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getProperty().accept(this));
toReturn.addAll(axiom.getRange().accept(this));
return toReturn;
}
@Override
public Set visit(OWLObjectPropertyAssertionAxiom axiom) {
return visitOWLPropertyAssertionAxiom(axiom);
}
@Override
public Set visit(OWLFunctionalObjectPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
@Override
public Set visit(OWLSubObjectPropertyOfAxiom axiom) {
return visitOWLSubPropertyAxiom(axiom);
}
/** @param axiom
* axiom
* @return set of objects */
private Set visitOWLSubPropertyAxiom(OWLSubPropertyAxiom> axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getSubProperty().accept(this));
toReturn.addAll(axiom.getSuperProperty().accept(this));
return toReturn;
}
@Override
public Set visit(OWLDisjointUnionAxiom axiom) {
Set toReturn = new HashSet();
for (OWLClassExpression owlDescription : axiom.getClassExpressions()) {
toReturn.addAll(owlDescription.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLSymmetricObjectPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
@Override
public Set visit(OWLDataPropertyRangeAxiom axiom) {
return visitOWLPropertyRangeAxiom(axiom);
}
@Override
public Set visit(OWLFunctionalDataPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
@Override
public Set visit(OWLEquivalentDataPropertiesAxiom axiom) {
return visitOWLNaryPropertyAxiom(axiom);
}
@Override
public Set visit(OWLClassAssertionAxiom axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getClassExpression().accept(this));
toReturn.addAll(axiom.getIndividual().accept(this));
return toReturn;
}
@Override
public Set visit(OWLEquivalentClassesAxiom axiom) {
return visitOWLNAryClassAxiom(axiom);
}
@Override
public Set visit(OWLDataPropertyAssertionAxiom axiom) {
return visitOWLPropertyAssertionAxiom(axiom);
}
@Override
public Set visit(OWLTransitiveObjectPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
@Override
public Set visit(OWLIrreflexiveObjectPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
@Override
public Set visit(OWLSubDataPropertyOfAxiom axiom) {
return visitOWLSubPropertyAxiom(axiom);
}
@Override
public Set visit(OWLInverseFunctionalObjectPropertyAxiom axiom) {
return visitCharacteristicAxiom(axiom);
}
@Override
public Set visit(OWLSameIndividualAxiom axiom) {
return visitOWLNaryIndividualAxiom(axiom);
}
@Override
public Set visit(OWLSubPropertyChainOfAxiom axiom) {
Set toReturn = new HashSet();
toReturn.addAll(axiom.getSuperProperty().accept(this));
for (OWLObject owlObject : axiom.getPropertyChain()) {
toReturn.addAll(owlObject.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLInverseObjectPropertiesAxiom axiom) {
return visitOWLNaryPropertyAxiom(axiom);
}
@Override
public Set visit(SWRLRule rule) {
return Collections.emptySet();
}
@Override
public Set visit(OWLClass desc) {
return visitPrimitive(desc);
}
@Override
public Set visit(OWLAnnotationProperty property) {
return visitPrimitive(property);
}
/** @param owlObject
* owlObject
* @return set of objects */
@SuppressWarnings("unchecked")
private Set visitPrimitive(OWLObject owlObject) {
Set toReturn = new HashSet();
if (owlObject.accept(getSelector())) {
toReturn.add((O) owlObject);
}
return toReturn;
}
@Override
public Set visit(OWLObjectIntersectionOf desc) {
return visitOWLNaryBooleanExpression(desc);
}
/** @param desc
* desc
* @return set of objects */
private Set visitOWLNaryBooleanExpression(OWLNaryBooleanClassExpression desc) {
Set toReturn = new HashSet();
for (OWLObject owlObject : desc.getOperands()) {
toReturn.addAll(owlObject.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLObjectUnionOf desc) {
return visitOWLNaryBooleanExpression(desc);
}
@Override
public Set visit(OWLObjectComplementOf desc) {
return desc.getOperand().accept(this);
}
@Override
public Set visit(OWLObjectSomeValuesFrom desc) {
return visitOWLQuantifiedRestriction(desc);
}
/** @param desc
* desc
* @return set of objects */
private Set visitOWLQuantifiedRestriction(OWLQuantifiedRestriction, ?, ?> desc) {
Set toReturn = new HashSet();
toReturn.addAll(desc.getProperty().accept(this));
toReturn.addAll(desc.getFiller().accept(this));
return toReturn;
}
@Override
public Set visit(OWLObjectAllValuesFrom desc) {
return visitOWLQuantifiedRestriction(desc);
}
@Override
public Set visit(OWLObjectHasValue desc) {
return visitOWLValueRestriction(desc);
}
/** @param desc
* desc
* @return set of objects */
private Set visitOWLValueRestriction(OWLHasValueRestriction, ?, ?> desc) {
Set toReturn = new HashSet();
toReturn.addAll(desc.getProperty().accept(this));
toReturn.addAll(desc.getValue().accept(this));
return toReturn;
}
@Override
public Set visit(OWLObjectMinCardinality desc) {
return visitOWLCardinalityRestriction(desc);
}
@Override
public Set visit(OWLObjectExactCardinality desc) {
return visitOWLCardinalityRestriction(desc);
}
@Override
public Set visit(OWLObjectMaxCardinality desc) {
return visitOWLCardinalityRestriction(desc);
}
/** @param desc
* desc
* @return set of objects */
private Set
visitOWLCardinalityRestriction(OWLCardinalityRestriction, ?, ?> desc) {
Set toReturn = new HashSet();
toReturn.addAll(desc.getProperty().accept(this));
if (desc.getFiller() != null) {
toReturn.addAll(desc.getFiller().accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLObjectHasSelf desc) {
return desc.getProperty().accept(this);
}
@Override
public Set visit(OWLObjectOneOf desc) {
Set toReturn = new HashSet();
for (OWLObject owlObject : desc.getIndividuals()) {
toReturn.addAll(owlObject.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLDataSomeValuesFrom desc) {
return visitOWLQuantifiedRestriction(desc);
}
@Override
public Set visit(OWLDataAllValuesFrom desc) {
return visitOWLQuantifiedRestriction(desc);
}
@Override
public Set visit(OWLDataHasValue desc) {
return visitOWLValueRestriction(desc);
}
@Override
public Set visit(OWLDataMinCardinality desc) {
return visitOWLCardinalityRestriction(desc);
}
@Override
public Set visit(OWLDataExactCardinality desc) {
return visitOWLCardinalityRestriction(desc);
}
@Override
public Set visit(OWLDataMaxCardinality desc) {
return visitOWLCardinalityRestriction(desc);
}
@Override
public Set visit(OWLDatatype node) {
return visitPrimitive(node);
}
@Override
public Set visit(OWLDataComplementOf node) {
return node.getDataRange().accept(this);
}
@Override
public Set visit(OWLDataOneOf node) {
Set toReturn = new HashSet();
for (OWLObject owlObject : node.getValues()) {
toReturn.addAll(owlObject.accept(this));
}
return toReturn;
}
@Override
public Set visit(OWLLiteral node) {
return visitPrimitive(node);
}
@Override
public Set visit(OWLObjectProperty property) {
return visitPrimitive(property);
}
@Override
public Set visit(OWLObjectInverseOf property) {
return property.getInverse().accept(this);
}
@Override
public Set visit(OWLDataProperty property) {
return visitPrimitive(property);
}
@Override
public Set visit(OWLNamedIndividual individual) {
return visitPrimitive(individual);
}
/** @return the selector */
public OWLObjectVisitorEx getSelector() {
return selector;
}
/** @param owlObject
* owlObject
* @return all classes */
public static Set getAllClasses(OWLObject owlObject) {
return getAll(owlObject, getAllOWLClassSelector());
}
/** @param owlObject
* owlObject
* @return all object properties */
public static Set getAllOWLObjectProperties(OWLObject owlObject) {
return getAll(owlObject, getAllOWLObjectPropertySelector());
}
/** @param owlObject
* owlObject
* @return all data properties */
public static Set getAllOWLDataProperties(OWLObject owlObject) {
return getAll(owlObject, getAllOWLDataPropertySelector());
}
/** @param owlObject
* owlObject
* @return all individuals */
public static Set getAllOWLIndividuals(OWLObject owlObject) {
return getAll(owlObject, getAllOWLIndividualSelector());
}
/** @param owlObject
* owlObject
* @return all datatypes */
public static Set getAllOWLDatatypes(OWLObject owlObject) {
return getAll(owlObject, getAllOWLDatatypeSelector());
}
/** @param owlObject
* owlObject
* @return all literals */
public static Set getAllOWLLiterals(OWLObject owlObject) {
return getAll(owlObject, getAllOWLConstantSelector());
}
/** @param owlObject
* owlObject
* @return all all entities */
public static Set getAllOWLEntities(OWLObject owlObject) {
return getAll(owlObject, getAllOWLEntitySelector());
}
/** @param owlObject
* owlObject
* @return all primitives */
public static Set getAllOWLPrimitives(OWLObject owlObject) {
return getAll(owlObject, getAllPrimitiveSelector());
}
/** @param owlObject
* owlObject
* @return all annotation properties */
public static Set getAllAnnotationProperties(
OWLObject owlObject) {
return getAll(owlObject, getAllOWLAnnotationPropertySelector());
}
/** @param owlObject
* owlObject
* @param extractor
* extractor
* @return all types of owl objects */
private static Set getAll(OWLObject owlObject,
OWLObjectVisitorEx extractor) {
return owlObject.accept(new OWLObjectExtractor(extractor));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy