If you want plain java, the query builder module may help but IIRC it is centred around buildign a query from scratch not modifying one.

That leaves 3 choices:

1/ Syntax tree manipulation

query.getQueryPattern

The topmost element of the WHERE clause wil be an ElementGroup. Create an ElementFilter and add it to the group.

2/ Convert to the algebra, and walk down through the project and add a OpFilter around the BGP. Call OpToQuery to get a query back. This is more work for the simpel case but for more complicated changes, the algebra can be easier to work with.

3/ Put in a FILTER(true) or FILTER("Spot this string") to start with as a marker to be changed and use

org.apache.jena.sparql.syntax.syntaxtransform.QueryTransformOps

to rewrite it to the thing you want.

Note that syntaxtransform apply to the whole abstract syntax tree so be careful not to rewrite other things on more complicated queries.


If it is this simple case shown, (1) is easiest. It depends on how complicated it will get later.

        And


On 14/09/16 15:09, Bart van Leeuwen wrote:
I would prefer plain Jena

Met Vriendelijke Groet / With Kind Regards
Bart van Leeuwen

##############################################################
# twitter: @semanticfire
# netage.nl
# http://netage.nl
# Esdoornstraat 3
# 3461ER Linschoten
# tel. +31(0)6-53182997
##############################################################



From:   Martynas Jusevičius <marty...@graphity.org>
To:     users@jena.apache.org
Date:   14-09-2016 15:20
Subject:        Re: Programatically adding filters to sparql query



Are you able to use SPIN or does it have to be plain Jena?

On Wed, 14 Sep 2016 at 16:08, Bart van Leeuwen
<bart_van_leeu...@netage.nl>
wrote:

Hi,

I'm looking for some documentation on adding additional filters to a
parsed sparql query

I can do:

Query q = new Query('select ?s ?p ?o where { ?s a sem:Event . ?s ?p ?o
}');

now I'd like to use the Query object Q to extend this query with a
FIlter
clause.

any documentation pointers are appreciated.

Met Vriendelijke Groet / With Kind Regards
Bart van Leeuwen

##############################################################
# twitter: @semanticfire
# netage.nl
# http://netage.nl
# Esdoornstraat 3
# 3461ER Linschoten
# tel. +31(0)6-53182997
##############################################################



Reply via email to