- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Thu, 21 Apr 2005 21:03:28 +0100
- To: Dave Beckett <dave.beckett@bristol.ac.uk>
- Cc: 'RDF Data Access Working Group' <public-rdf-dawg@w3.org>
Dave Beckett wrote:
> Question: Is the WHERE {...} structure optional in sparql?
>
> The grammar says yes and lookin in the WD I can see it's given as an
> example with ASK,
>
> So whereas CONSTRUCT, DESCRIBE and SELECT are all given examples
> requiring WHERE { .... }, ASK has the format ASK { ...} and no WHERE.
> Possibly ASK WHERE { ... } would be more consistent.
[1] Query ::= Prolog
( SelectClause | ConstructClause |
DescribeClause | AskClause )
DatasetClause?
WhereClause?
OrderClause?
LimitClause?
OffsetClause?
so the whole clause is optional and not related to which kind of query it is.
e.g. DESCRIBE <uri>
CONSTRUCT { :a :b :c }
and also:
[13] WhereClause ::= 'where'? GraphPattern
so the WHERE keyword is optional.
These are both legal.
SELECT * WHERE { ?x ?y ?z }
SELECT * { ?x ?y ?z }
We could have different rules for presence/absence for each query type but at
the moment it is symmetrical.
>
> So thinking further, what does WHERE with an empty graph pattern {}
> mean? I discussed this with EricP in Italy and we think it's the
> same as query succeding and returning 1 result, and it's what Algae2
> does.
Yes - it's a graph pattern that matches any graph.
>
> Going through the query verbs:
>
> 1. SELECT * WHERE {}
> returns 1 result[row] with no bindings
>
> 2. CONSTRUCT { :a :b :c } WHERE {}
> returns the graph { :a :b :c}
>
> 3. ASK {}
> returns true
>
> 4. DESCRIBE <uri> WHERE {}
> Well nobody can tell what it returns :)
> but it's probably the same as DESCRIBE <uri> for all cases.
>
> and if WHERE {} is the same as omitting it, then the queries below
> return the same results as the above:
>
> 1a. SELECT *
> 2a. CONSTRUCT { :a :b :c }
> 3a. ASK
> 4a. DESCRIBE <uri>
> -- this one's already in the spec
>
> Dave
>
Andy
Received on Thursday, 21 April 2005 20:03:42 UTC