Some stuff that isn’t in SPARQL, but should be. I’ve two use cases in mind: building AJAX applications on top of a SPARQL store, and enabling discovery of the stuff that is in a SPARQL store you don’t know yet.
Expressions in SELECT: I want to be able to say SELECT DISTINCT LANG(?object) or SELECT DISTINCT DATATYPE(?object). This would also make extension functions much more attractive. (Update: Ideally, expressions sould also be allowed in CONSTRUCT blocks. This has many interesting applications if used with extension functions.)
More functions: NAMESPACE returns the namespace part of the URI. LOCALNAME returns the local part of the URI. CONCAT concatenates literals. SUBSTR returns part of a literal. MATCH extracts bits of a literal according to a regular expression. IF would select a return value based on a boolean expression. I could go on. These can (and probably will) be done as extension functions. As I said, to make extension functions truly useful, they’d have to be allowed in the SELECT clause.
CONSTRUCT *: The motivation here is extracting subgraphs from an RDF graph. I think this is hugely important, and I don’t understand why this is not allowed. I heard something about issues with blank nodes coming from multiple named graphs, but I’m sure this could be worked around.
COUNT: I understand there are semantic issues with this, but it would be super handy in some situations. Currently, if you want to know the number of triples stored in a datastore, you have to fetch them all. Does this suck or what?
Anyway, SPARQL is great and I’m really looking forward to seeing it supported in a wide variety of RDF tools.