- From: Steve Harris <steve.harris@garlik.com>
- Date: Sun, 8 Nov 2009 19:50:32 +0000
- To: Andy Seaborne <andy.seaborne@talis.com>
- Cc: Kjetil Kjernsmo <kjetil@kjernsmo.net>, "public-rdf-dawg@w3.org" <public-rdf-dawg@w3.org>
On 7 Nov 2009, at 19:25, Andy Seaborne wrote: >>>> What about missing the template out instead: >>>> >>>> DELETE WHERE {?x :p ?o } >>> >>> If we're going to support this kind of syntax abbreviation, then >>> this >>> looks better to me. >> >> Works for me too. >> That's close to what I proposed in >> http://lists.w3.org/Archives/Public/public-rdf-dawg/2009AprJun/0315.html > > There are some issues still to be sorted out. > > What patterns are allowed? Not all possible query patterns make > sense. I believe that what is going on is a mismatch between the idea > that a pattern describes a part of the graph and the idea that a > pattern is extracting terms from the graph. SPARQL is the latter > (hence DAWG is "Data Access" : getting stuff out of the RDF graph for > onwards processing and display). This is like the "CONSTRUCT *" issue. > It would be nice not to repeat the pattern in the template but it > gets complicated. > > The graph-to-graph transform languages we have are inference and > rules. And rules tend to be of the style, match to get variables then > apply template. > > Examples: > > DELETE WHERE {?x :p ?o . FILTER ( ?o < 42 ) } # Why not? > > DELETE WHERE { ?x :p ?o OPTIONAL { ?x :q ?v } } # Seems silly to me. I can think of good uses for it. DELETE WHERE { ?x a foaf:Person . OPTIONAL { ?x foaf:name ?name } OPTIONAL { ?x foaf:mbox_sha1sum ?sha1 } ... } but it may be biting off too much sugar, for the first time round. > DELETE WHERE { { ?x :p ?o } UNION { ?x :q ?v } } # Do as two > operations? Yep, seems unnecessary. Though, if OPTIONAL is allowed it might seem odd if UNION is not. > These are a natural reading as identifying triples in the graph but > that's fundamentally different from what SPARQL evaluation is doing. > Adding "means all triples you touch for a positive answer" is not so > clearcut. An alternative definition would be to collapse all the OPTIONAL (and UNION) expressions into a BGP as X in DELETE { X } and apply CONSTRUCT rules to the DELETE evaluation, so triples with unbound variables aren't used. NOT EXISTS in DELETE WHERE though is a sight more screwy, but omitting it from the "output" may give the expected behaviour: DELETE WHERE { ?x a foaf:Person . ?x ?y ?z . NOT EXISTS { ?x foaf:name "John Smith" } } > A simple solution is BGP's but I think FILTERS are needed. > But it's weird if DELETE-WHERE-{} has pattern restrictions when > DELETE-{}-WHERE-{} does not. Not really, it's sugar. But, as above I think we can handle any WHERE pattern sensibly, if we chose to. > I see a design tension that we have not resolved. Simplicity of > language (only a few forms) vs expressing common use cases. Yes. > May be (I'm raisng the possibility, not proposing) we need more verbs > in the language and not overload the general purpose operations. > > It could also be that the ordering of templates and patterns is > unhelpful. > > USING { pattern } > DELETE { template } > INSERT { template } > > but this goes all the way back to having SELECT-{pattern}. Yeah :( SQL precedent makes it hard to use logical ordering sadly. I still kind-of regret that we didn't go for WHERE { } SELECT { } PROJECT { } for queries. But it would probably have caused confusion. However, I'll note that WHERE { ... } DELETE<enter> has the same problem as DELETE FROM ...<enter> - Steve -- Steve Harris, CTO, 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 Sunday, 8 November 2009 19:51:10 UTC