public static QueryExec getQueryExec() { return new CombinedQueryEngine(); }
private void execAllFastCore(final Query q, final ResultBinding binding, final Collection<ATermAppl> distVars, final Collection<ATermAppl> undistVars) { if (distVars.isEmpty()) exec(binding); else { final ATermAppl var = distVars.iterator().next(); distVars.remove(var); final Map<ATermAppl, Boolean> instances = fastPrune(q, var); for (final Entry<ATermAppl, Boolean> entry : instances.entrySet()) { final ATermAppl b = entry.getKey(); final ResultBinding newBinding = binding.duplicate(); newBinding.setValue(var, b); final Query q2 = q.apply(newBinding); if (entry.getValue() || QueryEngine.execBooleanABoxQuery(q2)) execAllFastCore(q2, newBinding, distVars, undistVars); } distVars.add(var); } }
private void runRecursively(final Taxonomy<ATermAppl> t, final ATermAppl downMonotonic, final ATermAppl rootCandidate, final ResultBinding binding, final Set<ATermAppl> toDo, final boolean direct, final boolean strict) { final int size = _result.size(); _logger.fine(() -> "Trying : " + rootCandidate + ", done=" + toDo); if (!strict) { toDo.remove(rootCandidate); runNext(binding, Collections.singletonList(downMonotonic), rootCandidate); } if (strict || _result.size() > size) { // final Set<ATermAppl> subs = t.getSFlattenedSubs(rootCandidate, // direct); final Set<ATermAppl> subs = flatten(t.getSubs(rootCandidate, direct)); for (final ATermAppl subject : subs) { if (!toDo.contains(subject)) continue; runRecursively(t, downMonotonic, subject, binding, toDo, false, false); } } else { _logger.fine(() -> "Skipping subs of " + rootCandidate); // toDo.removeAll(t.getFlattenedSubs(rootCandidate, false)); toDo.removeAll(flatten(t.getSubs(rootCandidate, false))); } }
exec(candidateBinding); classCandidates = flatten(_kb.getTypes(tI, direct)); // TODO instanceCandidates = Collections.singleton(tI); if (instanceCandidates != null) for (final ATermAppl inst : instanceCandidates) runNext(binding, arguments, inst, cls); runNext(binding, arguments, property, property, property); runNext(binding, arguments, i, property, i); runNext(binding, arguments, property, property, i); runNext(binding, arguments, i, property, property); runNext(binding, arguments, subject, property, object); for (final ATermAppl subject : subjectCandidates) for (final ATermAppl object : _kb.getPropertyValues(property, subject)) runNext(binding, arguments, subject, property, object); runNext(binding, arguments, subject, property, object); for (final ATermAppl known : getSymmetricCandidates(VarType.INDIVIDUAL, saI1, saI2)) runSymetricCheck(current, saI1, known, saI2, dependent, binding);
private void runAllPropertyChecks(@SuppressWarnings("unused") final QueryAtom current, final ATermAppl var, final Set<ATermAppl> candidates, final ResultBinding binding) { if (isDownMonotonic(var)) for (final TaxonomyNode<ATermAppl> topNode : _kb.getRoleTaxonomy(true).getTop().getSubs()) { final ATermAppl top = topNode.getName(); if (candidates.contains(top)) runRecursively(_kb.getRoleTaxonomy(true), var, topNode.getName(), binding, new HashSet<>(candidates), false, false); } else for (final ATermAppl candidate : candidates) { final ResultBinding candidateBinding = binding.duplicate(); candidateBinding.setValue(var, candidate); exec(candidateBinding); } }
private void runNext(final ResultBinding binding, final List<ATermAppl> arguments, final ATermAppl... values) { final ResultBinding candidateBinding = binding.duplicate(); for (int i = 0; i < arguments.size(); i++) if (ATermUtils.isVar(arguments.get(i))) candidateBinding.setValue(arguments.get(i), values[i]); exec(candidateBinding); }
/** * {@inheritDoc} */ @Override public QueryResult exec(final Query query) { _logger.fine(() -> "Executing query " + query); final Timer timer = new Timer("CombinedQueryEngine"); timer.start(); prepare(query); branches = 0; exec(new ResultBindingImpl()); timer.stop(); _logger.fine(() -> "#B=" + branches + ", time=" + timer.getLast() + " ms."); return _result; }
candidates = flatten(_kb.getSubClasses(top, true)); final Set<ATermAppl> toDo = lhsDM ? flatten(taxonomy.getSubs(candidate, direct)) : flatten(taxonomy.getSupers(candidate, direct)); toDo.add(candidate); runRecursively(taxonomy, downMonotonic, candidate, newBinding, new HashSet<>(toDo), direct, strict);
exec(candidateBinding); classCandidates = flatten(_kb.getTypes(tI, direct)); // TODO instanceCandidates = Collections.singleton(tI); if (instanceCandidates != null) for (final ATermAppl inst : instanceCandidates) runNext(binding, arguments, inst, cls); runNext(binding, arguments, property, property, property); runNext(binding, arguments, i, property, i); runNext(binding, arguments, property, property, i); runNext(binding, arguments, i, property, property); runNext(binding, arguments, subject, property, object); for (final ATermAppl subject : subjectCandidates) for (final ATermAppl object : _kb.getPropertyValues(property, subject)) runNext(binding, arguments, subject, property, object); runNext(binding, arguments, subject, property, object); for (final ATermAppl known : getSymmetricCandidates(VarType.INDIVIDUAL, saI1, saI2)) runSymetricCheck(current, saI1, known, saI2, dependent, binding);
private void runAllPropertyChecks(@SuppressWarnings("unused") final QueryAtom current, final ATermAppl var, final Set<ATermAppl> candidates, final ResultBinding binding) { if (isDownMonotonic(var)) for (final TaxonomyNode<ATermAppl> topNode : _kb.getRoleTaxonomy(true).getTop().getSubs()) { final ATermAppl top = topNode.getName(); if (candidates.contains(top)) runRecursively(_kb.getRoleTaxonomy(true), var, topNode.getName(), binding, new HashSet<>(candidates), false, false); } else for (final ATermAppl candidate : candidates) { final ResultBinding candidateBinding = binding.duplicate(); candidateBinding.setValue(var, candidate); exec(candidateBinding); } }
private void runNext(final ResultBinding binding, final List<ATermAppl> arguments, final ATermAppl... values) { final ResultBinding candidateBinding = binding.duplicate(); for (int i = 0; i < arguments.size(); i++) if (ATermUtils.isVar(arguments.get(i))) candidateBinding.setValue(arguments.get(i), values[i]); exec(candidateBinding); }
/** * {@inheritDoc} */ @Override public QueryResult exec(final Query query) { _logger.fine(() -> "Executing query " + query); final Timer timer = new Timer("CombinedQueryEngine"); timer.start(); prepare(query); branches = 0; exec(new ResultBindingImpl()); timer.stop(); _logger.fine(() -> "#B=" + branches + ", time=" + timer.getLast() + " ms."); return _result; }
candidates = flatten(_kb.getSubClasses(top, true)); final Set<ATermAppl> toDo = lhsDM ? flatten(taxonomy.getSubs(candidate, direct)) : flatten(taxonomy.getSupers(candidate, direct)); toDo.add(candidate); runRecursively(taxonomy, downMonotonic, candidate, newBinding, new HashSet<>(toDo), direct, strict);
exec(candidateBinding); classCandidates = flatten(_kb.getTypes(tI, direct)); // TODO instanceCandidates = Collections.singleton(tI); if (instanceCandidates != null) for (final ATermAppl inst : instanceCandidates) runNext(binding, arguments, inst, cls); runNext(binding, arguments, property, property, property); runNext(binding, arguments, i, property, i); runNext(binding, arguments, property, property, i); runNext(binding, arguments, i, property, property); runNext(binding, arguments, subject, property, object); for (final ATermAppl subject : subjectCandidates) for (final ATermAppl object : _kb.getPropertyValues(property, subject)) runNext(binding, arguments, subject, property, object); runNext(binding, arguments, subject, property, object); for (final ATermAppl known : getSymmetricCandidates(VarType.INDIVIDUAL, saI1, saI2)) runSymetricCheck(current, saI1, known, saI2, dependent, binding);
private void runAllPropertyChecks(@SuppressWarnings("unused") final QueryAtom current, final ATermAppl var, final Set<ATermAppl> candidates, final ResultBinding binding) { if (isDownMonotonic(var)) for (final TaxonomyNode<ATermAppl> topNode : _kb.getRoleTaxonomy(true).getTop().getSubs()) { final ATermAppl top = topNode.getName(); if (candidates.contains(top)) runRecursively(_kb.getRoleTaxonomy(true), var, topNode.getName(), binding, new HashSet<>(candidates), false, false); } else for (final ATermAppl candidate : candidates) { final ResultBinding candidateBinding = binding.duplicate(); candidateBinding.setValue(var, candidate); exec(candidateBinding); } }
private void execAllFastCore(final Query q, final ResultBinding binding, final Collection<ATermAppl> distVars, final Collection<ATermAppl> undistVars) { if (distVars.isEmpty()) exec(binding); else { final ATermAppl var = distVars.iterator().next(); distVars.remove(var); final Map<ATermAppl, Boolean> instances = fastPrune(q, var); for (final Entry<ATermAppl, Boolean> entry : instances.entrySet()) { final ATermAppl b = entry.getKey(); final ResultBinding newBinding = binding.duplicate(); newBinding.setValue(var, b); final Query q2 = q.apply(newBinding); if (entry.getValue() || QueryEngine.execBooleanABoxQuery(q2)) execAllFastCore(q2, newBinding, distVars, undistVars); } distVars.add(var); } }
private void runRecursively(final Taxonomy<ATermAppl> t, final ATermAppl downMonotonic, final ATermAppl rootCandidate, final ResultBinding binding, final Set<ATermAppl> toDo, final boolean direct, final boolean strict) { final int size = _result.size(); _logger.fine(() -> "Trying : " + rootCandidate + ", done=" + toDo); if (!strict) { toDo.remove(rootCandidate); runNext(binding, Collections.singletonList(downMonotonic), rootCandidate); } if (strict || _result.size() > size) { // final Set<ATermAppl> subs = t.getSFlattenedSubs(rootCandidate, // direct); final Set<ATermAppl> subs = flatten(t.getSubs(rootCandidate, direct)); for (final ATermAppl subject : subs) { if (!toDo.contains(subject)) continue; runRecursively(t, downMonotonic, subject, binding, toDo, false, false); } } else { _logger.fine(() -> "Skipping subs of " + rootCandidate); // toDo.removeAll(t.getFlattenedSubs(rootCandidate, false)); toDo.removeAll(flatten(t.getSubs(rootCandidate, false))); } }
private void runNext(final ResultBinding binding, final List<ATermAppl> arguments, final ATermAppl... values) { final ResultBinding candidateBinding = binding.duplicate(); for (int i = 0; i < arguments.size(); i++) if (ATermUtils.isVar(arguments.get(i))) candidateBinding.setValue(arguments.get(i), values[i]); exec(candidateBinding); }
/** * {@inheritDoc} */ @Override public QueryResult exec(final Query query) { _logger.fine(() -> "Executing query " + query); final Timer timer = new Timer("CombinedQueryEngine"); timer.start(); prepare(query); branches = 0; exec(new ResultBindingImpl()); timer.stop(); _logger.fine(() -> "#B=" + branches + ", time=" + timer.getLast() + " ms."); return _result; }
candidates = flatten(_kb.getSubClasses(top, true)); final Set<ATermAppl> toDo = lhsDM ? flatten(taxonomy.getSubs(candidate, direct)) : flatten(taxonomy.getSupers(candidate, direct)); toDo.add(candidate); runRecursively(taxonomy, downMonotonic, candidate, newBinding, new HashSet<>(toDo), direct, strict);