Copyright © 2008-2025 World Wide Web Consortium . W3C ® liability , trademark and permissive document license rules apply.
This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.
This specification is published by the RDF Star Working Group as part of the update of specifications for format and errata.
This document was published by the RDF-star Working Group as an Editor's Draft.
Publication as an Editor's Draft does not imply endorsement by W3C and its Members.
This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress. Future updates to this specification may incorporate new features .
This document was produced by a group operating under the W3C Patent Policy . W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy .
This document is governed by the 03 November 2023 W3C Process Document .
The
SPARQL
1.2
Query
Language
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: SPARQL 1.2 Query Results JSON Format and SPARQL 1.2 Query Results CSV and TSV Formats .
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
described
in
Section
4.
4.
XML
Schemas
.
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
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
>
This section is non-normative.
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