/** Substitute into triple patterns */ public static Iterator<Triple> calcTriples(final List<Triple> triples, Iterator<Binding> bindings) { return Iterators.concat(Iter.map(bindings, new Function<Binding, Iterator<Triple>>() { Map<Node, Node> bNodeMap = new HashMap<>(); @Override public Iterator<Triple> apply(final Binding b) { // Iteration is a new mapping of bnodes. bNodeMap.clear(); List<Triple> tripleList = new ArrayList<>(triples.size()); for ( Triple triple : triples ) { Triple q = subst(triple, b, bNodeMap); if ( !q.isConcrete() || !ModelUtils.isValidAsStatement(q.getSubject(), q.getPredicate(), q.getObject()) ) { // Log.warn(TemplateLib.class, "Unbound quad: // "+FmtUtils.stringForQuad(quad)) ; continue; } tripleList.add(q); } return tripleList.iterator(); } })); }
/** Substitute into quad patterns */ public static Iterator<Quad> calcQuads(final List<Quad> quads, Iterator<Binding> bindings) { return Iterators.concat(Iter.map(bindings, new Function<Binding, Iterator<Quad>>() { Map<Node, Node> bNodeMap = new HashMap<>(); @Override public Iterator<Quad> apply(final Binding b) { // Iteration is a new mapping of bnodes. bNodeMap.clear(); List<Quad> quadList = new ArrayList<>(quads.size()); for ( Quad quad : quads ) { Quad q = subst(quad, b, bNodeMap); if ( !q.isConcrete() ) { // Log.warn(TemplateLib.class, "Unbound quad: // "+FmtUtils.stringForQuad(quad)) ; continue; } quadList.add(q); } return quadList.iterator(); } })); }
@Override public Iterator<Quad> find(Node g, Node s, Node p, Node o) { return g.isConcrete() ? findInOneGraph(g, s, p, o) : concat(findNG(ANY, s, p, o), findInOneGraph(defaultGraphIRI, s, p, o)); }
@Override public Iterator<Quad> findNG(Node g, Node s, Node p, Node o) { return g.isConcrete() ? findInOneGraph(g, s, p, o) : concat(map(listGraphNodes(), gn -> findInOneGraph(gn, s, p, o))); }