Virtuoso's SPARQL implementation is based on the W3C SPARQL Working Draft of Feb 20, 2006. The implementation covers almost all of the specification, including:
- optional and union with arbitrary nesting
- filter and expressions, including calling SQL functions
- ask, select, describe, construct
- order, skip, limit
- graph for scoping a query to a given graph
Virtuoso SPARQL translates a SPARQL query to the corresponding SQL query referring to the triple store tables. In the present implementation, all graphs are stored in one large table containing G, S, P, O quads. Future developments will introduce more flexibility in this regard.
A SPARQL statement is a valid top-level SQL select as well as a valid subquery or derived table. Hence there is almost no need for a special API for querying, as SPARQL goes wherever SQL does, see the SPARQL demo for examples.
There are SQL API functions for reading RDF XML and Turtle files, mapping between internal ids of nodes and their external names, inserting results of construct queries as new graphs, asserting individual triples and any other such tasks.
Virtuoso provides a full implementation of the SPARQL Protocol with basic HTTP and SOAP bindings. Virtuoso offers SPARQL Protocol client APIs in addition to its capabilities as a compliant server.
Since version 5.0, Virtuoso supports the SPARQL/Update (SPARUL) extension of SPARQL.
See Virtuoso SPARUL Implementation notes.