use of org.semanticweb.owlapi.model.OWLDataMaxCardinality 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;
}
use of org.semanticweb.owlapi.model.OWLDataMaxCardinality 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) {
TreeSet<OWLClassExpression> operands = new TreeSet<>();
operands.add(subClass);
operands.add(((OWLObjectComplementOf) superClass).getOperand());
subClass = new OWLObjectIntersectionOfImpl(operands);
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) {
TreeSet<OWLClassExpression> operands = new TreeSet<>();
operands.add(subClass);
OWLObjectMaxCardinality maxCard = (OWLObjectMaxCardinality) superClass;
operands.add(new OWLObjectSomeValuesFromImpl(maxCard.getProperty(), maxCard.getFiller()));
subClass = new OWLObjectIntersectionOfImpl(operands);
CollectionUtils.addAll(objects, new OWLSubClassOfAxiomImpl(subClass, NOTHING, emptyAnno).accept(this));
} else if (superClass instanceof OWLDataMaxCardinality && ((OWLDataMaxCardinality) superClass).getCardinality() == 0) {
TreeSet<OWLClassExpression> operands = new TreeSet<>();
operands.add(subClass);
OWLDataMaxCardinality maxCard = (OWLDataMaxCardinality) superClass;
operands.add(new OWLDataSomeValuesFromImpl(maxCard.getProperty(), maxCard.getFiller()));
subClass = new OWLObjectIntersectionOfImpl(operands);
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;
}
use of org.semanticweb.owlapi.model.OWLDataMaxCardinality 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;
}
Aggregations