- From: Steve Harris <steve.harris@garlik.com>
- Date: Thu, 8 Jun 2006 11:12:40 +0100
- To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
In the telecon yesterday I mentioned that allowing shared variables introduced in OPTIONAL (and UNION) blocks prevented you from implementing it in a conventional relational algebra engine. Example: :a dc10:title "thing" . :a dc10:creator "John Smith" . :a dc:11:creator _:jb . _:jb rdf:value "Joe Bloggs" . SELECT ?name WHERE { ?a dc10:title "thing" . OPTIONAL { ?a dc10:creator ?name } OPTIONAL { ?a dc11:creator ?c . ?c rdf:value ?name } } if there are no shared variables you can map this to: (excuse syntax, ASCII RA is difficult and it's been a while) 1) T SELECT pred=dc10:title AND obj=thing RENAME subj,a 2) LJOIN T a=subj RENAME obj,name 3) LJOIN T a=subj RENAME obj,c 4) LJOIN T c=subj AND obj=name where T is the table of triples, but if you do that you get: 1) a c name :a NULL NULL 2) a c name :a NULL "John Smith" 3) a c name :a NULL "John Smith" :a :_jb NULL 4) a c name :a NULL "John Smith" # obj = "John Smith" and obj = NULL both fail What you have to do (as Souri? pointed out) is namespace the values according to where they're bound, which is tricky, steps outside relational algebra and makes SPARQL significantly harder to implement that necessary. In this simple example it is probably possible to implement it with sub-projections or variable mapping and using a big RENAME on the end, but in the general case, it's not. My impression is that this scoped shared variable thing is mostly a hack to get round the fact that we don't have SQLs COALESCE() and SELECT expressions, but I think it's a bad choice to make the core language much more complex to get round it. The previous form of: SELECT ?name1 ?name2 WHERE { ?a dc10:title "thing" . OPTIONAL { ?a dc10:creator ?name1 } OPTIONAL { ?a dc11:creator ?c . ?c rdf:value ?name2 } } didn't have these problems of course, and as a bonus cures the order dependency + exponential complexity problem Eric described. The only downside being that the end user had to do the coalescing themselves. - Steve
Received on Thursday, 8 June 2006 10:12:47 UTC