Thank you for the link Lorenz. Yes it behaves the same with the same data,
in my test it had a different dataset where ?xLabel was bound but with no
matching ?x variable.

Someone has recently elaborated on this with regards to Jena here.
https://newbedev.com/sparql-optional-query

On Thu, Aug 5, 2021 at 7:44 AM Lorenz Buehmann <
buehm...@informatik.uni-leipzig.de> wrote:

> That shouldn't happen for Blazegraph, especially as they even have a
> blog entry for this topic, dubbed "order matters":
> https://github.com/blazegraph/database/wiki/SPARQL_Order_Matters
>
> You can check the Blazegraph query plan as well, just put
> &explain=details to the request URL
>
> You can also try to disable the query optimizer via
>
> SELECT ... WHERE {
>    hint:Query hint:optimizer "None".
>    ...
> }
>
>
> If this changes the result, then there is a bug in Blazegraph
>
> On 03.08.21 19:44, Marco Neumann wrote:
> > OK yes, thank you for the algebra hint and implicit empty graph pattern
> > Andy. Blazegraph has thrown me off here since it seems to interpret the
> > query differently. without preserving the table unit on the left hand
> side
> > I presume.
> >
> > On Tue, Aug 3, 2021 at 6:20 PM Andy Seaborne <a...@apache.org> wrote:
> >
> >>
> >> On 03/08/2021 17:38, Marco Neumann wrote:
> >>> I have just noticed that the following query pattern with optionals
> >> yields
> >>> undesirable SPARQL query results if the variable (?xLabel) isn't bound.
> >>>
> >>> Let the data be: :x :p :y
> >>>
> >>> SELECT ?x
> >>> WHERE{
> >>> OPTIONAL{ ?x rdfs:label ?xLabel.}
> >>> ?x :p ?y.
> >>> }
> >>       (join
> >>         (leftjoin
> >>           (table unit)
> >>           (bgp (triple ?x rdfs:label ?xLabel)))
> >>         (bgp (triple ?x :p ?y)))))
> >>
> >> Note the (table unit) in the leftjoin
> >>
> >> SELECT ?x
> >> WHERE{
> >>     {}
> >>     OPTIONAL{ ?x rdfs:label ?xLabel.}
> >>     ?x :p ?y.
> >> }
> >>
> >>> while reversing the order in the query pattern yields a result as
> >> expected:
> >>> :x
> >>>
> >>> SELECT ?x
> >>> WHERE{
> >>> ?x :p ?y.
> >>> OPTIONAL{ ?x rdfs:label ?xLabel.}
> >>> }
> >>     (project (?x)
> >>       (leftjoin
> >>         (bgp (triple ?x :p ?y))
> >>         (bgp (triple ?x rdfs:label ?xLabel)))))
> >>
> >>> Is this (the importance of order of optionals) a normal behavior during
> >>> query execution here?
> >> Yes - it is correct. They are different queries with different results
> >> (this is not an optimizer issue).
> >>
> >>       Andy
> >>
> >
>


-- 


---
Marco Neumann
KONA

Reply via email to