public Element transform(ElementPathBlock el) { PathBlock before = el.getPattern(); PathBlock after = TransformDeduplicatePatterns.deduplicate(before); Element result; if(after.equals(before)) { result = el; } else { ElementPathBlock tmp = new ElementPathBlock(); tmp.getPattern().addAll(after); result = tmp; } return result; } }
public Element transform(ElementPathBlock el) { PathBlock before = el.getPattern(); PathBlock after = TransformDeduplicatePatterns.deduplicate(before); Element result; if(after.equals(before)) { result = el; } else { ElementPathBlock tmp = new ElementPathBlock(); tmp.getPattern().addAll(after); result = tmp; } return result; } }
@Override public void visit(ElementPathBlock el) { // TODO Paths not handled yet List<TriplePath> triplePaths = el.getPattern().getList(); for(TriplePath triplePath : triplePaths) { Triple triple = triplePath.asTriple(); Quad quad = new Quad(defaultGraphName, triple); quads.add(quad); } //throw new RuntimeException("Not implemented"); }
public static void collectQuads(ElementPathBlock element, Context context, List<Quad> result) { Node graphNode = context.getGraphNode(); for(TriplePath triplePath : element.getPattern().getList()) { Triple triple = triplePath.asTriple(); if(triple == null) { logger.warn("Omitted non-simple triple"); } Quad quad = new Quad(graphNode, triple); result.add(quad); } }
public static void collectQuads(ElementPathBlock element, Context context, List<Quad> result) { Node graphNode = context.getGraphNode(); for(TriplePath triplePath : element.getPattern().getList()) { Triple triple = triplePath.asTriple(); if(triple == null) { logger.warn("Omitted non-simple triple"); } Quad quad = new Quad(graphNode, triple); result.add(quad); } }
public static void collectQuads(ElementPathBlock element, Context context, List<Quad> result) { Node graphNode = context.getGraphNode(); for(TriplePath triplePath : element.getPattern().getList()) { Triple triple = triplePath.asTriple(); if(triple == null) { logger.warn("Omitted non-simple triple"); } Quad quad = new Quad(graphNode, triple); result.add(quad); } }
@Override public Element transform(ElementPathBlock el) { ElementPathBlock epb = new ElementPathBlock() ; boolean changed = false ; for (TriplePath p : el.getPattern()) { TriplePath p2 = transform(p) ; changed = changed || p != p2 ; epb.addTriplePath(p2) ; } if ( changed ) return epb ; return el ; }
@Override public Element transform(ElementPathBlock el) { ElementPathBlock epb = new ElementPathBlock() ; boolean changed = false ; for (TriplePath p : el.getPattern()) { TriplePath p2 = transform(p) ; changed = changed || p != p2 ; epb.addTriplePath(p2) ; } if ( changed ) return epb ; return el ; }
protected void insert(TripleCollector target, ElementPathBlock source) { for ( TriplePath path : source.getPattern() ) { if ( path.isTriple() ) { target.addTriple(path.asTriple()) ; } else { target.addTriplePath(path) ; } } }
@Override public void visit(ElementPathBlock el) { for (final TriplePath pth : el.getPattern().getList()) { if ( ! pth.isTriple()) { throw new QueryParseException("Paths not permitted in data quad", -1, -1) ; } } iter = iter.andThen( WrappedIterator.create(el.getPattern().getList().iterator()) .mapWith( pth -> pth.asTriple() ) .mapWith( MAP )); }
@Override public void visit(ElementPathBlock el) { for (final TriplePath pth : el.getPattern().getList()) { if ( ! pth.isTriple()) { throw new QueryParseException("Paths not permitted in data quad", -1, -1) ; } } iter = iter.andThen( WrappedIterator.create(el.getPattern().getList().iterator()) .mapWith( pth -> pth.asTriple() ) .mapWith( MAP )); }
public static Element applyTransform(ElementPathBlock el, Map<Node, BinaryRelation> virtualPredicates, Generator<Var> rootVarGen) { PathBlock bgp = el.getPattern(); ElementPathBlock newPattern = new ElementPathBlock(); List<Element> elements = new ArrayList<Element>(bgp.size()); for(TriplePath tp : bgp) { if(tp.isTriple()) { Triple triple = tp.asTriple(); Generator<Var> varGen = rootVarGen.clone(); Element e = applyTransform(triple, virtualPredicates, varGen); if(e == null) { newPattern.addTriple(new TriplePath(triple)); } else { elements.add(e); } } else { logger.warn("Triple path expressions not supported"); newPattern.addTriple(tp); } } Iterable<Element> items = newPattern.isEmpty() ? elements : Iterables.concat(Collections.singleton(newPattern), elements) ; Element result = ElementUtils.createElementGroup(items); return result; }
/** Insert into a group, skip initial empty subgroups; recombining ElementPathBlock */ private static void insertIntoGroup(ElementGroup eg, Element e) { // Skip initial empty subgroup. if ( emptyGroup(e) && eg.isEmpty() ) return ; // Empty group. if ( eg.isEmpty() ) { eg.addElement(e); return ; } Element eltTop = eg.getLast() ; if ( ! ( eltTop instanceof ElementPathBlock ) ) { // Not working on a ElementPathBlock - no need to group-of-one // when inserting ElementPathBlock. e = unwrapGroupOfOnePathBlock(e) ; eg.addElement(e); return ; } if ( ! ( e instanceof ElementPathBlock ) ) { eg.addElement(e); return ; } // Combine. ElementPathBlock currentPathBlock = (ElementPathBlock)eltTop ; ElementPathBlock newPathBlock = (ElementPathBlock)e ; currentPathBlock.getPattern().addAll(newPathBlock.getPattern()); }
for (final TriplePath path : ((ElementPathBlock) first).getPattern())
for (final TriplePath path : ((ElementPathBlock) first).getPattern())
for (final TriplePath path : ((ElementPathBlock) first).getPattern())
/** * Attempts to parse a given string into a Jena Path. * Throws an Exception if the string cannot be parsed. * @param string the string to parse * @param model the Model to operate on (for prefixes) * @return a Path or a Resource if this is a URI */ public static Object getJenaPath(String string, Model model) throws QueryParseException { Query query = ARQFactory.get().createQuery(model, "ASK { ?a \n" + string + "\n ?b }"); Element element = query.getQueryPattern(); if(element instanceof ElementGroup) { Element e = ((ElementGroup)element).getElements().get(0); if(e instanceof ElementPathBlock) { Path path = ((ElementPathBlock) e).getPattern().get(0).getPath(); if(path instanceof P_Link && ((P_Link)path).isForward()) { return model.asRDFNode(((P_Link)path).getNode()); } else { return path; } } else if(e instanceof ElementTriplesBlock) { return model.asRDFNode(((ElementTriplesBlock) e).getPattern().get(0).getPredicate()); } } throw new QueryParseException("Not a SPARQL 1.1 Path expression", 2, 1); }
/** * Attempts to parse a given string into a Jena Path. * Throws an Exception if the string cannot be parsed. * @param string the string to parse * @param model the Model to operate on (for prefixes) * @return a Path or a Resource if this is a URI */ public static Object getJenaPath(String string, Model model) throws QueryParseException { Query query = ARQFactory.get().createQuery(model, "ASK { ?a \n" + string + "\n ?b }"); Element element = query.getQueryPattern(); if(element instanceof ElementGroup) { Element e = ((ElementGroup)element).getElements().get(0); if(e instanceof ElementPathBlock) { Path path = ((ElementPathBlock) e).getPattern().get(0).getPath(); if(path instanceof P_Link && ((P_Link)path).isForward()) { return model.asRDFNode(((P_Link)path).getNode()); } else { return path; } } else if(e instanceof ElementTriplesBlock) { return model.asRDFNode(((ElementTriplesBlock) e).getPattern().get(0).getPredicate()); } } throw new QueryParseException("Not a SPARQL 1.1 Path expression", 2, 1); }
return compilePathBlock(((ElementPathBlock)elt).getPattern()) ;
@Test public void bNodeSPARQL_Query_1() { String qs = "SELECT * { ?s ?p <_:ABC>}"; Query query = QueryFactory.create(qs); Element el = ((ElementGroup)query.getQueryPattern()).get(0); ElementPathBlock epb = (ElementPathBlock)el; TriplePath tp = epb.getPattern().get(0); Triple t = tp.asTriple(); assertEquals("ABC", t.getObject().getBlankNodeLabel()); }