Search in sources :

Example 1 with OWLDataRange

use of org.semanticweb.owlapi.model.OWLDataRange 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);
    } 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));
            }
            return new OWLObjectUnionOfImpl(union);
        } else {
            return new OWLObjectIntersectionOfImpl(conjunctions.get(0));
        }
    } 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);
        }
        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);
        }
        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));
        }
        return new OWLObjectUnionOfImpl(union);
    } 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 OWLDataRange

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

the class OWLAxiomParser method mainProcess.

private Iterable<? extends Rule> mainProcess(OWLSubClassOfAxiom arg) {
    Collection<Rule> objects = new LinkedList<Rule>();
    InMemoryAtomSet body = null;
    try {
        body = arg.getSubClass().accept(this.classVisitorX);
    } catch (UnsupportedConstructor e) {
        if (LOGGER.isWarnEnabled()) {
            LOGGER.warn("[ " + arg.getSubClass() + "] is not supported as subClass. This axioms was skipped : " + arg);
        }
        return Collections.emptyList();
    }
    // RULES
    InMemoryAtomSet head = null;
    try {
        if (arg.getSuperClass() instanceof OWLObjectMaxCardinality) {
            OWLObjectMaxCardinality maxCard = (OWLObjectMaxCardinality) arg.getSuperClass();
            body.addAll(maxCard.getProperty().accept(this.propertyVisitorXY));
            body.addAll(maxCard.getProperty().accept(this.propertyVisitorXZ));
            InMemoryAtomSet bodyTemplate = body;
            head = GraalUtils.createAtomSet(DefaultAtomFactory.instance().create(Predicate.EQUALITY, glueVarY, glueVarZ));
            OWLClassExpression expr = OWLAPIUtils.classExpressionDisjunctiveNormalForm(maxCard.getFiller());
            for (Pair<OWLClassExpression, OWLClassExpression> pair : MathUtils.selfCartesianProduct(OWLAPIUtils.getObjectUnionOperands(expr))) {
                body = new LinkedListAtomSet(bodyTemplate);
                body.addAll(pair.getLeft().accept(classVisitorY));
                body.addAll(pair.getRight().accept(classVisitorZ));
                objects.add(DefaultRuleFactory.instance().create(body, head));
            }
        } else if (arg.getSuperClass() instanceof OWLDataMaxCardinality) {
            OWLDataMaxCardinality maxCard = (OWLDataMaxCardinality) arg.getSuperClass();
            Predicate p = GraalUtils.createPredicate(maxCard.getProperty());
            body.add(DefaultAtomFactory.instance().create(p, glueVarX, glueVarY));
            body.add(DefaultAtomFactory.instance().create(p, glueVarX, glueVarZ));
            InMemoryAtomSet bodyTemplate = body;
            head = GraalUtils.createAtomSet(DefaultAtomFactory.instance().create(Predicate.EQUALITY, glueVarY, glueVarZ));
            OWLDataRange expr = OWLAPIUtils.dataRangeDisjunctiveNormalForm(maxCard.getFiller());
            for (Pair<OWLDataRange, OWLDataRange> pair : MathUtils.selfCartesianProduct(OWLAPIUtils.getDataUnionOperands(expr))) {
                body = new LinkedListAtomSet(bodyTemplate);
                body.addAll(pair.getLeft().accept(dataRangeVisitorY));
                body.addAll(pair.getRight().accept(dataRangeVisitorZ));
                objects.add(DefaultRuleFactory.instance().create(body, head));
            }
        } else if (arg.getSuperClass() instanceof OWLDataAllValuesFrom) {
            OWLDataAllValuesFrom allvalues = (OWLDataAllValuesFrom) arg.getSuperClass();
            Predicate p = GraalUtils.createPredicate(allvalues.getProperty());
            body.add(DefaultAtomFactory.instance().create(p, glueVarX, glueVarY));
            head = allvalues.getFiller().accept(dataRangeVisitorY);
            objects.add(DefaultRuleFactory.instance().create(body, head));
        } else {
            head = arg.getSuperClass().accept(this.classVisitorX);
            objects.add(DefaultRuleFactory.instance().create(body, head));
        }
    } catch (UnsupportedConstructor e) {
        if (LOGGER.isWarnEnabled()) {
            LOGGER.warn("[ " + e.getConstructor() + "] is not supported here. This axioms was skipped : " + arg);
        }
        objects = Collections.emptyList();
    }
    return objects;
}
Also used : LinkedListAtomSet(fr.lirmm.graphik.graal.core.atomset.LinkedListAtomSet) OWLClassExpression(org.semanticweb.owlapi.model.OWLClassExpression) OWLDataAllValuesFrom(org.semanticweb.owlapi.model.OWLDataAllValuesFrom) OWLObjectMaxCardinality(org.semanticweb.owlapi.model.OWLObjectMaxCardinality) OWLDataRange(org.semanticweb.owlapi.model.OWLDataRange) LinkedList(java.util.LinkedList) Predicate(fr.lirmm.graphik.graal.api.core.Predicate) OWLDataMaxCardinality(org.semanticweb.owlapi.model.OWLDataMaxCardinality) InMemoryAtomSet(fr.lirmm.graphik.graal.api.core.InMemoryAtomSet) Rule(fr.lirmm.graphik.graal.api.core.Rule) SWRLRule(org.semanticweb.owlapi.model.SWRLRule) Pair(org.apache.commons.lang3.tuple.Pair)

Aggregations

LinkedList (java.util.LinkedList)2 OWLClassExpression (org.semanticweb.owlapi.model.OWLClassExpression)2 OWLDataAllValuesFrom (org.semanticweb.owlapi.model.OWLDataAllValuesFrom)2 OWLDataMaxCardinality (org.semanticweb.owlapi.model.OWLDataMaxCardinality)2 OWLDataRange (org.semanticweb.owlapi.model.OWLDataRange)2 OWLObjectMaxCardinality (org.semanticweb.owlapi.model.OWLObjectMaxCardinality)2 InMemoryAtomSet (fr.lirmm.graphik.graal.api.core.InMemoryAtomSet)1 Predicate (fr.lirmm.graphik.graal.api.core.Predicate)1 Rule (fr.lirmm.graphik.graal.api.core.Rule)1 LinkedListAtomSet (fr.lirmm.graphik.graal.core.atomset.LinkedListAtomSet)1 List (java.util.List)1 Set (java.util.Set)1 TreeSet (java.util.TreeSet)1 Pair (org.apache.commons.lang3.tuple.Pair)1 OWLDataExactCardinality (org.semanticweb.owlapi.model.OWLDataExactCardinality)1 OWLDataMinCardinality (org.semanticweb.owlapi.model.OWLDataMinCardinality)1 OWLDataPropertyExpression (org.semanticweb.owlapi.model.OWLDataPropertyExpression)1 OWLDataSomeValuesFrom (org.semanticweb.owlapi.model.OWLDataSomeValuesFrom)1 OWLDataUnionOf (org.semanticweb.owlapi.model.OWLDataUnionOf)1 OWLIndividual (org.semanticweb.owlapi.model.OWLIndividual)1