On 30/01/12 16:02, Laurent Pellegrino wrote:
Hi all,

Some context to understand why I am asking more information: I have an
application where each time it is called, a new SPARQL query (as
String) is created based on the template and a quadruple (Java
object). This means that interesting values from the quadruple have to
be transformed to be put inside the SPARQL template by using a node
formatter. Then, the SPARQL query has to be parsed and the result has
to be evaluated against a dataset.

I was wondering whether I can skip these parsing steps to save some
time during the execution of the application. It seems it is possible
by working at the algebra level.

If some optimizations are done on queries by Jena, are they done
before the evaluation or after parsing? I mean, when I give to
Algebra.exec(...) a query is it always optimized via a call to
Algebra#optimize?

Optimizations are done at the start of execution.

They happen at the point when QueryEngineBase calls modifyOp.

In QueryEngineBase, modifyOp just returns the op unchanged.

In QueryEngineMain, used by ARQ for general evaluation, mainly in-memory, modifyOp is a call to Algebra.optimize

QueryEngineTDB extends QueryEngineMain. It calls super.modifyOp and does some additional stuff.

QueryEngineSDB inherits from QueryEngineBase so it does nothing. It's processing is done earlier (historical reason) in QueryEngineSDB.init and it calls a couple of optimizations directly. It does not want the join optimizations.

You can replace the optimizer even down to a per-execution basis: see ARQConstants.sysOptimizerFactory and Optimize.decideOptimizer. Or turn off various optimizations by symbol setting in the context. See Optimize.rewrite.

Is there any builder to ease the construction of algebra?

One way might be to construct the algebra using placeholders (well-known nodes), then use a Transform to change it.

I have also seen in a wiki page [1] it is possible to work at the
syntax level. Do you think it better to work at the syntax level or at
the algebra level to do what I want?

Algebra.


[1] 
http://incubator.apache.org/jena/documentation/query/manipulating_sparql_using_arq.html

Kind Regards,

Laurent

Which storage layer are you using?

        Andy

Reply via email to