Copyright ©2005, 2006 W3C ® ( MIT , ERCIM , Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
SPARQL is a query language and protocol for RDF. This document specifies the SPARQL Protocol; it uses WSDL 2.0 to describe a means for conveying SPARQL queries to an SPARQL query processing service and returning the query results to the entity that requested them. This protocol was developed by the W3C RDF Data Access Working Group (DAWG), part of the Semantic Web Activity as described in the activity statement .
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This is a Last Call Working Draft. The first release of this document was 14 January 2005 and the RDF Data Access Working Group (part of the Semantic Web Activity) has made its best effort to address comments recieved since then, releasing several drafts and resolving a list of issues meanwhile.
Comments on this document are due 10 February 2006; please send them to public-rdf-dawg-comments@w3.org, a mailing list with a public archive.
The changes between this document and the previous (14 September 2005) version include synchronization with WSDL 2.0 and a number of conformance clarifications.
Publication as a Working Draft does not imply endorsement by the W3C Membership. 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.
This document was produced under the 5 February 2004 W3C Patent Policy. The Working Group maintains a public list of patent disclosures relevant to this document; that page also includes instructions for disclosing [and excluding] a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) with respect to this specification should disclose the information in accordance with section 6 of the W3C Patent Policy.
SparqlQuery
Interface
query
Operationquery
In Messagequery
Out Messagequery
Fault MessagesSELECT
with service-supplied RDF datasetSELECT
with simple RDF datasetCONSTRUCT
with simple RDF dataset and HTTP content negotiationASK
with simple RDF datasetDESCRIBE
with simple RDF datasetSELECT
with complex RDF datasetSELECT
with query-only RDF datasetSELECT
with ambiguous RDF datasetSELECT
with malformed query faultSELECT
with query request refused faultSELECT
query using POST bindingSELECT
with internationalizationSELECT
with queryHttpPost binding and XML inputThis document (which refers to itself as "SPARQL Protocol for RDF") describes SPARQL Protocol, a means of conveying SPARQL queries from query clients to query processors. SPARQL Protocol has been designed for compatibility with the SPARQL Query Language for RDF [SPARQL]. SPARQL Protocol is described in two ways: first, as an abstract interface independent of any concrete realization, implementation, or binding to another protocol; second, as HTTP and SOAP bindings of this interface. This document, as well as the associated WSDL and W3C XML Schema documents, are primarily intended for software developers interested in implementing SPARQL query services and clients.
When this document uses the words must, must not, should, should not, may and recommended, and the words appear as emphasized text, they must be interpreted as described in RFC 2119 [RFC2119].
When this document contains excerpts from other documents, including WSDL and XML Schema instances, it uses the following namespace prefixes and namespace URIs:
Prefix | Namespace URI |
---|---|
st |
http://www.w3.org/2005/09/sparql-protocol-types/# |
xs |
http://www.w3.org/2001/XMLSchema |
vbr |
http://www.w3.org/2005/sparql-results# |
rdf |
http://www.w3.org/1999/02/22-rdf-syntax-ns# |
whttp |
http://www.w3.org/2005/08/wsdl/http |
wsoap |
http://www.w3.org/2005/08/wsdl/soap |
wsdlx |
http://www.w3.org/2005/08/wsdl-extensions |
tns |
http://www.w3.org/2005/08/sparql-protocol-query/# |
This set of documents comprises the specification of the SPARQL Protocol:
SPARQL Protocol contains one interface, SparqlQuery
, which in turn contains one operation,
query
. SPARQL Protocol is described abstractly with WSDL 2.0 [WSDL2] in terms of a web service that implements its interface, types,
faults, and operations, as well as by HTTP and SOAP bindings. Note that while this document uses WSDL 2.0 to describe
SPARQL Protocol, there is no obligation on the part of any implementation to use any particular implementation strategy,
including the use of any WSDL library or programming language framework.
query
operationSparqlQuery
is the protocol's only interface. It
contains one operation, query
, which is used to
convey
a SPARQL
query string and, optionally,
an RDF
dataset description.
The query
operation is described as an
In-Out
message exchange pattern [WSDL-Adjuncts]. The constraints of
an In-Out message exchange pattern are as follows:
This pattern consists of exactly two messages, in order, as follows:
A message:
indicated by a Message Label component whose {message label} is 'In' and {direction} is 'in'
received from some node N
A message:
indicated by a Message Label component whose {message label} is 'Out' and {direction} is 'out'
sent to node N
This pattern uses the rule 2.1.1 Fault Replaces Message.
This interface and its operation are described in the following WSDL 2.0 fragment (from sparql-protocol-query.wsdl, which contains the relevant namespace declarations):
<!-- Abstract SparqlQuery Interface --> <interface name="SparqlQuery" styleDefault="http://www.w3.org/2006/01/wsdl/style/iri"> <!-- the Interface Faults --> <fault name="MalformedQuery" element="st:malformed-query"/> <fault name="QueryRequestRefused" element="st:query-request-refused"/> <!-- the Interface Operation --> <operation name="query" pattern="http://www.w3.org/2006/01/wsdl/in-out"> <documentation>The operation is used to convey queries and their results from clients to services and back again.</documentation> <input messageLabel="In" element="st:query-request"/> <output messageLabel="Out" element="st:query-result"/> <!-- the interface faults are out faults --> <outfault ref="tns:MalformedQuery" messageLabel="Out"/> <outfault ref="tns:QueryRequestRefused" messageLabel="Out"/> </operation> </interface>
query
In Message Abstractly, the contents of the In Message of SparqlQuery
's query
operation is an
instance of an XML Schema complex type, called st:query-request
in Excerpt 1.0, composed of two further
parts: one SPARQL query string; and zero or one RDF dataset descriptions. The SPARQL query string,
identified by one query
type, is defined by
[SPARQL] as "a sequence of characters in the language defined by the [SPARQL] grammar, starting with the Query
production". The RDF dataset description is composed of zero or one default RDF graphs — composed by the RDF
merge of the RDF graphs identified by zero or more default-graph-uri
types — and by zero or more
named RDF graphs, identified by zero or more named-graph-uri
types. These correspond to the
FROM
and FROM NAMED
keywords in [SPARQL], respectively.
These types are defined in the following XML Schema fragment, from sparql-protocol-types.xsd:
<xs:element name="query-request"> <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="query" type="xs:string"> <xs:annotation> <xs:documentation>query is an xs:string constrained by the language definition, http://www.w3.org/TR/rdf-sparql-query/#grammar, as "a sequence of characters in the language defined by the [SPARQL] grammar, starting with the Query production".</xs:documentation> </xs:annotation> </xs:element> <xs:element minOccurs="0" maxOccurs="unbounded" name="default-graph-uri" type="xs:anyURI"/> <xs:element minOccurs="0" maxOccurs="unbounded" name="named-graph-uri" type="xs:anyURI"/> </xs:sequence> </xs:complexType> </xs:element>
Excerpt 1.1 XML Schema fragment
The RDF dataset may be specified either in a [SPARQL] query using FROM
and FROM NAMED
keywords; or it may be specified in the protocol described in this document; or it may be specified in both the query
string and in the protocol.
In the case where both the query and the protocol specify an RDF
dataset, but not the identical RDF dataset, the dataset
specified in the protocol
must be the RDF dataset consumed by
SparqlQuery
's query
operation.
A conformant SPARQL Protocol service may provide a
default RDF dataset against which SPARQL query requests are executed in cases where there is no RDF dataset specified in the
protocol or in the query request. A conformant SPARQL Protocol service
may refuse to process any query request that does not specify an RDF dataset. Finally, a conformant SPARQL Protocol service may refuse to process any
query request against any specified RDF dataset. See 2.1.4 query
Fault Messages, QueryRequestRefused
.
query
Out MessageAbstractly, the contents of the Out Message
of SparqlQuery
's query
operation is an
instance of an XML Schema complex type,
called query-result
in Excerpt 1.2, composed of either:
The query-result
type is defined in this W3C XML
Schema fragment, from sparql-protocol-types.xsd:
<xs:element name="query-result"> <xs:annotation> <xs:documentation>The type for serializing query results, either as XML or RDF/XML.</xs:documentation> </xs:annotation> <xs:complexType> <xs:choice> <xs:element maxOccurs="1" ref="vbr:sparql"/> <xs:element maxOccurs="1" ref="rdf:RDF"/> </xs:choice> </xs:complexType> </xs:element>
Excerpt 1.2 XML Schema fragment
query
Fault Messages[WSDL2-Adjuncts] defines several fault propagation rules which
specify how operation faults and messages
interact. The query
operation employs
the Fault
Replaces Message rule:
Any message after the first in the pattern may be replaced with a fault message, which must have identical direction. The fault message must be delivered to the same target node as the message it replaces. If there is no path to this node, the fault must be discarded.
Thus, the query
operation contained in the
SparqlQuery
interface may return, in place of
the Out Message, either the MalformedQuery
message or the QueryRequestRefused
message, both of which
are defined in this WSDL fragment
from sparql-protocol-types.xsd:
<xs:element type="xs:string" name="fault-details"> <xs:annotation> <xs:documentation> This element contains human-readable information about the fault returned by the SPARQL query processing service.</xs:documentation> </xs:annotation> </xs:element> <xs:element name="malformed-query"> <xs:complexType> <xs:all><xs:element minOccurs="0" maxOccurs="1" ref="st:fault-details"/></xs:all> </xs:complexType> </xs:element> <xs:element name="query-request-refused"> <xs:complexType> <xs:all><xs:element minOccurs="0" maxOccurs="1" ref="st:fault-details"/></xs:all> </xs:complexType> </xs:element>
When a SPARQL query string is not a legal sequence of
characters in the language defined by the SPARQL grammar, this
fault message should be returned. An
HTTP 2xx
status code must not be
returned.
When the MalformedQuery
fault message is returned, query processing services must
include explanatory, debugging, or other additional information for human consumption via the
fault-details
type defined in Excerpt 1.3.
This WSDL fault message should be returned when a client submits a request that the service refuses
to process. The QueryRequestRefused
fault message neither indicates whether the server may or may not
process a subsequent, identical request or requests, nor does it constrain a conformant SPARQL service from returning other HTTP status codes or HTTP
headers as appropriate given the semantics of [HTTP].
When the QueryRequestRefused
fault message is returned, query processing services must
include explanatory, debugging, or other additional information intended for human consumption via the
fault-details
type defined in Excerpt 1.3.
The SparqlQuery
interface operation query
described thus far is an abstract operation; it
requires protocol bindings to become an invocable operation. This next two sections of this document describe HTTP and SOAP
bindings. A conformant SPARQL Protocol service must
support the SparqlQuery
interface; if a SPARQL Protocol service supports HTTP bindings, it
must support the bindings as described in sparql-protocol-query.wsdl. A SPARQL Protocol service may support
other interfaces. See 2.3 SOAP Bindings for more information.
[WSDL2-Adjuncts] defines a means of binding abstract interface operations to HTTP. The HTTP bindings for the
query
operation (from sparql-protocol-query.wsdl) are as follows:
<!-- the HTTP GET binding for query operation --> <binding name="queryHttpGet" interface="tns:SparqlQuery" type="http://www.w3.org/2006/01/wsdl/http" whttp:version="1.1"> <fault ref="tns:MalformedQuery" whttp:code="400"/> <fault ref="tns:QueryRequestRefused" whttp:code="500"/> <operation ref="tns:query" whttp:method="GET" whttp:faultSerialization="*/*" whttp:inputSerialization="application/x-www-form-urlencoded" whttp:outputSerialization="application/sparql-results+xml, application/rdf+xml, */*" /> </binding> <!-- the HTTP POST binding for query operation --> <binding name="queryHttpPost" interface="tns:SparqlQuery" type="http://www.w3.org/2006/01/wsdl/http" whttp:version="1.1"> <fault ref="tns:MalformedQuery" whttp:code="400"/> <fault ref="tns:QueryRequestRefused" whttp:code="500"/> <operation ref="tns:query" whttp:method="POST" whttp:faultSerialization="*/*" whttp:inputSerialization="application/x-www-form-urlencoded, application/xml" whttp:outputSerialization="application/sparql-results+xml, application/rdf+xml, */*" /> </binding>
There are two HTTP bindings, queryHttpGet
and queryHttpPost
, respectively both of which are
described as bindings of the SparqlQuery
interface. In each of these bindings, the two faults described in SparqlQuery interface, MalformedQuery
and QueryRequestRefused
, are bound
to HTTP status codes 400 Bad Request
and
500 Internal Server Error
, respectively [HTTP].
The queryHttpGet
binding should be used except in cases where the URL-encoded query exceeds
practicable limits, in which case the queryHttpPost
binding should be used.
An Informative Note About Serialization Constraints. The output serialization of the
queryHttpGet
and queryHttpPost
bindings is intentionally under constrained in order to reflect the
variety of serialization types of RDF graphs. The fault serialization of queryHttpGet
and
queryHttpPost
is also intentionally under constrained. A conformant SPARQL Protocol service can provide alternative WSDL interfaces
and bindings with different constraints.
This binding of the query
operation uses [HTTP] GET
with the following serialization type
constraints: the value of whttp:faultSerialization
is */*
; second, the value of
whttp:inputSerialization
is application/x-www-form-urlencoded
with UTF-8 encoding; and,
third, the whttp:outputSerialization
is application/sparql-results+xml
with UTF-8 encoding,
application/rdf+xml
with UTF-8 encoding, and */*
.
This binding of the query
operation uses [HTTP] POST
with the following serialization type
constraints: the value of whttp:faultSerialization
is */*
; second, the value of
whttp:inputSerialization
is application/x-www-form-urlencoded
with UTF-8 encoding and
application/xml
with UTF-8 encoding; and, third, the whttp:outputSerialization
is
application/sparql-results+xml
with UTF-8 encoding, application/rdf+xml
with UTF-8 encoding, and
*/*
.
The following abstract HTTP trace examples illustrate invocation of
the query
operation under several different
scenarios. These example traces are abstracted from complete HTTP
traces in three ways: (1) In each example the string
"EncodedQuery" represents the URL-encoded string equivalent of
the SPARQL query given in the first block of each example; (2) only
partial response bodies, containing the query results, are displayed;
(3) the URI values of default-graph-uri
and named-graph-uri
are also not URL-encoded.
This SPARQL query
PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?book ?who WHERE { ?book dc:creator ?who }
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery HTTP/1.1 Host: www.example User-agent: my-sparql-client/0.1
That query against the service-supplied RDF dataset, executed by that SPARQL query service, returns the following query result:
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
<variable name="who"/>
</head>
<results distinct="false" ordered="false">
<result>
<binding name="book"><uri>http://www.example/book/book5</uri></binding>
<binding name="who"><bnode>r29392923r2922</bnode></binding>
</result>
...
<result>
<binding name="book"><uri>http://www.example/book/book6</uri></binding>
<binding name="who"><bnode>r8484882r49593</bnode></binding>
</result>
</results>
</sparql>
This SPARQL query
PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?book ?who WHERE { ?book dc:creator ?who }
is conveyed to the SPARQL query service, http://www.other.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.other.example/books HTTP/1.1 Host: www.other.example User-agent: my-sparql-client/0.1
That query — against the RDF dataset identified by the value
of the default-graph-uri
parameter, http://www.other.example/books — executed
by that SPARQL query service, returns the following query
result:
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
<variable name="who"/>
</head>
...
<results distinct="false" ordered="false">
<result>
<binding name="book"><uri>http://www.example/book/book2</uri></binding>
<binding name="who"><bnode>r1115396427r1133</bnode></binding>
</result>
<result>
<binding name="book"><uri>http://www.example/book/book3</uri></binding>
<binding name="who"><bnode>r1115396427r1133</bnode></binding>
</result>
<result>
<binding name="book"><uri>http://www.example/book/book1</uri></binding>
<binding name="who"><literal>J.K. Rowling</literal></binding>
</result>
</results>
</sparql>
This SPARQL query
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX myfoaf: <http://www.example/jose/foaf.rdf#> CONSTRUCT { myfoaf:jose foaf:depiction <http://www.example/jose/jose.jpg>. myfoaf:jose foaf:schoolHomepage <http://www.edu.example/>. ?s ?p ?o.} WHERE { ?s ?p ?o. myfoaf:jose foaf:nick "Jo". FILTER ( ! (?s = myfoaf:kendall && ?p = foaf:knows && ?o = myfoaf:edd ) && ! ( ?s = myfoaf:julia && ?p = foaf:mbox && ?o = <mailto:julia@mail.example> ) && ! ( ?s = myfoaf:julia && ?p = rdf:type && ?o = foaf:Person)) }
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/jose-foaf.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Accept: text/rdf+n3, application/rdf+xml
With the response illustrated here:
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:11 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: text/rdf+n3
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix myfoaf: <http://www.example/jose/foaf.rdf#>.
myfoaf:jose foaf:name "Jose Jimeñez";
foaf:depiction <http://www.example/jose/jose.jpg>;
foaf:nick "Jo";
...
foaf:schoolHomepage <http://www.edu.example/>;
foaf:workplaceHomepage <http://www.corp.example/>;
foaf:homepage <http://www.example/jose/>;
foaf:knows myfoaf:juan;
rdf:type foaf:Person.
myfoaf:juan foaf:mbox <mailto:juan@mail.example>;
rdf:type foaf:Person.
This SPARQL query
PREFIX dc: <http://purl.org/dc/elements/1.1/> ASK WHERE { ?book dc:creator "J.K. Rowling"}
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/books HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
With the response illustrated here:
HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head></head> <boolean>true</boolean> </sparql>
This SPARQL query
PREFIX books: <http://www.example/book/> DESCRIBE books:book6
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated here:
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/books HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
With the response illustrated here:
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/rdf+xml
<?xml version="1.0"?>
<rdf:RDF ...
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:books="http://www.example/book/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
<rdf:Description rdf:about="http://www.example/book/book6">
<dc:title>Example Book #6 </dc:title>
</rdf:Description>
</rdf:RDF>
This SPARQL query
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?who ?g ?mbox WHERE { ?g dc:publisher ?who . GRAPH ?g { ?x foaf:mbox ?mbox } }
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated here (with line breaks for legibility):
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/publishers &default-graph-uri=http://www.example/morepublishers&named-graph-uri=http://your.example/foaf-alice &named-graph-uri=http://www.example/foaf-bob&named-graph-uri=http://www.example/foaf-susan &named-graph-uri=http://this.example/john/foaf Host: www.example User-agent: sparql-client/0.1
With the response illustrated here:
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="who"/>
<variable name="g"/>
<variable name="mbox"/>
</head>
...
<results ordered="false" distinct="false">
<result>
<binding name="who">
<literal>Alice</literal>
</binding>
<binding name="g">
<uri>http://your.example/foaf-alice</uri>
</binding>
<binding name="mbox">
<uri>mailto:alice@example.org</uri>
</binding>
</result>
<result>
<binding name="who">
<literal>Bob</literal>
</binding>
<binding name="g">
<uri>http://www.example/foaf-bob</uri>
</binding>
<binding name="mbox">
<uri>mailto:bob@work.example</uri>
</binding>
</result>
<result>
<binding name="who">
<literal>Susan</literal>
</binding>
<binding name="g">
<uri>http://www.example/foaf-susan</uri>
</binding>
<binding name="mbox">
<uri>mailto:susan@work.example</uri>
</binding>
</result>
<result>
<binding name="who">
<literal>John</literal>
</binding>
<binding name="g">
<uri>http://this.example/john/foaf</uri>
</binding>
<binding name="mbox">
<uri>mailto:john@home.example</uri>
</binding>
</result>
</results>
</sparql>
This SPARQL query
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?who ?g ?mbox FROM <http://www.example/publishers> FROM NAMED <http://www.example/alice> FROM NAMED <http://www.example/bob> WHERE { ?g dc:publisher ?who . GRAPH ?g { ?x foaf:mbox ?mbox } }
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
With the response illustrated here:
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
...
<head>
<variable name="who"/>
<variable name="g"/>
<variable name="mbox"/>
</head>
<results ordered="false" distinct="false">
<result>
<binding name="who">
<literal>Bob Hacker</literal>
</binding>
<binding name="g">
<uri>http://www.example/bob</uri>
</binding>
<binding name="mbox">
<uri>mailto:bob@oldcorp.example</uri>
</binding>
</result>
<result>
<binding name="who">
<literal>Alice Hacker</literal>
</binding>
<binding name="g">
<uri>http://www.example/alice</uri>
</binding>
<binding name="mbox">
<uri>mailto:alice@work.example</uri>
</binding>
</result>
</results>
</sparql>
This SPARQL query
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?who ?g ?mbox FROM <http://www.example/publishers> FROM NAMED <http://www.example/john> FROM NAMED <http://www.example/susan> WHERE { ?g dc:publisher ?who . GRAPH ?g { ?x foaf:mbox ?mbox } }
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/morepublishers &named-graph-uri=http://www.example/bob&named-graph-uri=http://www.example/alice HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
This protocol operation contains an ambiguous RDF dataset: the dataset specified in the query is different than the one
specified in the protocol (by way of default-graph-uri
and named-graph-uri
parameters). A
conformant SPARQL Protocol service must resolve this ambiguity by executing the query against the RDF dataset specified in
the protocol:
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="who"/> <variable name="g"/> <variable name="mbox"/> </head> <results ordered="false" distinct="false"> <result> <binding name="who"> <literal>Bob Hacker</literal> </binding> <binding name="g"> <uri>http://www.example/bob</uri> </binding> <binding name="mbox"> <uri>mailto:bob@oldcorp.example</uri> </binding> </result> <result> <binding name="who"> <literal>Alice Hacker</literal> </binding> <binding name="g"> <uri>http://www.example/alice</uri> </binding> <binding name="mbox"> <uri>mailto:alice@work.example</uri> </binding> </result> </results> </sparql>
This syntactically invalid SPARQL query
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE { ?x foaf:name ?name ORDER BY ?name }
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/morepublishers HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
With the response — the MalformedQuery
fault
replacing the Out Message, as per 2.1
SparqlQuery — illustrated here:
HTTP/1.1 400 Bad Request Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: text/plain 4:syntax error, unexpected ORDER, expecting '}'
This SPARQL query
PREFIX bio: <http://bio.example/schema/#> SELECT ?valence FROM <http://another.example/protein-db.rdf> WHERE { ?x bio:protein ?valence } ORDER BY ?valence
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery&default-graph-uri=http://another.example/protein-db.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
With the response — the QueryRequestRefused
fault replacing the Out Message, as per 2.1
SparqlQuery — illustrated here:
HTTP/1.1 500 Internal Server Error Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: text/html <html> <head> <title>SPARQL Processing Service: Query Request Refused</title> </head> <body> <p> Query Request Refused: your request could not be processed because <code>http://another.example/protein-db.rdf</code> could not be retrieved within the time alloted.</p> </body> </html>
Some SPARQL queries, perhaps machine generated, may be longer than can be reliably conveyed by way of the HTTP GET binding described in 2.2 HTTP Bindings. In those cases the POST binding described in 2.2 may be used. This SPARQL query
PREFIX bio: <http://bio.example/schema/#> ... SELECT ?valence ... FROM <http://another.example/protein-db.rdf> WHERE { ?x bio:protein ?valence ... } ORDER BY ?valence ...
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
POST /sparql/ HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Content-Type: application/x-www-form-urlencoded Content-Length: ... query=EncodedQuery&default-graph-uri=http://another.example/protein-db.rdf
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
SPARQL queries may include internationalized characters or character sets. This SPARQL query
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX 食: <http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#> SELECT ?name ?food WHERE { [ foaf:name ?name ; 食:食べる ?food ] . }
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
GET /sparql/?query=EncodedQuery Host: www.example User-agent: sparql-client/0.1
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
...
</sparql>
SPARQL queries may be serialized on the wire as XML messages and conveyed to a SPARQL query service by way of
HTTP POST
. This SPARQL query
<?xml version="1.0"?> <rdf-query xmlns="http://example.org/SparqlX/"> <select><variable name="book"/><variable name="who"/></select> <query-pattern> <triple-pattern> <subject><variable name="book"/></subject> <predicate><uri>http://purl.org/dc/elements/1.1/creator</uri></predicate> <object><variable name="who"/></object> </triple-pattern> </query-pattern> </rdf-query>
is conveyed to the SPARQL query service, http://www.example/sparql/, as illustrated in this HTTP trace:
POST /sparql/ HTTP/1.1 Host: www.example User-agent: my-sparql-client/0.1 Content-type: application/xml <?xml version="1.0"?> <rdf-query xmlns="http://example.org/SparqlX/"> <select><variable name="book"/><variable name="who"/></select> <query-pattern> <triple-pattern> <subject><variable name="book"/></subject> <predicate><uri>http://purl.org/dc/elements/1.1/creator</uri></predicate> <object><variable name="who"/></object> </triple-pattern> </query-pattern> </rdf-query>
That query against the service-supplied RDF dataset, executed by that SPARQL query service, returns the following query result:
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
<variable name="who"/>
</head>
<results distinct="false" ordered="false">
<result>
<binding name="book"><uri>http://www.example/book/book5</uri></binding>
<binding name="who"><bnode>r29392923r2922</bnode></binding>
</result>
...
<result>
<binding name="book"><uri>http://www.example/book/book6</uri></binding>
<binding name="who"><bnode>r8484882r49593</bnode></binding>
</result>
</results>
</sparql>
[WSDL2-Adjuncts] defines a means of binding abstract interface
operations to SOAP. The SOAP bindings for the query
operation
(from sparql-protocol-query.wsdl)
are as follows:
<binding name="querySoap" interface="SparqlQuery" type="http://www.w3.org/2005/08/wsdl/soap" wsoap:version="1.2" > wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP"> <fault ref="MalformedQuery" wsoap:code="soap:Sender" /> <fault ref="QueryRequestRefused" wsoap:code="soap:Sender" /> <operation ref="query" wsoap:mep="http://www.w3.org/2003/05/soap/mep/request-response" /> </binding>
The name of the SOAP binding
of SparqlQuery
's query
operation
is querySoap
; it is a SOAP binding because of the value
of type
attribute, which is set to the URI identifying
SOAP. The version of SOAP is 1.2
. The underlying
protocol used in this SOAP binding is HTTP, as determined by the URI
value of the wsoap:protocol
attribute. If a SPARQL
Protocol service supports SOAP bindings with the value of
the {http://www.w3.org/2005/08/wsdl/soap, protocol}
attribute set
to http://www.w3.org/2003/05/soap/bindings/HTTP
,
it must support the bindings as described
in sparql-protocol-query.wsdl. SOAP
bindings with wsoap:protocol
values set to transmission
protocols other than HTTP are not described in this document.
The two fault
elements refer to the fault messages
defined in the SparqlQuery
interface.
Finally, the operation
element references
the query
operation of the SparqlQuery
interface which has been previously described
in Excerpt 1.0 above. Since this SOAP
binding describes the operation as using HTTP as the underlying
transport protocol, the value of the wsoap:mep
attribute determines which HTTP method is to be used. This operation
is described as being implemented by a SOAP message exchange
pattern http://www.w3.org/2003/05/soap/mep/request-response
,
which, according to [SOAP12] 7.4 Supported Features, is bound to an
HTTP POST
method.
POST /services/sparql-query HTTP/1.1 Content-Type: application/soap+xml Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.2.1 Host: www.example SOAPAction: "" Content-Length: 438 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <query-request xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#"> <query>SELECT ?z {?x ?y ?z . FILTER regex(?z, 'Harry')}</query> </query-request> </soapenv:Body> </soapenv:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<query-result xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
<ns1:sparql xmlns:ns1="http://www.w3.org/2005/sparql-results#">
<ns1:head>
<ns1:variable name="z"/>
</ns1:head>
<ns1:results distinct="false" ordered="false">
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Chamber of Secrets</ns1:literal>
</ns1:binding>
</ns1:result>
...
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Half-Blood Prince</ns1:literal>
</ns1:binding>
</ns1:result>
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Goblet of Fire</ns1:literal>
</ns1:binding>
</ns1:result>
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Philosopher's Stone</ns1:literal>
</ns1:binding>
</ns1:result>
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Order of the Phoenix</ns1:literal>
</ns1:binding>
</ns1:result>
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Prisoner Of Azkaban</ns1:literal>
</ns1:binding>
</ns1:result>
</ns1:results>
</ns1:sparql>
</query-result>
</soapenv:Body>
</soapenv:Envelope>
There are at least two possible sources of denial-of-service attacks against SPARQL protocol services. First, under-constrained queries can result in very large numbers of results, which may require large expenditures of computing resources to process, assemble, or return. Another possible source are queries containing very complex — either because of resource size, the number of resources to be retrieved, or a combination of size and number — RDF dataset descriptions, which the service may be unable to assemble without significant expenditure of resources, including bandwidth, CPU, or secondary storage. In some cases such expenditures may effectively constitute a denial-of-service attack. A SPARQL protocol service may place restrictions on the resources that it retrieves or on the rate at which external resources are retrieved.There may be other sources of denial-of-service attacks against SPARQL query processing services.
Since a SPARQL protocol service may make HTTP requests of other origin servers on behalf of its clients, it may be used as a vector of attacks against other sites or services. Thus, SPARQL protocol services may effectively act as proxies for third-party clients. Such services may place restrictions on the resources that they retrieve or on the rate at which external resources can be retrieved. SPARQL protocol services may log client requests in such a way as to facilitate tracing them with regard to third-party origin servers or services.
SPARQL protocol services may choose to detect these and other costly, or otherwise unsafe, queries, impose time or memory limits on queries, or impose other restrictions to reduce the service's (and other service's) vulnerability to denial-of-service attacks. They also may refuse to process such query requests.
Different IRIs may have the same appearance. Characters in different scripts may look similar (a Cyrillic "о" may appear similar to a Latin "o"). A character followed by combining characters may have the same visual representation as another character (LATIN SMALL LETTER E followed by COMBINING ACUTE ACCENT has the same visual representation as LATIN SMALL LETTER E WITH ACUTE). Users of SPARQL must take care to construct queries with IRIs that match the IRIs in the data. Further information about matching of similar characters can be found in Unicode Security Considerations [UNISEC] and Internationalized Resource Identifiers (IRIs) [RFC3987] Section 8.
The status of the parts of SPARQL Protocol for RDF (this document) is as follows:
Further, both sparql-protocol-query.wsdl and sparql-protocol-types.xsd are normative.
A conformant SPARQL Protocol service:
SparqlQuery
interface;query
operation of the SparqlQuery
interface;query
in the way described in this document ("SPARQL Protocol for RDF"), in sparql-protocol-query.wsdl, and sparql-protocol-types.xsd;query
operation other than the normative HTTP or SOAP bindings described by SPARQL Protocol for RDF; andMy thanks to members of DAWG, especially Bijan Parsia, Bryan Thompson, Andy Seaborne, Steve Harris, Eric Prud'hommeaux, Yoshio FUKUSHIGE, Howard Katz, Dirk-Willem van Gulik, Dan Connolly, and Lee Feigenbaum. Particular thanks are owed to Elias Torres for his generous assistance and support. Thanks as well to my UMD colleagues Jim Hendler, Ron Alford, Amy Alford, Yarden Katz, Chris Testa, and members of the Mindlab Semantic Web Undergraduate Social. Particular thanks are also owed my NASA colleague and friend, Andy Schain. I also thank Jacek Kopecky, Morten Frederiksen, Mark Baker, Jan Algermissen, Danny Ayers, Bernd Simon, Graham Klyne, Arjohn Kampman, Tim Berners-Lee, Dan Brickley, Patrick Stickler, Karl Dubost, Jonathan Marsh, Leigh Dodds, David Wood, Reto Krummenacher, Thomas Roessler, Danny Weitzner, Paul Downey, Hugo Haas, Richard Newman.
Changes since 27 May Working Draft:
$Log: Overview.html,v $ Revision 1.8 2018/10/09 13:29:03 denis fix validation of xhtml documents Revision 1.7 2017/10/02 10:32:30 denis add fixup.js to old specs Revision 1.6 2006/01/26 17:22:28 connolly #conformance id fix Revision 1.5 2006/01/26 17:18:19 connolly link fixes for publication: - 1 in SOTD - a few from v1.104, v1.105 of editor's draft Revision 1.4 2006/01/25 18:40:02 connolly copyright year Revision 1.3 2006/01/25 18:36:52 connolly more status tweaks Revision 1.2 2006/01/25 18:27:07 connolly title page, SOTD for updated WD Revision 1.1 2006/01/25 18:12:47 connolly snapshot of editor's draft v1.103 of 2006/01/17 22:03:25 Revision 1.103 2006/01/17 22:03:25 kclark replacing text/xml with application/soap+xml Revision 1.102 2006/01/17 15:28:00 kclark removing some comments Revision 1.101 2006/01/15 22:56:26 kclark - removed 3.2 privacy section (no consensus from experts on what this section should do; seems out of scope now) - changed SHOULD to MAY in re: logging requests Revision 1.100 2006/01/13 17:14:17 kclark doh Revision 1.99 2006/01/13 17:11:34 kclark more html validity fixups Revision 1.98 2006/01/13 17:04:15 kclark working on html validity Revision 1.97 2006/01/12 18:11:05 kclark s/Figure/Excerpt/g - updated ACK section Revision 1.96 2006/01/12 17:32:37 kclark - s/SPARQL Protocol/specification of the SPARQL Protocol/ - hypertext link to conformant sparql protocol service - tweaked 2.2.1.8 (editorial) in response to commenter - more section heading/numbering tweaks Revision 1.95 2006/01/12 16:48:47 kclark fixing toc again Revision 1.94 2006/01/12 16:35:28 kclark updating toc Revision 1.93 2006/01/12 16:17:00 kclark fxing stupid format bugs Revision 1.92 2006/01/12 16:14:00 kclark moving stuff around to be more legible Revision 1.91 2006/01/12 16:12:03 kclark - added "Rejecting Query Requests to RDF Datasets" section with 3 "may" clauses - added targets for the two faults Revision 1.90 2006/01/11 20:45:11 kclark - added a conformance section (4. Conformance) (per Q&A review) - conformance section includes statement of which parts of the doc are normative or informative - added a bit about who might be interested in this spec (per Q&A review) - changed excerpt formatting a bit for legibility - synched language with WSDL changes (mostly this involves changes to the HTTP bindings section) - tightened the distinction between SPARQL Protocol (the wsdl, xsd, and for-humans spec) and SPARQL Protocol for RDF (the for-humans spec) - changed the language of QueryRequestRefused: must is now should and there's an explicit statement that HTTP status codes and headers can be returned irrespective of the two WSDL faults defined by SPARQL Protocol - changed fault-details should be returned to must be returned to help distinguish in the 400 and 500 cases between HTTP status codes and WSDL faults - added an informative note about serialization constraints - added 2.2.1.12 SELECT with internationalization (incomplete) - added 2.2.1.13 SELECT with queryHttpPost between and XML input - changed old SOAP namespace in the SOAP example Revision 1.89 2006/01/07 21:31:23 kclark - corrected mime type typo - removed charset utf-8 bits Revision 1.88 2006/01/06 19:23:47 kclark simplified the language describing QueryRequestRefused Revision 1.87 2006/01/06 18:16:55 kclark - tweaked CSS - tweaked table of contents - updated namespace mapping table Revision 1.86 2006/01/04 22:16:50 kclark - fixed bugs in SOAP example - removed spurious tabs in xmlns attrs Revision 1.85 2006/01/04 19:56:09 kclark - changed "my" in urls to "www" Revision 1.84 2006/01/04 17:40:40 kclark - updating status Revision 1.83 2006/01/04 17:38:08 kclark - no obligation to use WSDL language added - typos fixed - erroneous query-result types changed to correct query-request types - useless foaf prefixes removed from sample queries - link from "may refuse to process" 3.0 to 2.1.4 - added rq23#security language - added ref to RFC 3987 Revision 1.82 2005/12/29 17:55:08 kclark trying to prettify the world's ugliest html table Revision 1.81 2005/12/29 17:52:56 kclark changed CSS styling re: Karl Dubost's suggestion removed long note about WSDL 2 binding (the WSDL binding isn't correct yet, that's coming in a day or three) corrected SOAP namespace in the SOAP example (now using the SOAP 1.2 namespace instead of the SOAP 1.1 NS) added a table of local name to NS URI bindings for legibility added a list of the documents comprising the protocol, with links, for legibility corrected various spelling errors changed the spt: local name to st: to harmonized with XSD & WSDL docs corrected IMT in the DESCRIBE example (from app/sparql-results+xml to app/rdf+xml) corrected POST example corrected spuriously generated ref to RDF Primer Revision 1.80 2005/12/28 17:03:37 kclark checking in a trivial change to see if CVS is working properly Revision 1.79 2005/12/16 16:26:51 eric ~ (editorial) validation tweak Revision 1.78 2005/11/22 06:28:11 connolly review w.r.t. QA SpecGL still pending Revision 1.77 2005/11/22 04:11:50 connolly ack'd outstanding comments Revision 1.76 2005/10/21 17:40:12 kclark -- fixing two missing <> around URIs in queries 2.2.1.10 and .11 Revision 1.75 2005/09/14 23:44:11 eric - update references to point to Last Call version of SPARQL Query Language for RDF Revision 1.74 2005/09/14 20:37:22 kclark - fixing inconsistent namespace URI Revision 1.73 2005/09/14 12:57:58 eric getting pubrules compliant Revision 1.72 2005/09/12 15:17:27 eric removed <<<<<<s from an apparent CVS conflict Revision 1.71 2005/09/12 14:14:29 kclark - changed compliance language to not restrict SOAP bindings with non-HTTP transport protocols - added http example numbers - finished SOAP bindings description - renamed query outer element to query-request Revision 1.70 2005/09/09 19:41:45 etorres - updated divs and anchors for all examples to match proto-test cases Revision 1.69 2005/09/08 20:23:35 etorres - added closing div tag to toc section Revision 1.68 2005/09/06 14:50:37 kclark - fix bug in compliance language Revision 1.67 2005/09/05 17:08:18 kclark - start of soap bindings description, which is unfinished Revision 1.66 2005/09/05 17:01:48 kclark - fixing some HTML bugs and spelling errors Revision 1.65 2005/09/05 16:59:21 kclark - removing spurious cvs merge conflict marker Revision 1.64 2005/09/05 16:57:42 kclark - changed TOC - removed Accept: from all examples but the con-neg example - changed sparql-query to query (In Message type name) - noted risk with WSDL2 - removed output and fault serialization IMTs from HTTP bindings - finished description of HTTP bindings - lots of editorial tweaks from EricP - added normative reference to RDF concepts Revision 1.63 2005/08/19 19:42:37 connolly change entity refs to numeric char refs so that we can check the spec without reading the DTD Revision 1.62 2005/08/19 14:09:35 connolly wf fixes Revision 1.61 2005/08/15 19:07:05 kclark -fixing missing < Revision 1.60 2005/08/15 19:03:18 kclark - WSDL, XSD, and spec excerpts in synch; discussion of excerpts needs to be updated yet - new paragraph in security section based on steve h's feedback/review Revision 1.59 2005/08/11 17:27:19 kclark - abstracting HTTP traces - added <div> containers around traces - added new trace for POST binding - tweaked several examples Revision 1.58 2005/08/09 18:06:15 kclark - changed 'may' to 'must' for malformed query fault, as a result of WG decision - added some additional uris to consult re: security - tweaked security language to be more explicit about retrieving arbitrary numbers of web resources based on user input Revision 1.57 2005/08/08 20:55:08 kclark - many tweaks resulting from Andy Seaborne's review, including: s/RDF dataset/RDF dataset description/ s/XML type/instance of an XML type/ (did this by hand, not s&r) killed the bit about "equivalent serialization" - added new examples from Elias Torres - added examples for fault returns - changed CONSTRUCT example: complex FILTER, con-neg - changed may to must for query req refused fault - changed must to may for malformed query fault Revision 1.56 2005/08/03 20:27:23 kclark - reorganized some sections - added sample SOAP trace (which isn't really valid yet, just a place holder) - tweaked policy language very slightly Revision 1.55 2005/07/29 14:09:39 kclark - general readability edits - changed should to may for fault message fault-details - added anchors for dataset sections Revision 1.54 2005/07/28 15:11:44 kclark - tweaked policy considerations section for readability & concision Revision 1.53 2005/07/27 19:42:14 kclark - changed to new MIME type for query results - added new http trace example - added two new trace stubs - added query request refused fault type - expanded policy section with more about security - synch'd rdf dataset with rq23 - added initial POST binding for query operation - flattened structure of query type by inlining rdf-dataset, per AndyS - using new "SPARQL Results Document" from rf1 - added semantics for malformed query fault, though I believe this may be incomplete as spec'd currently Revision 1.52 2005/07/27 18:12:33 kclark - synching rdf dataset with rq23 - changing SOTD to reflect editor's draft status