use of org.semanticweb.owlapi.model.OWLDataPropertyExpression in project graal by graphik-team.
the class OWLAxiomParser method visit.
// /////////////////////////////////////////////////////////////////////////
// HasKey
// /////////////////////////////////////////////////////////////////////////
@Override
public Iterable<? extends Object> visit(OWLHasKeyAxiom arg) {
// =(Y, Z) :- C(Y), C(Z), p1(Y, X1), p1(Z, X1), ..., pn(Y, Xn), pn(Z,
// Xn).
Collection<Rule> rules = GraalUtils.<Rule>createCollection();
freeVarGen.setIndex(2);
InMemoryAtomSet head = GraalUtils.createAtomSet(DefaultAtomFactory.instance().create(equalityPredicate, glueVarX, glueVarY));
OWLClassExpression classExpression = OWLAPIUtils.classExpressionDisjunctiveNormalForm(arg.getClassExpression());
for (Pair<OWLClassExpression, OWLClassExpression> pair : MathUtils.selfCartesianProduct(OWLAPIUtils.getObjectUnionOperands(classExpression))) {
InMemoryAtomSet body = pair.getLeft().accept(classVisitorX);
body.addAll(pair.getRight().accept(classVisitorY));
for (OWLObjectPropertyExpression pe : arg.getObjectPropertyExpressions()) {
Term var = freeVarGen.getFreshSymbol();
body.addAll(pe.accept(new OWLPropertyExpressionVisitorImpl(glueVarX, var)));
body.addAll(pe.accept(new OWLPropertyExpressionVisitorImpl(glueVarY, var)));
}
for (OWLDataPropertyExpression pe : arg.getDataPropertyExpressions()) {
Term var = freeVarGen.getFreshSymbol();
body.add(DefaultAtomFactory.instance().create(GraalUtils.createPredicate(pe), glueVarX, var));
body.add(DefaultAtomFactory.instance().create(GraalUtils.createPredicate(pe), glueVarY, var));
}
rules.add(DefaultRuleFactory.instance().create(body, head));
}
return rules;
}
use of org.semanticweb.owlapi.model.OWLDataPropertyExpression 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