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