- From: Jeremy Carroll <jeremy@topquadrant.com>
- Date: Tue, 03 Nov 2009 09:13:25 -0800
- To: public-rdf-dawg-comments@w3.org
- CC: Holger Knublauch <holger@topquadrant.com>, Jeremy Carroll <jcarroll@topquadrant.com>
I thought I should share a couple of the comments I have had on this topic from TopQuadrant colleagues: [[ Speaking as a person who teaches this stuff, more than our own reputation is at stake. Perhaps this is something to add to our objection. Technology adoption is the goal of a standard. SPARQL fights an uphill battle for a couple of reasons: (1) It's Not SQL. (2) Pattern-based retrieval is weird (witness the fabulous popularity of PROLOG as a software engineering language). In short, many people are looking for reasons not to adopt it, and to stay with familiarity. In short, the semantic web is faced with a huge hurdle in SPARQL. And while I applaud the "small standard" policy (which in general is a boon to teaching and adoption), it is only good when it serves ease of adoption. SPARQL 1.0 has some huge problems, that give SQL fans great ammunition when it comes to saying "it's not ready" - negation and aggregates are the biggies here, and both of them have been fixed. Adding in another complex idiom (like nested subqueries) for something simple (LET) will be repeating the mistake of negation. Another reason to say, "Wait for SPARQL 3". I would go so far as to use the "small standard" argument the other way. Subqueries are difficult - in fact, in my course, I say, 'The reason SPARQL doesn't have subquery is because it is not needed. The sorts of things that you use them for in SQL are done easily in a pattern language, without resorted to a complex construct like a subquery". I challenge the room to prove me wrong. One person was able to do so. No SQL programmer can do it - subqueries are error prone and confusing. So - faced with a confusing, difficult, unsuccessful idea from SQL (subqueries) vs a well-accepted idea from BASIC, which one fits the "small standard" mantra better? I can speak confidently as an educator in this stuff. LET wins hands-down. ]] and [[ Also look at our mailing list to see what our customers are doing. [X]'s message from yesterday contains: SELECT ?stringPredicate ?stringObject ?stringAttributesNodeName ? stringAttributeNodeName WHERE { CQ:GatheredData ?predicate ?object . LET (?stringPredicate := smf:cast(smf:name(?predicate), xsd:string)) . LET (?stringObject := smf:cast(smf:name(?object), xsd:string)) . LET (?uuid := smf:generateUUID()) . ?attributes a CQ:attributes . LET (?attributesNodeName := smf:qname(?attributes)) . LET (?stringAttributesNodeName := smf:cast(smf:name(? attributesNodeName), xsd:string)) . LET (?stringAttributeNodeName := smf:buildString("{? stringAttributesNodeName}-{?uuid}")) . } Will make a nice chain of sub-SELECTs... ]]
Received on Tuesday, 3 November 2009 17:14:01 UTC