public DatalogDependencyGraphGenerator(DatalogProgram program) { this(program.getRules()); }
@Override public DatalogProgram getDatalogProgram(MutableQueryModifiers modifiers, Collection<CQIE> rules) { DatalogProgram p = new DatalogProgramImpl(); p.appendRule(rules); p.getQueryModifiers().copy(modifiers); return p; }
ImmutableList<Variable> signature) throws EmptyQueryException { List<CQIE> rules = queryProgram.getRules(); Optional<ImmutableQueryModifiers> topQueryModifiers = convertModifiers(queryProgram.getQueryModifiers());
@Override public DatalogProgram getSameAsRewriting(DatalogProgram pr) { if (targetPredicates == null) targetPredicates = SameAsTargets.extract(saturatedMapping); DatalogProgram result = datalogFactory.getDatalogProgram(pr.getQueryModifiers()); for (CQIE q: pr.getRules()) { List<Function> body = new ArrayList<>(q.getBody().size()); for (Function a : q.getBody()) { Function ap = addSameAs(a, result, "sameAs" + (rules++)); body.add(ap); } result.appendRule(datalogFactory.getCQIE(q.getHead(), body)); } return result; }
@Override public DatalogProgram getDatalogProgram(MutableQueryModifiers modifiers, Collection<CQIE> rules) { DatalogProgram p = new DatalogProgramImpl(modifiers); p.appendRule(rules); return p; }
private boolean hasSelectDistinctStatement(DatalogProgram query) { boolean toReturn = false; if (query.getQueryModifiers().hasModifiers()) { toReturn = query.getQueryModifiers().isDistinct(); } return toReturn; }
ExecutorRegistry executorRegistry) throws InvalidDatalogProgramException, EmptyQueryException { List<CQIE> rules = queryProgram.getRules(); Optional<ImmutableQueryModifiers> topQueryModifiers = convertModifiers(queryProgram.getQueryModifiers());
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()); }
public static DatalogProgram program(Collection<CQIE> rules){ DatalogProgram datalogProgram = DATALOG_FACTORY.getDatalogProgram(); datalogProgram.appendRule(rules); return datalogProgram; }
private boolean hasOrderByClause(DatalogProgram query) { boolean toReturn = false; if (query.getQueryModifiers().hasModifiers()) { final List<OrderCondition> conditions = query.getQueryModifiers() .getSortConditions(); toReturn = (!conditions.isEmpty()); } return toReturn; }
Multimap<Predicate, CQIE> edgeDP = ArrayListMultimap.create(); for (CQIE cqie : program.getRules()) { List<QueryConnectedComponent> ccs = QueryConnectedComponent.getConnectedComponents(reasoner, cqie, atomFactory, immutabilityTools); DatalogProgram programAfterRewriting = datalogFactory.getDatalogProgram(program.getQueryModifiers(), outputRules); IQ convertedIQ = datalogConverter.convertDatalogProgram(programAfterRewriting, ImmutableList.of(), query.getProjectionAtom().getArguments());
private void appendRule(Function head, List<Function> body) { CQIE rule = datalogFactory.getCQIE(head, body); program.appendRule(rule); }
@Override public DatalogProgram getDatalogProgram(MutableQueryModifiers modifiers) { DatalogProgram p = new DatalogProgramImpl(); p.getQueryModifiers().copy(modifiers); return p; }
for (CQIE cq : queryProgram.getRules()) { datalogNormalizer.addMinimalEqualityToLeftOrNestedInnerJoin(cq); MutableQueryModifiers queryModifiers = queryProgram.getQueryModifiers(); isDistinct = queryModifiers.hasModifiers() && queryModifiers.isDistinct(); isOrderBy = queryModifiers.hasModifiers() && !queryModifiers.getSortConditions().isEmpty(); DatalogDependencyGraphGenerator depGraph = new DatalogDependencyGraphGenerator(queryProgram.getRules()); Multimap<Predicate, CQIE> ruleIndex = depGraph.getRuleIndex(); List<Predicate> predicatesInBottomUp = depGraph.getPredicatesInBottomUp();
public int getUCQSizeAfterRewriting() { int result = 0; if( sizesCollected() ) result = this.programAfterRewriting.getRules().size(); return result; }
/** * Translate the swrl_rule * Return a datalog program containing the supported datalog facts * @param rule an SWRLRule * @return DatalogProgram */ public DatalogProgram createDatalog(SWRLRule rule){ rule.accept(this); if (notSupported){ log.warn("Not Supported Translation of: "+ errors); errors.clear(); } DatalogProgram dp = datalogFactory.getDatalogProgram(); dp.appendRule(facts); return dp; }
if (queryProgram.getQueryModifiers().hasModifiers()) { final String outerViewName = "SUB_QVIEW"; String subquery = generateQuery(signature, ruleIndex, predicatesInBottomUp, extensionalPredicates); List<OrderCondition> conditions = queryProgram.getQueryModifiers().getSortConditions(); List<Variable> groupby = queryProgram.getQueryModifiers().getGroupConditions(); long limit = queryProgram.getQueryModifiers().getLimit(); long offset = queryProgram.getQueryModifiers().getOffset();
for (CQIE cq : queryProgram.getRules()) { DatalogNormalizer.foldJoinTrees(cq); DatalogNormalizer.addMinimalEqualityToLeftJoin(cq); MutableQueryModifiers queryModifiers = queryProgram.getQueryModifiers(); isDistinct = queryModifiers.hasModifiers() && queryModifiers.isDistinct(); isOrderBy = queryModifiers.hasModifiers() && !queryModifiers.getSortConditions().isEmpty();
public static boolean isBoolean(DatalogProgram query) { for (CQIE rule : query.getRules()) { if (!isBoolean(rule)) return false; } return true; }