@Override public Edge next() { while (it.hasNext()) { Edge ent = it.next(); if (ent != null && match.match(edge, ent, env)) { if (isCheckType) { // ?x rdf:type ex:Person // keep one occurrence of each resource if (isFirst(ent)) { return ent; } } else { return ent; } } } return null; }
@Override public Edge next() { while (it.hasNext()) { Edge ent = it.next(); if (ent != null && match.match(edge, ent, env)) { if (isCheckType) { // ?x rdf:type ex:Person // keep one occurrence of each resource if (isFirst(ent)) { return ent; } } else { return ent; } } } return null; }
private boolean match(Mapping map) { int i = 0; Memory env = memory; Matcher mm = match; for (Node qNode : map.getQueryNodes()) { Node node = map.getNode(i++); if (!mm.match(qNode, node, env)) { return false; } } return true; }
/** * Check if target node match its query node and its binding */ private boolean check(Node n0, Node n1) { if (index == 0) { if (!matcher.match(edge.getNode(1), n1, memory)) { return false; } if (targetNode != null && !targetNode.match(n1)) { return false; } } else { if (!matcher.match(edge.getNode(0), n0, memory)) { return false; } if (targetNode != null && !targetNode.match(n0)) { return false; } } return true; }
for (Node graph : prod.getGraphNodes(gNode, qq.getFrom(gNode), env)) { if (//member(graph, query.getFrom(gNode)) && mm.match(gNode, graph, env) && env.push(gNode, graph, n)) { if (stop) {
if (mm.match(name, graph, env) && env.push(name, graph, n)) { Mappings m = graph(prod, exp, stack, map, n);
/** * Edge as Function use case: ?x xpath('/book/title') ?y */ private int eval(Node gNode, Exp exp, Stack stack, int n) { int backtrack = n - 1; Edge qEdge = exp.getEdge(); Node qNode = qEdge.getNode(1); Memory env = memory; Evaluator ev = evaluator; Matcher mm = match; for (Node node : ev.evalList(exp.getFilter(), env)) { if (mm.match(qNode, node, env) && env.push(qNode, node)) { backtrack = eval(gNode, stack, n + 1); env.pop(qNode); if (backtrack < n) { // if (hasEvent){ // send(Event.FINISH, exp, gNode, stack); // } return backtrack; } } } return backtrack; }
/** * Check occurrence of edge * If edge has an associated query, check class/property definition in ontology */ void edge(Node gNode, Exp exp, Environment env){ Edge edge = exp.getEdge(); boolean exist = false, match = false, define = false; for (Edge ent : producer.getEdges(gNode, query.getFrom(gNode), edge, env)){ if (ent != null){ exist = true; if (matcher.match(edge, ent, env)){ match = true; break; } } } Query q = query.get(edge); if (q != null){ Eval ee = Eval.create(producer, eval.getEvaluator(), matcher); Mappings map = ee.query(q); define = map.size()>0; report(edge, exist, match, define); } else { report(edge, exist, match); } }
if (!(mm.match(outNode, node, env) && env.push(outNode, node, n))) { for (int i = 0; i < k; i++) { subNode = subQuery.getSelect().get(i);