On 17/01/2023 18:27, Justin wrote:
Hi all,

If you try to run (apache-jena-4.7.0/bin/qparse --print=op --query=b.rq)
qparse on:
```
construct {
?s ?p ?o}
where {
?s ?p ?o
}
```

you get:
```
(bgp (triple ?s ?p ?o))
```

Notice only the where clause gets turned into SPARQL algebra.
I see <https://jena.apache.org/documentation/query/algebra.html> that
"Operations of CONSTRUCT, DESCRIBE and ASK are done on top of algebra
evaluation" which I believe explains why we don't see the construct clause
in the algebra.


Yes - it's the WHERE clause - the part that is executed to get variable bindings.

The compiled, optimized Op is executed to get a QueryIterator.


I would like to have a Jena SSE style serialization for SPARQL construct
queries. Does anyone have any tips about how this might be done? Feels like
SSE could accommodate it with something like:

Something like:
  Add words to org.apache.jena.sparql.sse.Tags

org.apache.jena.sparql.algebra
adding
Algebra.translate(Query) -> Op


call the existing Algebra.compile(Query)
and add (construct)/(describe)/(ask)

+
BuilderQuery along side BuilderOp and other builder.
  builder go SSE parser tree to operations.

+
WriterQuery c.f. WriterOp - may not be necessary

+
OpAsQuery to do the reverse of Algebra.translate

It's the execution that's going to be different - other Op all output a QueryIterator.

Alegbra.execQuery(Op) -> QueryExec (not QueryExecution)

An alternativbe is for (construct) to return QueryIteration which is fixed as rows of (?subject= ?predicate= ?object= )

See QueryExecDataset for the code that does the CONSTRUCT part.

    Andy


```
(construct (bgp (triple ?s ?p ?o))
   (bgp (triple ?s ?p ?o)))
```

Reply via email to