- From: Steve Harris <steve.harris@garlik.com>
- Date: Wed, 18 Nov 2009 10:13:36 +0000
- To: Andy Seaborne <andy.seaborne@talis.com>
- Cc: "public-rdf-dawg@w3.org Group" <public-rdf-dawg@w3.org>
On 17 Nov 2009, at 13:47, Andy Seaborne wrote: > On 17/11/2009 12:28, Steve Harris wrote: >> On 17 Nov 2009, at 12:03, Andy Seaborne wrote: >>> On 17/11/2009 11:44, Steve Harris wrote: >>>> >>>> - Steve, hoping sparql:noValue wasn't supposed to be a URI :) >>> >>> It can be a URI :) The other alternative is a literal that is in a >>> value space disjoint from all others. >> >> What about > > >> SELECT ?x >> WHERE { >> ?x :p :o . >> OPTIONAL { >> ?x :doesnotexist ?y . >> } >> FILTER(?y = sparql:noValue) >> } >> >> v's >> >> SELECT * WHERE { >> { SELECT (MAX(?y) AS ?max) >> WHERE { >> ?x :p :o . >> OPTIONAL { >> ?x :doesnotexist ?y . >> } >> } GROUP BY ?x } >> FILTER(?max = sparql:noValue) } > > > They are different. (And independent of URI vs literal) > > I'm also not against MAX(empty) being an error. This seems the > simpler design and most easily communicatable. Yeah, I'm not quite sure that an error is correct, but I can see how you could convince yourself that it was right. > You can use TRY/COALESCE to turn errors into some other value (also > needed if you have an unwritable value). Yep. > Short forms coudl be provided, if we think it's convenient, for > application specific defaults : MAX(?x, emptyValue) Well, that's what COALESCE would do by SQL semantics. > (This use of TRY/COALESCE is what you were proposing for handling > xsd casts) Yes. > I don't have a problem with the fact these two are different. In SQL > NULL does not join with NULL unless you provide an explicit join > condition. Once NULL appear in SQL, the SQL to cope with natural > usages of two OPTIONAL, one after the other, is not natural and it's > right we did not impose the same burden on application writers. I don't follow that sentence. >> It potentially has the opposite confusion problem to SQLs infamous >> WHERE >> x = NULL. > > The constraints here are: > 1/ XSD expression evaluation > 2/ The simpler use cases of two OPTIONALs that drove the design of > SPARQL 1.0. > > We could do a superset of XSD, mod the restriction of SPARQL 1.0 > compatibility, but I think we'd get in trouble from the different > sources of NULL (the old there are X types of SQL NULL anbd they are > different). Really? I think there's only one logically speaking. Isn't that one of Date's criticisms, IIRC he thinks there should have been two distinct "NULL"s. > Having complexity in the expressions, for a pattern matching > language, is the right balance to consider. > >> It might be easier to make it same value that can't be written down, >> then users can't distinguish it from the "unbound" value. >> >> - Steve > > How is it serialized into XML results? Same as unbound values currently. > (Keeping it internal breaks federated query) > > If you want an ideal solution, it probably means that every instance > is distinct and unique. Then undef != undef. Yes, which is the source of my concern around giving it a URI. Anyway, this has got a bit philosophical. Verbiage, algebra and testcases should distil all this into some requirements. - 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 Wednesday, 18 November 2009 10:14:05 UTC