/** * exp is graph ?g { PAT } set GRAPHNODE(?g) before and GRAPHNODE(?gNode) * after */ private int graph(Producer p, Node gNode, Exp exp, Stack stack, int n) { getVisitor().graph(this, exp.getGraphName(), exp, null); int backtrack = n - 1; // set GRAPHNODE stack.set(n, exp.first()); // set graph body stack.add(n + 1, exp.rest()); Exp restore = Exp.create(GRAPHNODE, Exp.create(NODE, gNode)); restore.status(true); // set restore previous graph node stack.add(n + 2, restore); if (exp.first().rest() != null) { // use case: GRAPHNODE(NODE(?g), FILTER(?g = 'src')) // add the filter stack.add(n + 1, exp.first().rest()); } // do next backtrack = eval(p, gNode, stack, n); return backtrack; }