On 01/07/15 07:17, Claude Warren wrote:
SelectBuilder sb = new SelectBuilder()
     .addVar( "*" )
     .addWhere( "?s", "?p", "?o" );
sb.setVar( Var.alloc( "?o" ), NodeFactory.createURI(
"http://xmlns.com/foaf/0.1/Person";  ) ) ;Query q = sb.build();

Hi Claude,

Should that be one of
  Var.alloc( "o" )
  Var.alloc(Var.canonical("?o"))

How does it compare to the corner cases in my first message?


There is at least one injection attack:

NodeFactory.createURI of

"http://xmlns.com/foaf/0.1/Person> . ?s ?q <http://example/ns";

because it is string inclusion, jena-querybuilder needs to do the same checks that ParametrizedSparqlString does for URI. A check is needed on literals but a different kind of test.

BTW:

and how do I add

OPTIONAL {
   ?s <q> 123 .
   ?s <v> ?x .
   FILTER(?x>56)
}
?

And for UNION, there seems to be a confusion because it takes a SelectBuilder (a subquery) but that's an SQL-ism, not SPARQL.

It seems to cause problems:

        SelectBuilder sb = new SelectBuilder().addVar("*") ;
        sb.addWhere("?s", "?p", "?o") ;
        SelectBuilder sb1 = new SelectBuilder().addVar("*") ;
        sb1.addWhere("?s", "?p", "?o") ;
        sb1.addUnion(sb1) ;
        Query q1 = sb1.build() ;
        String s1 = q1.toString() ;
        System.out.println(s1) ;

I get stack overflow.

UNION and OPTIONAL are similar - they take graph patterns.

        Andy

Reply via email to