/** * Expression loop is exp+ or exp* * exp* rewritten as exp+ except in the case e1/e2* where it is correctly rewritten */ private Exp loop(Triple t, Expression loop){ return loop(t.getSubject(), loop.getArg(0), t.getObject(), new ArrayList<Variable>(), max); }
/** * Expression loop is exp+ or exp* * exp* rewritten as exp+ except in the case e1/e2* where it is correctly rewritten */ private Exp loop(Triple t, Expression loop){ return loop(t.getSubject(), loop.getArg(0), t.getObject(), new ArrayList<Variable>(), max); }
res = loop(path, exp); break;
res = loop(path, exp); break;
/** * rec create a path bgp of length n between s and o * s exp(n) o = * {s exp o} union {s exp vi . vi exp(n-1) o} * generate filter to prevent loops on intermediate nodes (vi != vj) */ private Exp loop(Atom subject, Expression exp, Atom object, List<Variable> list, int n){ Exp res = ast.createPath(subject, exp, object); if (n <= 1){ return res; } Variable var = variable(); Term diff = filter(var, list); list.add(var); Exp e1 = ast.createPath(subject, exp, var); Exp e2 = loop(var, exp, object, list, n-1); BasicGraphPattern bgp = BasicGraphPattern.create(e1); if (diff != null){ bgp.add(Triple.create(diff)); } bgp.add(e2); Or or = Or.create(res, bgp); return or; }
/** * rec create a path bgp of length n between s and o * s exp(n) o = * {s exp o} union {s exp vi . vi exp(n-1) o} * generate filter to prevent loops on intermediate nodes (vi != vj) */ private Exp loop(Atom subject, Expression exp, Atom object, List<Variable> list, int n){ Exp res = ast.createPath(subject, exp, object); if (n <= 1){ return res; } Variable var = variable(); Term diff = filter(var, list); list.add(var); Exp e1 = ast.createPath(subject, exp, var); Exp e2 = loop(var, exp, object, list, n-1); BasicGraphPattern bgp = BasicGraphPattern.create(e1); if (diff != null){ bgp.add(Triple.create(diff)); } bgp.add(e2); Union or = Union.create(res, bgp); return or; }