/** Calculate scope, working forwards */ private static Collection<Var> calcScope(List<Element> elements, int start, int finish) { Collection<Var> accScope = new HashSet<>() ; for ( int i = start ; i < finish ; i++ ) { Element e = elements.get(i) ; PatternVars.vars(accScope, e) ; } return accScope ; }
public static Collection<Var> vars(Element element) { return vars(new LinkedHashSet<Var>(), element) ; }
public static Collection<Var> vars(Collection<Var> s, Element element) { PatternVarsVisitor v = new PatternVarsVisitor(s) ; vars(element, v) ; return s ; }
public static Map<Node, Var> createMapFixVarNames(Element element) { Collection<Var> vars = PatternVars.vars(element); Map<Node, Var> result = createMapFixVarNames(vars); return result; }
public Set<Var> getVarsMentioned() { Set<Var> result = SetUtils.asSet(PatternVars.vars(element)); result.add(var); // Var should always be part of element - but better add it here explicitly return result; }
/** * Return all vars that are neither source nor target * @return */ public Set<Var> getInnerVars() { Set<Var> result = SetUtils.asSet(PatternVars.vars(element)); result.remove(sourceVar); result.remove(targetVar); return result; }
public Set<Var> getVarsMentioned() { Set<Var> result = SetUtils.asSet(PatternVars.vars(element)); result.add(sourceVar); result.add(targetVar); return result; }
default Set<Var> getVarsMentioned() { Element e = getElement(); Set<Var> result = new HashSet<>(PatternVars.vars(e)); // Note: Usually the relation can be considered inconsistent if the vars are not // mentioned in element; however, it is useful for empty relations result.addAll(getVars()); return result; }
public static Map<Var, Var> createRandomVarMap(Query query, String base) { Collection<Var> vars = PatternVars.vars(query.getQueryPattern()); Generator<Var> gen = VarGeneratorBlacklist.create(base, vars); Map<Var, Var> varMap = vars.stream() .collect(Collectors.toMap( v -> v, v -> gen.next())); return varMap; }
public static Set<Var> getVarsMentioned(Concept concept) { Collection<Var> tmp = PatternVars.vars(concept.getElement()); Set<Var> result = SetUtils.asSet(tmp); return result; }
/** * Creates a generator that does not yield variables part of the concept (at the time of creation) * @param concept * @return */ public static Generator<Var> createGenerator(Concept concept) { Collection<Var> tmp = PatternVars.vars(concept.getElement()); //List<String> varNames = VarUtils.getVarNames(tmp); //Generator base = Gensym.create("v"); Generator<Var> result = VarGeneratorBlacklist.create("v", tmp); return result; }
private static Collection<Var> varsOfQuery(Query query) { Collection<Var> vars = PatternVars.vars(query.getQueryPattern()) ; if ( query.hasValues() ) vars.addAll(query.getValuesVariables()) ; return vars ; }
/** * Select Distinct ?g { Graph ?g { ?s ?p ?o } } * * @return */ /* public static Concept listGraphs() { Triple triple = new Triple(Vars.s, Vars.p, Vars.o); BasicPattern bgp = new BasicPattern(); bgp.add(triple); ElementGroup group = new ElementGroup(); group.addTriplePattern(triple); ElementNamedGraph eng = new ElementNamedGraph(Vars.g, group); Concept result = new Concept(eng, Vars.g); return result; } */ public static Map<Var, Var> createVarMap(Concept attrConcept, Concept filterConcept) { Element attrElement = attrConcept.getElement(); Element filterElement = filterConcept.getElement(); Collection<Var> attrVars = PatternVars.vars(attrElement); Collection<Var> filterVars = PatternVars.vars(filterElement); List<Var> attrJoinVars = Collections.singletonList(attrConcept.getVar()); List<Var> filterJoinVars = Collections.singletonList(filterConcept.getVar()); Map<Var, Var> result = VarUtils.createJoinVarMap(attrVars, filterVars, attrJoinVars, filterJoinVars, null); //, varNameGenerator); return result; }
private void findAndAddNamedVars() { Iterator<Var> varIter = null ; if ( hasGroupBy() ) varIter = groupVars.getVars().iterator() ; else { // Binding variables -- in patterns, not in filters and not in EXISTS LinkedHashSet<Var> queryVars = new LinkedHashSet<>() ; PatternVars.vars(queryVars, this.getQueryPattern()) ; if ( this.hasValues() ) queryVars.addAll(getValuesVariables()) ; // if ( this.hasValues() ) // queryVars.addAll(getValuesVariables()) ; varIter = queryVars.iterator() ; } // All query variables, including ones from bNodes in the query. for ( ; varIter.hasNext() ; ) { Object obj = varIter.next() ; //Var var = (Var)iter.next() ; Var var = (Var)obj ; if ( var.isNamedVar() ) addResultVar(var) ; } }
@Override public Set<Var> getDeclaredVars() { BasicPattern bgp = template.getBGP(); Set<Var> result = SetUtils.asSet(PatternVars.vars(new ElementTriplesBlock(bgp))); if(reverse.isVariable()) { result = Sets.union(Collections.singleton((Var)reverse), result); } return result; }
@Override public void startElement(ElementSubQuery el) { if(el.getQuery().isQueryResultStar()) { Set<Var> queryVars = new LinkedHashSet<>() ; PatternVars.vars(queryVars, el.getQuery().getQueryPattern()) ; for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!queryVars.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } else { VarExprList project = el.getQuery().getProject(); for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!project.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } }
@Override public void startElement(ElementSubQuery el) { if(el.getQuery().isQueryResultStar()) { Set<Var> queryVars = new LinkedHashSet<>() ; PatternVars.vars(queryVars, el.getQuery().getQueryPattern()) ; for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!queryVars.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } else { VarExprList project = el.getQuery().getProject(); for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!project.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } }
public static ElementTransformDatasetDescription create(Stack<Node> graphs, Element e, DatasetDescription dd) { Collection<Var> vars = PatternVars.vars(e); Generator<Var> varGen = VarGeneratorBlacklist.create("v", vars); ExprList defaultGraphExprs = ExprListUtils.fromUris(dd.getDefaultGraphURIs()); ExprList namedGraphExprs = ExprListUtils.fromUris(dd.getNamedGraphURIs()); ElementTransformDatasetDescription result = new ElementTransformDatasetDescription(graphs, varGen, defaultGraphExprs, namedGraphExprs); return result; }
public static BinaryRelation and(BinaryRelation a, BinaryRelation b, boolean transformInPlaceIfApplicable) { Element ae = a.getElement(); Element be = b.getElement(); Collection<Var> vas = PatternVars.vars(ae); Collection<Var> vbs = PatternVars.vars(be); Map<Var, Var> varMap = VarUtils.createDistinctVarMap(vas, vbs, true, null); varMap.put(b.getSourceVar(), a.getTargetVar()); Element ce = ElementUtils.createRenamedElement(be, varMap); ElementGroup eg; boolean isInPlace = ae instanceof ElementGroup && transformInPlaceIfApplicable; if(isInPlace) { eg = (ElementGroup)ae; } else { eg = new ElementGroup(); eg.addElement(ae); } eg.addElement(ce);; BinaryRelation result = new BinaryRelationImpl(eg, a.getSourceVar(), varMap.getOrDefault(b.getTargetVar(), a.getSourceVar())); return result; }