- From: tessaris <tessaris@inf.unibz.it>
- Date: Tue, 24 Jan 2006 16:14:13 +0100
- To: "Seaborne, Andy" <andy.seaborne@hp.com>
- CC: RDF Data Access Working Group <public-rdf-dawg@w3.org>
Seaborne, Andy wrote: > > -------- Original Message -------- > >>From: tessaris <mailto:tessaris@inf.unibz.it> >>Date: 24 January 2006 14:03 >> >>Seaborne, Andy wrote: >> >>>Should have been send to the WG list. >>> >>> Andy >>> >>>-------- Original Message -------- >>> >>> >>>>From: Seaborne, Andy <> >>>>Date: 23 January 2006 13:27 >>>> >>>>I have chnaged the grammar to reflect the clarification of BGPs > > and > >>>>constraints by putting a rule in that is called BasicGraphPattern. >>>> >>>>The case of: >>>>{ _:a :p ?v . FILTER(?v <3) . _:a : ?w } >>>> >>>>I have changed: >>>> Moved constraint into a BasicGraphPattern rule >>>> Created BlockOfTriples for a sequnece of triple patterns (this > > was > >>>> "Triples") Moved BlockOfTriples and BasicGraphPattern to be with >>>> the other pattern rules Renamed Triples1 to TriplesSameSubject >>>> Removed recursion in TriplesSameSubject >>>> >>>> Andy >> >>Andy, I understand the reasons for the changes but I'm not sure > > whether > >>they match everybody's intuition. >> >>I think that we agree on the fact that SPARQL operators transform > > answer > >>sets (set of pattern solutions) rather than single pattern solutions. >> >>Under this assumption I see FILTER as the relational (not SQL) SELECT >>operator. So I don't see any reason for restricting its usage to Basic >>Graph Pattern only. E.g. I think that a query like >> >> { BGP1 UNION BGP2 } FILTER (E1) >> >>should be fine; but it seems to me that the new grammar is preventing >>this. > > > This query passes my parser: > > PREFIX : <http://example/> > > SELECT * > WHERE > { { :a :b ?v } UNION { :d :e ?v } FILTER(?v<3) } > > And it passes the perl-based parser at Yacker (Eric - the C parser > crashed with a 500) > > http://www.w3.org/2005/01/yacker/uploads/SPARQL > > It works because the outer {} forms a group. Yep, I see that. Although I think that the grammar should help the reader to understand the structure of the language, it's not just a matter of syntax. >>When during the telecon I said that 'FILTERS' can be pushed at the end > > I > >>meant that >> >>{ _:a :p ?v . FILTER(?v <3) . _:a : ?w } >> >>should be understood as >> >>{ _:a :p ?v . _:a : ?w } FILTER(?v <3) >> >>I'm not sure how to reflect this on the actual grammar, though. > > > The grammar is about the syntax - without altering the language to > require FILTERs at the end (which in poractical terms is quite > inconvenient), I made the BGP rule capture that the scope of the BGP was > no broken by a filter. > > >>Then I think that having the definition >> >>"""" >>Definition: Basic Graph Pattern >> >>A Basic Graph Pattern is a set of Triple Patterns. >>""" >> >>together with the grammar rule >> >>[21] BasicGraphPattern ::= BlockOfTriples? ( Constraint '.'? >>BasicGraphPattern )? >> >>looks confusing; since we have Constraints as well as triple patterns. > > > As a BGP is not a pure syntactic element of the grammar (it can be > split) something has to give. I choose to use a BlockOfTriples for the > concept of adjacet triples so as not to use the term BasicGraphPattern > here. I reserve BGP for the thing closest to the sequence between a > pair of {} - the {} forming scope markers (implementation dependent as > to how this is handled so it is only indicative) > > >>I'd rather prefer something closer to the old grammar, to be sure that > > a > >>Basic Graph Pattern is always a leaf in the parse tree: >> >>[20] GraphPattern ::= FilteredBasicGraphPattern? ( >>GraphPatternNotTriples '.'? GraphPattern )? >>[21] GraphPatternNotTriples ::= OptionalGraphPattern | >>GroupOrUnionGraphPattern | GraphGraphPattern | Constraint >> >>with the rule >> >>FilteredBasicGraphPattern ::= BlockOfTriples? ( Constraint '.'? >>FilteredBasicGraphPattern )? >> >>and a comment on the fact that 'BoT1 constraint BoT2' should be >>considered equivalent to '{ BoT1 . BoT2 } constraint'. > > > The implication of the old grammer was that > > { _:a :p ?v . FILTER(?v <3) . _:a : ?w } > > Is a group of a { BGP1 FILTER BGP2 } and so implies that the two BGPs > undergo enatilment separately. > > Andy Yes, in fact my proposal was to use the term 'FilteredBasicGraphPattern' instead of just 'BasicGraphPattern', and have 'Constraint' *also* in the 'GraphPatternNotTriples' rule. But if you think that the current formulation is clearer, then it's fine for me. --sergio
Received on Tuesday, 24 January 2006 15:14:33 UTC