Search in sources :

Example 1 with OWLObjectUnionOf

use of org.semanticweb.owlapi.model.OWLObjectUnionOf in project graal by graphik-team.

the class OWLAPIUtils method classExpressionDisjunctiveNormalForm.

/**
 * disjunctive normal form
 *
 * @param classExpression
 * @return a {@link OWLClassExpression} in disjunctive normal form equivalents to the specified one
 */
public static OWLClassExpression classExpressionDisjunctiveNormalForm(OWLClassExpression classExpression) {
    if (classExpression instanceof OWLObjectUnionOf) {
        Set<OWLClassExpression> union = new TreeSet<>();
        for (OWLClassExpression element : OWLAPIUtils.getObjectUnionOperands(classExpression)) {
            element = classExpressionDisjunctiveNormalForm(element);
            for (OWLClassExpression e : OWLAPIUtils.getObjectUnionOperands(element)) {
                union.add(e);
            }
        }
        return new OWLObjectUnionOfImpl(union.stream());
    } else if (classExpression instanceof OWLObjectIntersectionOf) {
        List<Set<OWLClassExpression>> conjunctions = new LinkedList<>();
        conjunctions.add(new TreeSet<OWLClassExpression>());
        for (OWLClassExpression element : OWLAPIUtils.getObjectIntersectionOperands(classExpression)) {
            element = classExpressionDisjunctiveNormalForm(element);
            if (element instanceof OWLObjectUnionOf) {
                List<Set<OWLClassExpression>> tmp = new LinkedList<>();
                for (Set<OWLClassExpression> conj : conjunctions) {
                    for (OWLClassExpression e : OWLAPIUtils.getObjectUnionOperands(element)) {
                        Set<OWLClassExpression> newConj = new TreeSet<>(conj);
                        newConj.add(classExpressionDisjunctiveNormalForm(e));
                        tmp.add(newConj);
                    }
                }
                conjunctions = tmp;
            } else {
                for (Set<OWLClassExpression> conj : conjunctions) {
                    for (OWLClassExpression e : OWLAPIUtils.getObjectIntersectionOperands(element)) {
                        conj.add(e);
                    }
                }
            }
        }
        Set<OWLClassExpression> union = new TreeSet<>();
        if (conjunctions.size() > 1) {
            for (Set<OWLClassExpression> conj : conjunctions) {
                union.add(new OWLObjectIntersectionOfImpl(conj.stream()));
            }
            return new OWLObjectUnionOfImpl(union.stream());
        } else {
            return new OWLObjectIntersectionOfImpl(conjunctions.get(0).stream());
        }
    } else if (classExpression instanceof OWLObjectSomeValuesFrom) {
        OWLObjectSomeValuesFrom expr = (OWLObjectSomeValuesFrom) classExpression;
        OWLObjectPropertyExpression prop = expr.getProperty();
        OWLClassExpression filler = classExpressionDisjunctiveNormalForm(expr.getFiller());
        if (filler instanceof OWLObjectUnionOf) {
            Set<OWLClassExpression> union = new TreeSet<>();
            for (OWLClassExpression e : OWLAPIUtils.getObjectUnionOperands(filler)) {
                e = classExpressionDisjunctiveNormalForm(e);
                union.add(new OWLObjectSomeValuesFromImpl(prop, e));
            }
            return new OWLObjectUnionOfImpl(union.stream());
        }
        return new OWLObjectSomeValuesFromImpl(prop, filler);
    } else if (classExpression instanceof OWLDataSomeValuesFrom) {
        OWLDataSomeValuesFrom expr = (OWLDataSomeValuesFrom) classExpression;
        OWLDataPropertyExpression prop = expr.getProperty();
        OWLDataRange filler = dataRangeDisjunctiveNormalForm(expr.getFiller());
        if (filler instanceof OWLDataUnionOf) {
            Set<OWLClassExpression> union = new TreeSet<>();
            for (OWLDataRange e : OWLAPIUtils.getDataUnionOperands(filler)) {
                e = dataRangeDisjunctiveNormalForm(e);
                union.add(new OWLDataSomeValuesFromImpl(prop, e));
            }
            return new OWLObjectUnionOfImpl(union.stream());
        }
        return new OWLDataSomeValuesFromImpl(prop, filler);
    } else if (classExpression instanceof OWLObjectOneOf) {
        OWLObjectOneOf expr = (OWLObjectOneOf) classExpression;
        if (expr.getIndividuals().size() <= 1) {
            return expr;
        }
        Set<OWLClassExpression> union = new TreeSet<>();
        for (OWLIndividual i : expr.getIndividuals()) {
            Set<OWLIndividual> individuals = Collections.singleton(i);
            union.add(new OWLObjectOneOfImpl(individuals.stream()));
        }
        return new OWLObjectUnionOfImpl(union.stream());
    } else if (classExpression instanceof OWLObjectAllValuesFrom) {
        OWLObjectAllValuesFrom expr = (OWLObjectAllValuesFrom) classExpression;
        return new OWLObjectAllValuesFromImpl(expr.getProperty(), classExpressionDisjunctiveNormalForm(expr.getFiller()));
    } else if (classExpression instanceof OWLDataAllValuesFrom) {
        OWLDataAllValuesFrom expr = (OWLDataAllValuesFrom) classExpression;
        return new OWLDataAllValuesFromImpl(expr.getProperty(), dataRangeDisjunctiveNormalForm(expr.getFiller()));
    } else if (classExpression instanceof OWLObjectComplementOf) {
        OWLObjectComplementOf expr = (OWLObjectComplementOf) classExpression;
        return new OWLObjectComplementOfImpl(classExpressionDisjunctiveNormalForm(expr.getOperand()));
    } else if (classExpression instanceof OWLObjectMinCardinality) {
        OWLObjectMinCardinality c = (OWLObjectMinCardinality) classExpression;
        return new OWLObjectMinCardinalityImpl(c.getProperty(), c.getCardinality(), classExpressionDisjunctiveNormalForm(c.getFiller()));
    } else if (classExpression instanceof OWLDataMinCardinality) {
        OWLDataMinCardinality c = (OWLDataMinCardinality) classExpression;
        return new OWLDataMinCardinalityImpl(c.getProperty(), c.getCardinality(), dataRangeDisjunctiveNormalForm(c.getFiller()));
    } else if (classExpression instanceof OWLObjectMaxCardinality) {
        OWLObjectMaxCardinality c = (OWLObjectMaxCardinality) classExpression;
        return new OWLObjectMaxCardinalityImpl(c.getProperty(), c.getCardinality(), classExpressionDisjunctiveNormalForm(c.getFiller()));
    } else if (classExpression instanceof OWLDataMaxCardinality) {
        OWLDataMaxCardinality c = (OWLDataMaxCardinality) classExpression;
        return new OWLDataMaxCardinalityImpl(c.getProperty(), c.getCardinality(), dataRangeDisjunctiveNormalForm(c.getFiller()));
    } else if (classExpression instanceof OWLObjectExactCardinality) {
        OWLObjectExactCardinality c = (OWLObjectExactCardinality) classExpression;
        return new OWLObjectExactCardinalityImpl(c.getProperty(), c.getCardinality(), classExpressionDisjunctiveNormalForm(c.getFiller()));
    } else if (classExpression instanceof OWLDataExactCardinality) {
        OWLDataExactCardinality c = (OWLDataExactCardinality) classExpression;
        return new OWLDataExactCardinalityImpl(c.getProperty(), c.getCardinality(), dataRangeDisjunctiveNormalForm(c.getFiller()));
    }
    return classExpression;
}
Also used : OWLObjectOneOf(org.semanticweb.owlapi.model.OWLObjectOneOf) OWLObjectComplementOfImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectComplementOfImpl) OWLDataMinCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataMinCardinalityImpl) TreeSet(java.util.TreeSet) Set(java.util.Set) OWLDataUnionOf(org.semanticweb.owlapi.model.OWLDataUnionOf) OWLDataAllValuesFrom(org.semanticweb.owlapi.model.OWLDataAllValuesFrom) OWLDataExactCardinality(org.semanticweb.owlapi.model.OWLDataExactCardinality) OWLDataRange(org.semanticweb.owlapi.model.OWLDataRange) OWLDataMaxCardinality(org.semanticweb.owlapi.model.OWLDataMaxCardinality) TreeSet(java.util.TreeSet) OWLDataMaxCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataMaxCardinalityImpl) OWLObjectPropertyExpression(org.semanticweb.owlapi.model.OWLObjectPropertyExpression) OWLDataSomeValuesFrom(org.semanticweb.owlapi.model.OWLDataSomeValuesFrom) OWLObjectMinCardinality(org.semanticweb.owlapi.model.OWLObjectMinCardinality) LinkedList(java.util.LinkedList) List(java.util.List) OWLObjectMaxCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectMaxCardinalityImpl) OWLObjectUnionOfImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectUnionOfImpl) OWLDataMinCardinality(org.semanticweb.owlapi.model.OWLDataMinCardinality) OWLIndividual(org.semanticweb.owlapi.model.OWLIndividual) OWLDataPropertyExpression(org.semanticweb.owlapi.model.OWLDataPropertyExpression) OWLObjectComplementOf(org.semanticweb.owlapi.model.OWLObjectComplementOf) OWLObjectOneOfImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectOneOfImpl) OWLObjectSomeValuesFromImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectSomeValuesFromImpl) OWLObjectUnionOf(org.semanticweb.owlapi.model.OWLObjectUnionOf) OWLClassExpression(org.semanticweb.owlapi.model.OWLClassExpression) OWLObjectIntersectionOfImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectIntersectionOfImpl) OWLObjectMinCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectMinCardinalityImpl) OWLDataSomeValuesFromImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataSomeValuesFromImpl) OWLObjectAllValuesFrom(org.semanticweb.owlapi.model.OWLObjectAllValuesFrom) OWLObjectMaxCardinality(org.semanticweb.owlapi.model.OWLObjectMaxCardinality) OWLObjectSomeValuesFrom(org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom) OWLDataAllValuesFromImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataAllValuesFromImpl) OWLObjectExactCardinality(org.semanticweb.owlapi.model.OWLObjectExactCardinality) OWLObjectExactCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectExactCardinalityImpl) OWLDataExactCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataExactCardinalityImpl) OWLObjectIntersectionOf(org.semanticweb.owlapi.model.OWLObjectIntersectionOf) OWLObjectAllValuesFromImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectAllValuesFromImpl)

