W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > July to September 2006

Re: Converting SPARQL syntax to trees

From: Seaborne, Andy <andy.seaborne@hp.com>
Date: Fri, 29 Sep 2006 14:25:21 +0100
Message-ID: <451D1EC1.70409@hp.com>
To: Fred Zemke <fred.zemke@oracle.com>
CC: public-rdf-dawg@w3.org


Fred Zemke wrote:

 > Attached please find my latest contribution to the formal
 > semantics of SPARQL, a paper on how to convert SPARQL
 > syntax to a tree representation.  The paper tackles some
 > non-trivial issues, the scope of FILTERs and identifiying
 > the first operand of OPTIONAL.  Enjoy.
 >
 > Fred

And the attached has:
> Andy Seaborne in
> http://lists.w3.org/Archives/Public/public-rdf-dawg/2006AprJun/0175.html
> proposed that the best way to identify the first operand of OPTIONAL is to
> rearrange the grammar, so that rule [19] becomes
> [19] GroupGraphPattern ::=
> '{' GraphPattern
> ( ( OptionalGraphPattern ('.')? )+ GraphPattern )?
> '}'
> and rule [23] becomes
> [23] GraphPatternNotTriples ::=
> GroupOrUnionGraphPattern | GraphGraphPattern
> I initially embraced this solution; however, I now believe that it is not equivalent to
> the current grammar. For example, it will not recognize this query:
> WHERE { ?x :y :z OPTIONAL { ?x :u :v }
>         ?x :y :z OPTIONAL { ?x :r :s } }

So the rules to full capture that should be

[19]  GroupGraphPattern ::= '{' GroupElement '}'

[19a] GroupElement      ::=
         GraphPattern ( OptionalGraphPattern '.'? GroupElement )?

that is, recurse on GroupElement not on GraphPattern.

I ran this on your example query and got the parse tree I expected:

   1 (query
   2   (prefix : <http://example/>)
   3   (select *)
   4   (group
   5     (optional
   6       (basicgraphpattern
   7         (triplepattern ?x :y :z))
   8       (group
   9         (basicgraphpattern
  10           (triplepattern ?x :u :v))))
  11     (optional
  12       (basicgraphpattern
  13         (triplepattern ?x :y :z))
  14       (group
  15         (basicgraphpattern
  16           (triplepattern ?x :r :s)))))
  17 )


I also ran the SPARQL syntax test suite with no problems encountered having 
added this example query to the syntax test suite.

It would be good to tidy up the grammar in various ways but this shows that 
the approach works.

	Andy
Received on Friday, 29 September 2006 13:25:53 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:27 GMT