Re: question regarding SERVICE extension

On 03/08/2010 8:11 PM, Carlos Buil Aranda wrote:
> Dear all,
>
> I’ve been working in a SPARQL 1.1 federation extension. I have
> implemented the SERVICE part but a couple of questions came to my mind
> and I need a bit of help. First thing is the results of a SERVICE
> clause. I suppose, if I understood correctly
> http://www.w3.org/2009/sparql/docs/fed/service#defn_service that SERVICE
> returns as results all the variables in it. In the following example I
> suppose that first the SERVICE clauses are processed, and then, using
> all the variables from the two services in the query the OPTIONAL would
> be done. The first service output would be ?gene and the second one
> would be ?gene, ?taxon and ?xGI, righ?
>
> SELECT ?gene ?taxon
> WHERE
> {
> SERVICE <http://iproclass.bio2rdf.org/sparql>
> { <http://bio2rdf.org/iproclass:Q8KKD2>
> <http://bio2rdf.org/ns/iproclass#xGeneid> ?gene .}
> OPTIONAL {
> SERVICE <http://geneid.bio2rdf.org/sparql> {
> ?gene <http://bio2rdf.org/ns/bio2rdf#xTaxon> ?taxon .
> ?taxon <http://bio2rdf.org/ontology/bio2rdf:xGI> ?xGI . }
> }
> }

Yes - SERVICE is a remote "SELECT *"
Your question is also  about general SPARQL execution.

OPTIONAL maps to a LeftJoin operator, so the left and right (LHS, RHS) 
get evaluated to produce intermediate multisets of bindings, which are 
then left joined.  There are various optimizations possible.

> My second question is regarding the possibility of having nested SERVICE
> operators in a query. Is that possible?

No reason why not but note that SERVICE <s> { pattern } ships pattern 
off to the far end, so the nested service is executed on the remote 
machine.  The far end may not support SERVICE in which case it isn't 
going to work.


> The grammar allows that, but in
> the specification I think I have not seen anything explicit. Whould this
> be possible? which would be the semantics of the query? is it allowed to
> have variables instead of URIs pointing to an endpoint? which would be
> the semantics?

The authoritative text is whatever is in the document so it's always 
good to go back to the espec text (editor's working draft) and see what 
it says.  Then we can improve/fix/whatever the text.

See http://www.w3.org/2009/sparql/docs/fed/service.xml#varService

[[
A variable may be used in place of a service IRI indicating that the 
service call for any solution depends on that variable's binding in that 
solution.
]]

which is tricky in talking about the variable's binding because the 
SERVICE element is joined (or leftJoined) with other elements in bottom 
up evaluation.  See the "Editorial note" at the end of sec 2.1.

In GRAPH ?g { ...} ?g ranges over the IRIs of pairs of named graphs in 
the dataset.  This does not apply when "SERVICE ?service" is of 
unbounded range.

One possibility is to define the way the SERVICE combines with other 
elements to be specific kinds of join.  Evaluate the pattern up to that 
point and define SERVICE to be the result of looping on the intermediate 
results, then ?service can be substitued for whatever it is in a 
particular solution.

This also works well with SERVICE+BINDINGS as then the BINDINGS are the 
earlier results, and can be streamed naturally.  BINDINGS are now very 
like values for parameterized queries (c.f. SQL), just using naming for 
the parameters, not positions.

> SELECT ?gene ?taxon
> WHERE
> {
> SERVICE <http://iproclass.bio2rdf.org/sparql>
> { ?prot <http://bio2rdf.org/ns/iproclass#xGeneid> ?gene .}
> SERVICE <http://geneid.bio2rdf.org/sparql> {
> ?gene <http://bio2rdf.org/ns/bio2rdf#xTaxon> ?taxon .
> ?taxon <http://bio2rdf.org/ontology/bio2rdf:xGI> ?xGI . }
>
> }
>
>
> Thanks a lot :)
>
> Carlos

	Andy

Received on Wednesday, 4 August 2010 18:40:43 UTC