use of org.semanticweb.owlapi.model.OWLDataUnionOf 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;
}
Aggregations