Rob Vesse wrote:
> Yes one possibility that me and Andy raised in that discussion was the
> use of the following:
>
> SELECT DISTINCT ?g WHERE { GRAPH ?g { } }
>
> Since GRAPH ?g is defined as an iteration over all graphs in the dataset
> (which may of course be modified by the presence of FROM and FROM NAMED)
> and the empty graph pattern returns a single empty solution (i.e. always
> matches) then on paper at least this query should do the same job and be
> much more performant. Whether this query works may vary depending on
> how accurately an engine actually implements the SPARQL spec because the
> whole dataset/GRAPH interaction is one of the areas prone to ambiguities
> in the spec and differences of opinion between implementers
Indeed, the optimization might already be there... Sarven, could you try to see
if SELECT DISTINCT ?g { GRAPH ?g { } } gives you what you want, faster?
qparse --print quad --explain "SELECT DISTINCT ?g { GRAPH ?g { ?s ?p ?o } }"
SELECT DISTINCT ?g
WHERE
{ GRAPH ?g
{ ?s ?p ?o }
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(distinct
(project (?g)
(quadpattern (quad ?g ?s ?p ?o))))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(distinct
(project (?g)
(graph ?g
(bgp (triple ?s ?p ?o)))))
qparse --print quad --explain "SELECT DISTINCT ?g { GRAPH ?g { } }"
SELECT DISTINCT ?g
WHERE
{ GRAPH ?g
{ }
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(distinct
(project (?g)
(datasetnames ?g)))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(distinct
(project (?g)
(graph ?g
(table unit))))
Paolo