/** * 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; }