This specification is published by the RDF Star Working Group as part of the update of specifications for format and errata.
The [[[SPARQL12-QUERY]]] defines several Query
Result Forms (SPARQL Query section 10). This document defines a SPARQL Results
Document that encodes the variable binding query results from SELECT queries (SPARQL Query section
10.2) and boolean query results from ASK queries (SPARQL Query section 10.5) in XML.
There are two other results formats which follow a similar design but do not use XML: [[[SPARQL12-RESULTS-JSON]]] and [[[SPARQL12-RESULTS-CSV-TSV]]].
An optional version can be given to SPARQL results.
The `version` Media Type parameter MAY be set to `1.2` to indicate possible use of RDF 1.2 features in the SPARQL results. Alternatively, the `"version"` child element MAY be used to specify this version.
Possible values for the version string are discussed in .
When providing content over HTTP, servers can announce the version using the optional `version` Media Type parameter:
GET /sparql/?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D%0A HTTP/1.1
Host: www.example
Accept: application/sparql-results+xml; version=1.2
When using RDF 1.2-specific features, such as initial text direction, the specific RDF version can be announced using either the `version` Media Type parameter or the `version` child element early in the document. This allows parsers that do not support these features to detect the presense of such features early, and potentially inform the user, giving them an opportunity to stop the job or otherwise act on the fact that some amount of the input data will not be processed as desired.
Definition: SPARQL Results Document
A SPARQL Results Document is an XML document that is valid with respect to either the RELAX NG XML Schema or the W3C XML Schema in Section 4.
The SPARQL Results Document begins with sparql document element in the http://www.w3.org/2005/sparql-results# namespace, written as follows:
<?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#" xmlns:its="http://www.w3.org/2005/11/its" its:version="2.0"> ... </sparql>
Inside the sparql element are two sub-elements, head and a results element (either results or boolean) which must appear in that order.
If no literals with base direction appear in the results, the sparql document element may be simplified as follows.
<?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
Different values of its:version are allowed.
The optional version attribute MAY be used on the sparql element to announce that RDF 1.2 functionalities are used in the results as follows.
... <sparql xmlns="http://www.w3.org/2005/sparql-results#" version="1.2"> ... </sparql>
The head element is the first child element of the sparql element.
For a variable binding query result, head must contain a sequence of elements describing the set of
Query Variable names in the
Solution Sequence (here called query results).
The order of the variable names in the sequence is the order of the variable names given to the argument of the SELECT statement in the SPARQL query. If SELECT * is
used, the order of the names is undefined.
Inside the head element, the ordered sequence of variable names chosen are used to create empty child elements variable with the variable name as the value of an
attribute name giving a document like this:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#"
xmlns:its="http://www.w3.org/2005/11/its"
its:version="2.0">
<head>
<variable name="x"/>
<variable name="hpage"/>
<variable name="name"/>
<variable name="mbox"/>
<variable name="blurb"/>
</head>
...
</sparql>
For a boolean query result, no elements are required inside head and variable must not be present.
For any query result, head may also contain link child elements with an href attribute containing a relative URI that provides a link to some additional
metadata about the query results. The relative URI is resolved against the in-scope base URI which is usually the query results format document URI. link elements must appear after any
variable elements that are present.
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#"
xmlns:its="http://www.w3.org/2005/11/its"
its:version="2.0">
<head>
...
<link href="metadata.rdf"/>
</head>
...
</sparql>
The second child-element of sparql must appear after head and is either results or boolean. It is written even if the query results are
empty.
The results element contains the complete sequence of query results.
For each Query Solution in the query results, a result child-element of
results is added giving a document like:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#"
xmlns:its="http://www.w3.org/2005/11/its"
its:version="2.0">
... head ...
<results>
<result>...
</result>
<result>...
</result>
...
</results>
</sparql>
Each result element corresponds to one Query Solution in a result and contains child elements (in no particular order) for each Query Variable that appears in the
solution. It is used to record how the query variables bind to RDF Terms.
Each binding inside a solution is written as an element binding as a child of result with the query variable name as the value of the name attribute. So
for a result binding two variables x and hpage it would look like:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#"
xmlns:its="http://www.w3.org/2005/11/its"
its:version="2.0">
<head>
<variable name="x"/>
<variable name="hpage"/>
</head>
<results>
<result>
<binding name="x"> ... </binding>
<binding name="hpage"> ... </binding>
</result>
<result>
<binding name="x"> ... </binding>
<binding name="hpage"> ... </binding>
</result>
...
</results>
</sparql>
The value of a query variable binding, which is an RDF Term, is included as the content of the binding as follows:
<binding><uri>U</uri></binding><binding><literal>S</literal></binding><binding><literal xml:lang="L">S</literal></binding><binding><literal xml:lang="L" its:dir="B">S</literal></binding><binding><literal datatype="D">S</literal></binding><binding><bnode>I</bnode></binding><binding>
<triple>
<subject>S</subject>
<predicate>P</predicate>
<object>O</object>
</triple>
</binding>If, for a particular solution, a variable is unbound, no binding element for that variable is included in the result element.
S, P, and O in Triple Terms are encoded recursively, using the same format, without the enclosing <binding> tag
Note: The blank node label I is scoped to the result set XML document and need not have any association to the blank node label for that RDF Term in the query graph.
An example of a query solution encoded in this format is as follows:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#"
xmlns:its="http://www.w3.org/2005/11/its"
its:version="2.0">
<head>
<variable name="x"/>
<variable name="hpage"/>
<variable name="name"/>
<variable name="age"/>
<variable name="mbox"/>
<variable name="friend"/>
</head>
<results>
<result>
<binding name="x">
<bnode>r2</bnode>
</binding>
<binding name="hpage">
<uri>http://work.example.org/bob/</uri>
</binding>
<binding name="name">
<literal xml:lang="en">Bob</literal>
</binding>
<binding name="age">
<literal datatype="http://www.w3.org/2001/XMLSchema#integer">30</literal>
</binding>
<binding name="mbox">
<uri>mailto:bob@work.example.org</uri>
</binding>
...
</results>
</sparql>
An example of a query solution that includes triple terms is as follows:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#"
xmlns:its="http://www.w3.org/2005/11/its"
its:version="2.0">
<head>
<variable name="x"/>
<variable name="name"/>
<variable name="triple"/>
</head>
<results>
<result>
<binding name="x">
<bnode>r2</bnode>
</binding>
<binding name="name">
<literal xml:lang="en">Bob</literal>
</binding>
<binding name="triple">
<triple>
<subject>
<uri>http://example.org/alice</uri>
</subject>
<predicate>
<uri>http://example.org/name</uri>
</predicate>
<object>
<literal datatype="http://www.w3.org/2001/XMLSchema#string">Alice</literal>
</object>
</triple>
</binding>
</result>
...
</results>
</sparql>
As an alternative to including the `xml:its` declaration in every result set, the namespace can be declared on specific elements as needed:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="animal"/>
</head>
<results>
<result>
<binding name="animal">
<literal xmlns:its="http://www.w3.org/2005/11/its" its:version="2.0"
xml:lang="ar" its:dir="rtl">قطة</literal>
</binding>
</result>
<result>
<binding name="animal">
<literal xml:lang="en">cat</literal>
</binding>
</result>
<result>
<binding name="animal">
<literal xmlns:its="http://www.w3.org/2005/11/its" its:version="2.0"
xml:lang="fr" its:dir="ltr">chat</literal>
</binding>
</result>
</results>
</sparql>
A boolean result is written as the element content of a boolean child-element of the sparql element directly after a head, containing either
true or false as follows:
<?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... head ... <boolean>true</boolean> </sparql>
An example SELECT SPARQL Query in example.rq operating on query graph Turtle/N3 data in data.ttl providing ordered variable binding query results written in XML in output.srx.
This XML can be transformed into XHTML using the sample XML Query script result-to-html.xq giving output-xquery.html or with XSLT sheet result-to-html.xsl giving output-xslt.html
An example SELECT SPARQL Query in example-triple-terms.rq operating on query graph Turtle/N3 data in data.ttl providing ordered variable binding query results written in XML in output-triple-terms.srx. These results contain triple terms.
An example ASK SPARQL Query in example2.rq operating on query graph Turtle/N3 data in data.ttl provides a boolean query result written in XML in output2.srx.
This XML can be transformed into XHTML using the sample XML Query script result-to-html.xq giving output-xquery2.html or with XSLT sheet result-to-html.xsl giving output-xslt2.html
There are normative XML schemas provided in the following formats:
If W3C XML Schema is used, an xsi:schemaLocation attribute can be used pointing to the schema as follows:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/sparql-results# http://www.w3.org/2007/SPARQL/result.xsd">
...
</sparql>
The Internet Media Type (formerly known as MIME Type) for the SPARQL Query Results XML Format is "application/sparql-results+xml".
It is recommended that result files have the extension ".srx" (all lowercase) on all platforms.
It is recommended that result files stored on Macintosh HFS file systems be given a file type of "TEXT".
SPARQL query results uses URIs. See Section 7 of [[RFC3986]].
SPARQL query results uses IRIs. See Section 8 of [[RFC3987]].
As this media type uses the "+xml" convention, it shares the same security considerations as described in [[RFC3023]], section 10.
TODO
TODO
TODO