Hi Andy, with your example I can extract the triples but I can’t extract the sub-queries. Is there a simple way to extract the sub-queries from a query pattern?
Miguel On 08 Aug 2014, at 21:10, Andy Seaborne <a...@apache.org> wrote: > On 08/08/14 10:15, Miguel Bento Alves wrote: >> Hi all, >> >> In a Sparql query, we can extract the query pattern ( q.getQueryPattern() ). >> For instance, in the sparql command: >> Select ?x ?p ?z where {?x ?p ?y . ?x <eg:p> ?z.} >> we can extract: >> { ?x ?p ?y . >> ?x <eg:p> ?z >> } >> >> Is there anyway to extract as TriplePattern? > > If you are working with the parsed object, you have to test/cast the query > pattern: > > Query query = QueryFactory.create("SELECT*{?s ?p ?o}") ; > ElementGroup el = (ElementGroup)query.getQueryPattern() ; > Element bgp = el.getElements().get(0) ; > > ElementPathBlock elp = (ElementPathBlock)bgp ; > PathBlock pb = elp.getPattern() ; > for ( TriplePath tp : pb ) { > Triple t = tp.asTriple() ; > if ( t == null ) > System.err.println("Path: "+tp.getPath()) ; > else > System.out.println(t) ; > } > > Note in the syntax, you can have paths: { ?x :p/:q ?y } > > It is much easier to work with algebra. > > Op op = Algebra.compile(query.getQueryPattern()) ; > System.out.println(op) ; > OpBGP x = (OpBGP)op ; > for ( Triple t : x.getPattern() ) { > System.out.println("Algebra: -- "+t) ; > } > > >> >> Also, we can extract the vars ( PatternVars.vars(qf.getQueryPattern()) ). >> Is it possible to extract the the non-vars? > > There's no code written - you can take a copy of the the code behind > PatternVars and modify that. > >> >> >> Miguel >> >