W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2011

Re: Proposed: SPARQL grammar is complete as-is

From: Eric Prud'hommeaux <eric@w3.org>
Date: Tue, 8 Feb 2011 10:04:22 -0500
To: Andy Seaborne <andy.seaborne@epimorphics.com>
Cc: SPARQL Working Group <public-rdf-dawg@w3.org>
Message-ID: <20110208150420.GB5670@w3.org>
* Eric Prud'hommeaux <eric@w3.org> [2011-01-03 12:16-0500]
> * Andy Seaborne <andy.seaborne@epimorphics.com> [2011-01-03 16:25+0000]
> > 
> > 
> > On 03/01/11 16:04, Eric Prud'hommeaux wrote:
> > >Per a new years resolution to minimize LC comments, I implemented
> > >the latest grammar with some variations:
> > >   http://www.w3.org/mid/20110102043945.GA10306@w3.org
> > >
> > >Some of the changes were editorial (extra parens, factoring
> > >RelationalExpresion and Aggregate for readability) but there
> > >were several more substantial issues:
> > >   If "SELECT … { … } BINDINGS … { … }" works, shouldn't other
> > >   reporting forms also allow BINDINGS?
> > 
> > I noticed that change - OK for CONSTRUCT and DESCRIBE.
> 
> I'd think the same logic would apply to ASK (and to subselect, but
> I'll argue that below).
> 
> > I couldn't think of a use case for sub-SELECT and in fact thought it
> > was confusing.
> > 
> > The original idea of BINDINGS was to support streaming variable
> > bindings for the federated query.  Sub-SELECT does not fit this.
> > 
> > Do you have a use case in mind?
> 
> +
> I think the federated query motivation still applies to subselects;
> in "Provenance of Microarray Experiments for a Better Understanding
> of Experiment Results", we exploit SPARQL Federation, connecting a
> database of experimental data to a Diseasome endpoint. If my Diseasome
> query included a subselect (I only want to match diseases which don't
> have a zillion (say five) indicators), I'd like to write that
> subselect directly rather than writing some code to unify locally.
> 
> ½-
> Sticking the BINDINGs clause at the end of the query allows the engine
> to stream results of some queries as it parses each binding. We lose
> that in subselect (unless streaming the subselect results internally
> offers you some advantage).
> 
> +
> I like using BINDINGs in subselects for getting my head around (i.e.
> debugging) aggregate queries as it puts the pre-aggregated result set
> directly in my face. I use this for didactic and testing purposes:
>   http://swobjects.svn.sourceforge.net/viewvc/swobjects/branches/sparql11/tests/sparql11/groupBy-f-having-f.rq?revision=1264&view=markup

Andy reminded me to remind you guys that the above wasn't adopted and
that I still wanted some mechanism to inject bindings into subselects.
I believe the simplest and most effective is just to treat a subselect
just like a select, i.e. to allow the BINDINGS clause in the same place.


> > >   If QuadData doesn't preclude variables, do we need it and
> > >   QuadPattern (they are currently identical)?
> > 
> > See "@@Other notes" in rq25.xml:
> > 
> >     * QuadData and QuadPattern
> > 
> > The notes in the grammar will say that QuadData must exclude
> > variables but in the interests of not duplicating a substantial part
> > of the grammar just to change the term rule to exclude variables, we
> > just make QuadData.
> 
> ahh, roger that. Yes, I suppose having a handle like "QuadData" is
> clearer than enumerating the productions which require a QuadData.
> +1
> 
> > In implementation terms, it can be a flag to say whether variables
> > are allowed or not.
> > 
> > >
> > >   Why must e.g. "INSERT DATA" and "NOT EXISTS" have exactly one
> > >   space in them, instead of behaving like other tokens, separated
> > >   by   [ \t\r\n]* ( "#" [^\r\n]* [ \t\r\n]* )*   ?
> > 
> >     * INSERT DATA, DELETE DATA, DELETE WHERE, NOT IN as tokens
> > 
> > Again, the grammar notes will say that while these are written in as
> > single space, they should be WS*/comment separated.
> > 
> > (I hope this this makes the implementers life easier for the
> > operations INSERT-DELETE vs INSERT DATA case, and DELETE, DELETE
> > WHERE, DELETE DATA).  Done as it is in the gramamr, each operation
> > has a token that identifies the operation so it matches the update
> > language better.)
> 
> +1 on the language choice.
> 
> Re specification, I'd rather write that explicitly in the grammar as
> it allows people to cut and paste the results of our engineering labor.
> 
> 
> > >I sent this message to note these issues in the grammar completeness
> > >thread. Specific replies to the proposed modifications would probably
> > >best reference<http://www.w3.org/mid/20110102043945.GA10306@w3.org>  .
> > 
> > Here works better for me (mildly).
> > 
> > 	Thanks for the comments,
> 
> quite welcome, thanks for the investment in the grammar and my comments.
> 
> 
> > 	Andy
> > 
> > >
> > >
> > >* Andy Seaborne<andy.seaborne@epimorphics.com>  [2010-12-31 13:19+0000]
> > >>
> > >>
> > >>On 23/12/10 12:09, Steve Harris wrote:
> > >>>On 2010-12-23, at 11:58, Andy Seaborne wrote:
> > >>>>>
> > >>>>>I had an action to look at including CONSTRUCT WHERE { ... } for commonality with DELETE WHERE. I've not done anything about that, but it looks to me like it could be included as:
> > >>>>>
> > >>>>>'CONSTRUCT WHERE' GroupGraphPattern SolutionModifier
> > >>>>
> > >>>>See discussion:
> > >>>>http://lists.w3.org/Archives/Public/public-rdf-dawg/2010OctDec/0462.html
> > >>>
> > >>>I completely forgot that.
> > >>>
> > >>>In that case, modulo the stuff I've already mentioned, I think it's OK.
> > >>>
> > >>>- Steve
> > >>
> > >>In the spirit of facts, and not mere guesswork, I went back and
> > >>checked on the implications of a "CONSTRUCT WHERE" short form.  It's
> > >>doable: my fears were unfounded.
> > >>
> > >>Based on the discussion around DELETE WHERE, I have only considered
> > >>a BGP or construct template for the WHERE clause.  No FILTER, no
> > >>other graph patterns.
> > >>
> > >>It's not quite like DELETE WHERE because of FROM/FROM NAMED.
> > >>
> > >>It can be done by only changing the rule for CONSTRUCT:
> > >>
> > >>[9]   	ConstructQuery 	  ::=
> > >>  'CONSTRUCT'
> > >>  (
> > >>    # The original rule
> > >>    ConstructTemplate DatasetClause* WhereClause SolutionModifier
> > >>    |
> > >>    # The short form.
> > >>    DatasetClause* 'WHERE' '{' TriplesTemplate? '}' SolutionModifier
> > >>  )
> > >>
> > >>It may be possible to tidy this up.
> > >>
> > >>In the short form WHERE is mandatory - this enables the parser to
> > >>know it's skipped the template in the full form.
> > >>
> > >>Therefore, I think we should put this in.  The extra editing is
> > >>quite small - adding a short para and example query to the CONSTRUCT
> > >>section.
> > >>
> > >>	Andy
> > >>
> > >
> 
> -- 
> -ericP

-- 
-ericP
Received on Tuesday, 8 February 2011 15:04:58 GMT

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