- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Thu, 20 Apr 2006 12:56:46 +0100
- To: Jorge Pérez <jperez@utalca.cl>
- CC: public-rdf-dawg-comments@w3.org
Jorge Pérez wrote: > Hi! I think that the following query is problematic too. I tried it in > SPARQLer and gave me strange results and in the SPARQL last draft I cannot > find a precise answer: > > The data is: > ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > @prefix : <http://ing.utalca.cl/~jperez/research/rdf/> . > > _:b1 :titlename "book1" . > _:b1 :authorname "author1" . > _:b1 :year "2006" . > ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > The query: > > PREFIX : <http://ing.utalca.cl/~jperez/research/rdf/> > SELECT * > FROM :sample2.rdf > WHERE { > ?B :titlename ?N . > ?B :year ?Y . > OPTIONAL { ?B :authorname ?N } > } > > What is the answer? Again at least two possibilities according to the "scope" > of optional > > 1) B=_:b1, N="book1", if one assume that the optional "is applied to" the two > triple patterns. > 2) nothing, if one assume that the optonal "is applied to" the second triple > pattern. > > The ambiguitie starts again in the formal definition of optional, it > reads "...the second pattern modifies pattern solutions of the first > pattern..." but here there is no clear what the "first pattern" is. SPARQLer > gave me solution 1) but I cannot find a rule in the draft that validate this > behavior. If one consider the following query (I put just the WHERE part) > > WHERE { > ?B :year ?Y . > OPTIONAL { ?B :authorname ?N } > ?B :titlename ?N . > } > > the solution is not clear... one may assume here that the optional "is applied > to" just the triple pattern above but again there is no formal validation of > this in the draft. Here the left associativity rule of the optional keyword > included in the last draft do not applied because it states that optional is > left associative considering other optional patterns but nothing about triple > patters. In this case SPARQLer gave me solution 2). > > How can one solve the problem? > * One posibility is to add a complete set of associative rules: "." keyword is > left associative, "optional" keyword is left associative, etc. from my point > of view it may make the specification less readable. > * Other posibility is to think that each complex graph pattern (group graph > pattern) has a "mandatory part" and several "optional parts". A solution must > match the complete manatory part, and optional parts only add "information" to > the solution of the mandatory part if the information exists. The evaluation > of optional parts is made resursively in the same way. > * Other? > > - Jorge Jorge, The translation from syntax to conceptual query is given by the SPARQL grammar in the document. The key rules are [20] GraphPattern [21] FilteredBasicGraphPattern [19] GroupGraphPattern [23] GraphPatternNotTriples Rule [20] is the top level graph pattern rule. Rule [21] causes sequences of triple patterns to be gathered together. This rule is the only path through the grammar to have triple patterns in a query. It is a basic graph pattern (BGP) with addition value constraints. Being an inner rules, it gives triples patterns, and '.' a high precedence. Rule [19] is the rule for {} blocks. Rule [23] enumerates the various pattern types, except for basic graph pattern, and each pattern type uses rule [19]. Taking a query > PREFIX : <http://ing.utalca.cl/~jperez/research/rdf/> > SELECT * > FROM :sample2.rdf > WHERE { > ?B :titlename ?N . > ?B :year ?Y . > OPTIONAL { ?B :authorname ?N } > } then ?B :titlename ?N . ?B :year ?Y . form a basic graph pattern by rule [19] and optional combines that BGP with the "{ ?B :authorname ?N }". to form a single graph pattern. The outer group of the WHERE has one element. But this: > WHERE { > ?B :year ?Y . > OPTIONAL { ?B :authorname ?N } > ?B :titlename ?N . > } is a different query - it has a different structure in the grammar (it's a optional of a BGP (?B :year ?Y) and BGP (?B :authorname ?N) in a group with BGP (?B :titlename ?N). The outer group of the WHERE has two elements. Your "possibility one" is already there - it's the grammar which gives the mapping from syntax to conceptual form. Andy
Received on Thursday, 20 April 2006 11:57:08 UTC