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;
}
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;
}
Aggregations