WARNING! This URL (in the Main cluster) is no longer the authoritative source for this page; it has been moved to the VOS or ODS cluster as appropriate instead.
See Tim Haynes in case of confusion.

Virtuoso SPARQL

Language

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.

API

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.

Protocol

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.

SPARUL

Since version 5.0, Virtuoso supports the SPARQL/Update (SPARUL) extension of SPARQL.