RDF Query Language SPARQL
The Simple Protocol and RDF Query Language (SPARQL) is a SQL-like language for querying RDF data. For expressing RDF graphs in the matching part of the query, TURTLE syntax is used.
An example of a SELECT query follows.
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox WHERE { ?x foaf:name ?name . ?x foaf:mbox ?mbox . }
The first line defines namespace prefix, the last two lines use the prefix
to express a RDF graph to be matched. Identifiers beginning with question mark
?
identify variables. In this query, we are looking for resource
?x
participating in triples with predicates foaf:name
and foaf:mbox
and want the subjects of these triples. Syntactic
shortcuts of TURTLE can be used in the matching part.
In addition to specifying graph to be matched, constraints can be added for
values using FILTER
construct. An example of string value
restriction is FILTER regex(?mbox, "company")
that specifies
regular expression query. An example of number value restriction is
FILTER (?price < 20)
that specifies that ?price
must be less than 20. A few special operators are defined for the
FILTER
construct. They include isIRI
for testing
whether variable is IRI/URI, isLiteral
for testing whether
variable is literal, bound
to test whether variable was bound and
others - see the specification.
The matching part of the query may include OPTIONAL
triples. If
the triple to be matched is optional, it is evaluated when it is present, but
the matching does not fail when it is not present. Optional sections may be
nested. It is possible to make UNION
of multiple matching graphs -
if any of the graphs matches, the match will be returned as a result. The
FROM
part of the query is optional and may specify the RDF
dataset on which query is performed.
The sequence of result may be modified using the following keywords with the meaning similar to SQL:
ORDER BY
- ordering by variable valueDISTINCT
- unique results onlyOFFSET
- offset from which to show resultsLIMIT
- the maximum number of results
There are four query result forms. In addition to the possibility of getting the list of values found it is also possible to construct RDF graph or to confirm whether a match was found or not.
SELECT
- returns the list of values of variables bound in a query patternCONSTRUCT
- returns an RDF graph constructed by substituting variables in the query patternDESCRIBE
- returns an RDF graph describing the resources that were foundASK
- returns a boolean value indicating whether the query pattern matches or not
The CONSTRUCT
form specifies a graph to be returned with
variables to be substituted from the query pattern, such as in the following
example that will return graph saying that Alice knows last two people when
ordered by alphabet from the given URI (the result in the RDF graph is not
ordered, it is a graph and so the order of triples is not important).
PREFIX foaf: <http://xmlns.com/foaf/0.1/> CONSTRUCT { <http://example.org/person#Alice> foaf:knows ?x } FROM <http://example.org/foaf/people> WHERE { ?x foaf:name ?name } ORDER BY desc(?name) LIMIT 2
The DESCRIBE
form will return information about matched
resources in a form of an RDF graph. The exact form of this information is not
standardized yet, but usually a blank node closure like for example Concise Bounded
Description (CBD) is expected. In short, all the triples that have the
matched resource in the object are returned; when a blank node is in the
subject, then the triples in which this node participates as object are
recursively added as well.
The ASK
form is intended for asking yes/no questions about
matching - no information about matched variables is returned, the result is
only indicating whether matching exists or not.
The SPARQL specification is in the state of working draft (state at the end of 2006), but it is already implemented in some software packages and it seems that it will become the main RDF querying language for the semantic web. The specification of protocol for a SPARQL web service is available as well - SPARQL then serves as a RDF data access protocol.
![Previous - OWL Example with RDF Graph Previous - OWL Example with RDF Graph](images/prev.gif)
![Next - Reasoning support Next - Reasoning support](images/next.gif)
(c) Marek Obitko, 2007 - Terms of use