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 <[email protected]> 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


Reply via email to