Using a relational database as a triplestore backend has a number of advantages - one of which is leveraging features of the backend SQL support with very little effort.

I've recently added a whole bunch of functionality to ttql (the experimental query language that JAM*VAT uses for querying). These include:

SQL (mysql) numeric and string functions (e.g. CONCAT, COUNT, SUM, MIN/MAX etc..) OrderBy GroupBy Limit

(this in addition to optional blocks and indexed substring comparisons).

Also, numeric and date comparisons are now indexed (dates are converted from various formats to a common representation at the query parsing stage).

Oh - and I've made select queries NON-distinct by default. I realised that since tagtriples was not logical-set based (the order matters), the same statement can quite legitimately crop up more than once in a graph. It thus follows that it ought to be possible to get all the occurances out via a structured query, and so I've added the DISTINCT keyword and made the queries non-distinct by default.

I really must get round to documenting this on the query page; if you can't wait (yeah right!), check out the test_ttql.py file for the query unittests.