Example 2 with OWLObjectUnionOf

use of org.semanticweb.owlapi.model.OWLObjectUnionOf in project graal by graphik-team.

the class OWLAxiomParser method visit.

// /////////////////////////////////////////////////////////////////////////
// ClassAxiom
// /////////////////////////////////////////////////////////////////////////
@Override
public Iterable<? extends Object> visit(OWLSubClassOfAxiom arg) {
    Collection<Object> objects = new LinkedList<Object>();
    freeVarGen.setIndex(3);
    OWLClassExpression superClass = OWLAPIUtils.classExpressionDisjunctiveNormalForm(arg.getSuperClass());
    OWLClassExpression subClass = OWLAPIUtils.classExpressionDisjunctiveNormalForm(arg.getSubClass());
    if (OWLAPIUtils.isIntersection(superClass)) {
        for (OWLClassExpression c : OWLAPIUtils.getObjectIntersectionOperands(superClass)) {
            CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, c, emptyAnno).accept(this));
        }
    } else if (superClass instanceof OWLObjectComplementOf) {
        subClass = new OWLObjectIntersectionOfImpl(subClass, ((OWLObjectComplementOf) superClass).getOperand());
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, NOTHING, emptyAnno).accept(this));
    } else if (superClass instanceof OWLObjectAllValuesFrom) {
        OWLObjectAllValuesFrom allValuesFrom = (OWLObjectAllValuesFrom) superClass;
        subClass = new OWLObjectSomeValuesFromImpl(allValuesFrom.getProperty().getInverseProperty(), subClass);
        superClass = allValuesFrom.getFiller();
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, superClass, emptyAnno).accept(this));
    } else if (superClass instanceof OWLObjectMaxCardinality && ((OWLObjectMaxCardinality) superClass).getCardinality() == 0) {
        OWLObjectMaxCardinality maxCard = (OWLObjectMaxCardinality) superClass;
        subClass = new OWLObjectIntersectionOfImpl(subClass, new OWLObjectSomeValuesFromImpl(maxCard.getProperty(), maxCard.getFiller()));
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, NOTHING, emptyAnno).accept(this));
    } else if (superClass instanceof OWLDataMaxCardinality && ((OWLDataMaxCardinality) superClass).getCardinality() == 0) {
        OWLDataMaxCardinality maxCard = (OWLDataMaxCardinality) superClass;
        subClass = new OWLObjectIntersectionOfImpl(subClass, new OWLDataSomeValuesFromImpl(maxCard.getProperty(), maxCard.getFiller()));
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, NOTHING, emptyAnno).accept(this));
    } else if (superClass instanceof OWLObjectExactCardinality && ((OWLObjectExactCardinality) superClass).getCardinality() <= 1) {
        OWLObjectExactCardinality exactCard = (OWLObjectExactCardinality) superClass;
        OWLObjectMaxCardinality maxCard = new OWLObjectMaxCardinalityImpl(exactCard.getProperty(), exactCard.getCardinality(), exactCard.getFiller());
        OWLObjectMinCardinality minCard = new OWLObjectMinCardinalityImpl(exactCard.getProperty(), exactCard.getCardinality(), exactCard.getFiller());
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, maxCard, emptyAnno).accept(this));
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, minCard, emptyAnno).accept(this));
    } else if (superClass instanceof OWLDataExactCardinality && ((OWLDataExactCardinality) superClass).getCardinality() <= 1) {
        OWLDataExactCardinality exactCard = (OWLDataExactCardinality) superClass;
        OWLDataMaxCardinality maxCard = new OWLDataMaxCardinalityImpl(exactCard.getProperty(), exactCard.getCardinality(), exactCard.getFiller());
        OWLDataMinCardinality minCard = new OWLDataMinCardinalityImpl(exactCard.getProperty(), exactCard.getCardinality(), exactCard.getFiller());
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, maxCard, emptyAnno).accept(this));
        CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, minCard, emptyAnno).accept(this));
    } else if (isSuperClass(superClass)) {
        if (subClass instanceof OWLObjectUnionOf) {
            for (OWLClassExpression c : OWLAPIUtils.getObjectUnionOperands(subClass)) {
                CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(c, superClass, emptyAnno).accept(this));
            }
        } else if (isEquivClass(subClass)) {
            CollectionUtils.addAll(objects, mainProcess(arg));
        } else {
            if (LOGGER.isWarnEnabled()) {
                LOGGER.warn("[ " + subClass + "] is not supported as subClass. This axioms was skipped : " + arg);
            }
        }
    } else {
        if (LOGGER.isWarnEnabled()) {
            LOGGER.warn("[ " + superClass + "] is not supported as superClass. This axioms was skipped : " + arg);
        }
    }
    return objects;
}
Also used : OWLDataMinCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataMinCardinalityImpl) OWLObjectComplementOf(org.semanticweb.owlapi.model.OWLObjectComplementOf) OWLObjectSomeValuesFromImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectSomeValuesFromImpl) OWLObjectUnionOf(org.semanticweb.owlapi.model.OWLObjectUnionOf) OWLClassExpression(org.semanticweb.owlapi.model.OWLClassExpression) OWLDataExactCardinality(org.semanticweb.owlapi.model.OWLDataExactCardinality) OWLObjectIntersectionOfImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectIntersectionOfImpl) OWLObjectMinCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectMinCardinalityImpl) OWLObjectAllValuesFrom(org.semanticweb.owlapi.model.OWLObjectAllValuesFrom) OWLObjectMaxCardinality(org.semanticweb.owlapi.model.OWLObjectMaxCardinality) OWLDataSomeValuesFromImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataSomeValuesFromImpl) LinkedList(java.util.LinkedList) OWLObjectExactCardinality(org.semanticweb.owlapi.model.OWLObjectExactCardinality) OWLDataMaxCardinality(org.semanticweb.owlapi.model.OWLDataMaxCardinality) OWLSubClassOfAxiomImpl(uk.ac.manchester.cs.owl.owlapi.OWLSubClassOfAxiomImpl) OWLDataMaxCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLDataMaxCardinalityImpl) OWLObjectMinCardinality(org.semanticweb.owlapi.model.OWLObjectMinCardinality) OWLObjectMaxCardinalityImpl(uk.ac.manchester.cs.owl.owlapi.OWLObjectMaxCardinalityImpl) OWLDataMinCardinality(org.semanticweb.owlapi.model.OWLDataMinCardinality)

