public CQIE asCQIE() { List<Function> combinedBody; if (!filterAtoms.isEmpty()) { combinedBody = new ArrayList<>(databaseAtoms.size() + filterAtoms.size()); combinedBody.addAll(databaseAtoms); Iterator<List<Function>> iterOR = filterAtoms.iterator(); List<Function> list = iterOR.next(); // IMPORTANT: assume that conditions is non-empty Function mergedConditions = getMergedByAND(list); while (iterOR.hasNext()) { list = iterOR.next(); Function e = getMergedByAND(list); mergedConditions = termFactory.getFunctionOR(e, mergedConditions); } combinedBody.add(mergedConditions); } else combinedBody = databaseAtoms; CQIE cq = datalogFactory.getCQIE(head, combinedBody); eqNormalizer.enforceEqualities(cq); return cq; }
public CQIE asCQIE() { List<Function> combinedBody; if (!filterAtoms.isEmpty()) { combinedBody = new ArrayList<>(databaseAtoms.size() + filterAtoms.size()); combinedBody.addAll(databaseAtoms); Iterator<List<Function>> iterOR = filterAtoms.iterator(); List<Function> list = iterOR.next(); // IMPORTANT: assume that conditions is non-empty Function mergedConditions = getMergedByAND(list); while (iterOR.hasNext()) { list = iterOR.next(); Function e = getMergedByAND(list); mergedConditions = TERM_FACTORY.getFunctionOR(e, mergedConditions); } combinedBody.add(mergedConditions); } else combinedBody = databaseAtoms; CQIE cq = DATALOG_FACTORY.getCQIE(head, combinedBody); EQNormalizer.enforceEqualities(cq); return cq; }
eqNormalizer.enforceEqualities(newquery); removeRundantAtoms(newquery);
private IQ preProcess(InternalSparqlQuery translation) throws OntopInvalidInputQueryException, EmptyQueryException { DatalogProgram program = translation.getProgram(); log.debug("Datalog program translated from the SPARQL query: \n{}", program); if(settings.isSameAsInMappingsEnabled()){ program = sameAsRewriter.getSameAsRewriting(program); log.debug("Datalog program after SameAs rewriting \n{}", program); } log.debug("Replacing equivalences..."); DatalogProgram newprogramEq = datalogFactory.getDatalogProgram(program.getQueryModifiers()); for (CQIE query : program.getRules()) { CQIE rule = query.clone(); // EQNormalizer cannot be removed because it is used in NULL propagation in OPTIONAL eqNormalizer.enforceEqualities(rule); newprogramEq.appendRule(rule); } if (newprogramEq.getRules().isEmpty()) throw new OntopInvalidInputQueryException("Error, the translation of the query generated 0 rules. " + "This is not possible for any SELECT query (other queries are not supported by the translator)."); return datalogConverter.convertDatalogProgram(newprogramEq, ImmutableList.of(), translation.getSignature()); }
EQNormalizer.enforceEqualities(cq);
eqNormalizer.enforceEqualities(cq);