Hi,
I'm probably misunderstanding the query, but what is the purpose of the
OPTIONAL here?
?graph is bound because of VALUES clause, ?concept is bound because of
the graph pattern before the OPTIONAL as well.
So ?graph and ?concept are bound on the left hand side of the left-join
aka OPTIONAL
Here is the algebra:
(join
(table (vars ?graph)
(row [?graph<http://www.yso.fi/onto/tero/>])
(row [?graph<http://www.yso.fi/onto/mesh/>])
)
(assign ((?graph ?*g0))
(leftjoin
(distinct
(project (?concept ?prefLabelm ?altLabelm)
(filter (= (lang ?prefLabelm) "fi")
(quadpattern
(quad ?*g0 ??0 rdf:first ?concept)
(quad ?*g0 ??0 rdf:rest ??1)
(quad ?*g0 ??1 rdf:first ?score1)
(quad ?*g0 ??1 rdf:rest ??2)
(quad ?*g0 ??2 rdf:first ?prefLabelm)
(quad ?*g0 ??2 rdf:rest rdf:nil)
(quad ?*g0 ??0 text:query ??3)
(quad ?*g0 ??3 rdf:first skos:prefLabel)
(quad ?*g0 ??3 rdf:rest ??4)
(quad ?*g0 ??4 rdf:first "aamiainen*")
(quad ?*g0 ??4 rdf:rest rdf:nil)
))))
(sequence
(graph ?*g0
(path ?concept (path* skos:broader) ??5))
(quadpattern (quad ?*g0 ??5 skos:topConceptOf ?graph)))))
Can you say what you want to achieve with the OPTIONAL maybe, it won't
return any additional data as far as I can see.
On 14.03.22 14:30, Mikael Pesonen wrote:
Hi, not directly related to Jena, but I have a query in which optional
clause limits the number of results. I thought it's never possible. So
below query returns less results with optional enabled. Wonder why is
that and what would be the correct way to get optional data so than
all rows are returned?
SELECT *
WHERE
{
VALUES ?graph {<http://www.yso.fi/onto/tero/>
<http://www.yso.fi/onto/mesh/>}
GRAPH ?graph
{
{
SELECT DISTINCT ?concept ?prefLabelm ?altLabelm WHERE
{
{
(?concept ?score1 ?prefLabelm) text:query
(skos:prefLabel "aamiainen*") .
FILTER ( (lang(?prefLabelm) = "fi" ))
}
}
}
# OPTIONAL { ?concept skos:broader* [ skos:topConceptOf ?graph] }
}
}