Aggregations

LinkedList (java.util.LinkedList)2 OWLClassExpression (org.semanticweb.owlapi.model.OWLClassExpression)2 OWLDataExactCardinality (org.semanticweb.owlapi.model.OWLDataExactCardinality)2 OWLDataMaxCardinality (org.semanticweb.owlapi.model.OWLDataMaxCardinality)2 OWLDataMinCardinality (org.semanticweb.owlapi.model.OWLDataMinCardinality)2 OWLObjectAllValuesFrom (org.semanticweb.owlapi.model.OWLObjectAllValuesFrom)2 OWLObjectComplementOf (org.semanticweb.owlapi.model.OWLObjectComplementOf)2 OWLObjectExactCardinality (org.semanticweb.owlapi.model.OWLObjectExactCardinality)2 OWLObjectMaxCardinality (org.semanticweb.owlapi.model.OWLObjectMaxCardinality)2 OWLObjectMinCardinality (org.semanticweb.owlapi.model.OWLObjectMinCardinality)2 OWLObjectUnionOf (org.semanticweb.owlapi.model.OWLObjectUnionOf)2 OWLDataMaxCardinalityImpl (uk.ac.manchester.cs.owl.owlapi.OWLDataMaxCardinalityImpl)2 OWLDataMinCardinalityImpl (uk.ac.manchester.cs.owl.owlapi.OWLDataMinCardinalityImpl)2 OWLDataSomeValuesFromImpl (uk.ac.manchester.cs.owl.owlapi.OWLDataSomeValuesFromImpl)2 OWLObjectIntersectionOfImpl (uk.ac.manchester.cs.owl.owlapi.OWLObjectIntersectionOfImpl)2 OWLObjectMaxCardinalityImpl (uk.ac.manchester.cs.owl.owlapi.OWLObjectMaxCardinalityImpl)2 OWLObjectMinCardinalityImpl (uk.ac.manchester.cs.owl.owlapi.OWLObjectMinCardinalityImpl)2 OWLObjectSomeValuesFromImpl (uk.ac.manchester.cs.owl.owlapi.OWLObjectSomeValuesFromImpl)2 List (java.util.List)1 Set (java.util.Set)1