All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.coode.oppl.utils.OWLObjectExtractor Maven / Gradle / Ivy

There is a newer version: 5.0.0
Show newest version
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