- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Wed, 18 Jan 2006 10:09:55 +0000
- To: Ian Davis <iand@internetalchemy.org>
- CC: public-rdf-dawg-comments@w3.org
Ian Davis wrote:
> Hi all,
>
> It seems that the following query has indeterminate solutions
>
> PREFIX foaf: <http://xmlns.com/foaf/0.1/>
> SELECT ?name ?page
> WHERE {
> ?x foaf:name ?name .
>
> OPTIONAL { ?x foaf:homepage ?page . }
> OPTIONAL { ?x foaf:workplaceHomepage ?page . }
> }
>
> Text in an earlier draft forbade this situation:
>
> http://www.w3.org/TR/2005/WD-rdf-sparql-query-20050217/#OptionalRule
>
> "A variable can not be used in two optional blocks where the outermost
> mention (shallowest occurrence in the tree for each occurrence) of the
> two uses is not the same block."
>
> This was moved to a new section on query execution order:
>
> http://www.w3.org/TR/2005/WD-rdf-sparql-query-20050419/#queryExecutionOrder
>
> "Optional-2... informally, this rule states that there can't be two
> optionals with a common variable, if that variable does not occur in a
> basic graph pattern as well."
>
> This entire section was removed from the July draft.
>
> I think that this rule needs to be reinstated.
>
> For more information and background on this please see chat leading up
> to http://chatlogs.planetrdf.com/swig/2006-01-17#T20-51-16
>
> Cheers,
>
> Ian
>
The July draft was the Last Call version.
The OPTIONAL operator is defined as a binary operator and it is
left-associative (the latter has been added since as it was unclear as someone
pointed out).
So
{
?x foaf:name ?name .
OPTIONAL { ?x foaf:homepage ?page . }
OPTIONAL { ?x foaf:workplaceHomepage ?page . }
}
is (adding some braces):
{
{ { ?x foaf:name ?name . }
OPTIONAL { ?x foaf:homepage ?page . }
}
OPTIONAL { ?x foaf:workplaceHomepage ?page . }
}
that is, the second optional will operate on the matching of the of the first.
Because the situation is well defined by the definition of OPTIONAL in the
last call document, the working group removed the text you quoted.
In your example, the first OPTIONAL will match, giving a value to ?page. The
second optional is then fully grounded (and does not match on your data).
http://pastebin.com/511241
I hope this responds to your comment. It is does, please let us know (if you
send a reply with [CLOSED] on the subject line, scripts will sort it out for us).
Thanks,
Andy
Received on Wednesday, 18 January 2006 10:39:35 UTC