- From: Steve Harris <steve.harris@garlik.com>
- Date: Wed, 11 Aug 2010 11:23:15 +0100
- To: Axel Polleres <axel.polleres@deri.org>
- Cc: SPARQL Working Group <public-rdf-dawg@w3.org>
On 2010-08-11, at 10:56, Axel Polleres wrote: > Hi all again, > > in the course of my last mail, I also thought about adding another example: > > E) "Give me all persons and the first 3 (alphabetically by name) of their friends" > > but I couldn't find any way to write this in an intuitive manner... ideas anyone? > I am afraid, that - by the scoping we have imposed for subqueries - that one might be difficult/impossible? > > The following naive writing does't work obviously: > > SELECT ?P ?F > { ?P a :Person . > {SELECT ?P ?F { ?P :knows ?F . ?F name ?N } ORDER BY ?N LIMIT 3 } > } > > I also think I recall that we had this discussion already some time back in some other form, > but I can't recall the outcome :-| This doesn't work because bindings happen bottom up, so the subSELECT is bound before the outer SELECT, I find this counter-intuative, but there are technical reasons why it has to be that way round, as I understand it. Another thing that also doesn't quite work is: SELECT ?p (SAMPLE(?f) AS ?f1) (SAMPLE(?f) AS ?f2) (SAMPLE(?f) AS ?f3) WHERE { ?p a :Person . ?p :knows ?f . } GROUP BY ?p The problem is that by the definition of the Sample set function, you get the same binding of ?f each time. We could have a form of SAMPLE() like SAMPLE(?var ; offset=N), which takes the Nth value, rather than the 0th. - Steve PS look, no commas :) -- Steve Harris, CTO, Garlik Limited 1-3 Halford Road, Richmond, TW10 6AW, UK +44 20 8439 8203 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 Wednesday, 11 August 2010 10:23:50 UTC