- From: Steve Harris <steve.harris@garlik.com>
- Date: Fri, 1 May 2009 08:50:35 +0100
- To: SPARQL Working Group <public-rdf-dawg@w3.org>
Yes, that's my fault, I think I created that wiki page - SubQuery
would have been a better name, and was my intention. It's SQL legacy
where the only query verb is SELECT. Well... actually there's SHOW,
but it's a bit different and you can't do sub-shows.
SubASKs don't have to go in a FILTER, they're also useful in WHERE
clauses, assuming they project either a solution with no bindings (for
true) or no solutions (for false). Which I believe matches the SPARQL
algebra (it matches my implementation of ASK, at least).
I'm not convinced FROM { CONSTRUCT ... } achieves anything, but it may
aid composability.
- Steve
On 30 Apr 2009, at 21:24, Axel Polleres wrote:
> If have a related question. Do we really talk only about subSELECTS
> or should we - more generally speak about subQUERIES.
>
> I have the impression, that also ASK and CONSTRUCT subqueries in
> Specific places make sense, like:
>
> CONSTRUCT subqueries in FROM/FROM NAMED clauses
>
> SELECT ...
> FROM {CONSTRUCT ... }
> WHERE
>
> ASK subqueries in FILTERS
>
> SELECT ...
> WHERE { pattern FILTER( !ASK {...} )}
>
> agreed? The latter would, BTW, be an alternative way to express
> negation.
>
> Axel
>
>
> Steve Harris wrote:
>> On 30 Apr 2009, at 11:48, Simon Schenk wrote:
>>> If we do not add any features such as aggregates, scalar
>>> expressions, assignment
>>> or similar - do subselects add anything to the expressiveness of
>>> the language?
>>> All examples in the wiki include at least one such additional
>>> feature.
>>>
>>> Typical uses such as FORALL or EXISTS should be possible in the
>>> current version
>>> of SPARQL using a combination of OPTIONAL, BOUND filters and
>>> perhaps DISTINCT, I
>>> think.
>> There's nothing you couldn't do with multiple queries before. But,
>> you can do new things using DISTINCT and LIMIT inside the subselect
>> in one query, that's enough to do LimitByResource in many cases,
>> which you can't do without SubSelects.
>> Example off the top of my head (may be incorrect):
>> SELECT *
>> WHERE {
>> ?x a foaf:Person
>> SUB {
>> SELECT ?name
>> WHERE { ?x foaf:name ?name }
>> LIMIT 1
>> }
>> SUB {
>> SELECT ?mbox
>> WHERE { ?x foaf:mbox ?mbox }
>> LIMIT 4
>> }
>> }
>> Currently we don't implement sub queries, so we end up doing
>> something like 20, where 1 would be fine.
>> - Steve
>
>
> --
> Dr. Axel Polleres
> Digital Enterprise Research Institute, National University of
> Ireland, Galway
> email: axel.polleres@deri.org url: http://www.polleres.net/
>
--
Steve Harris
Garlik Limited, 2 Sheen Road, Richmond, TW9 1AE, UK
+44(0)20 8973 2465 http://www.garlik.com/
Registered in England and Wales 535 7233 VAT # 849 0517 11
Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10
9AD
Received on Friday, 1 May 2009 07:51:19 UTC