- From: Simon K Johnston <skjohn@us.ibm.com>
- Date: Tue, 18 Aug 2009 09:03:20 -0400
- To: Lee Feigenbaum <lee@thefigtrees.net>
- Cc: SPARQL Working Group <public-rdf-dawg@w3.org>
- Message-ID: <OFB6C4A3ED.CB2ED063-ON85257616.00451AD8-85257616.0047B785@us.ibm.com>
In our Jazz services we took an approach that was inspired by the
OpenSearch spec, specifically their description document [1] that provides
a service description for a search service. The description document tells
a client, among other things how to construct a correct query, so that
query parameters such as the "?query=" that are part of the current SPARQL
protocol can be abstracted. The way the service protocol works in
OpenSearch is something like this:
URL for service end-point is <http://example.com/search>
1. Client performs a GET on <http://example.com/search> itself. The
service responds with the service description document (in XML,
content-type application/opensearchdescription+xml).
2. Client looks for the URI template that best matches their needs which
will be something like
template="http://example.com/?q={searchTerms}&pw={startPage?}"
3. The variables "searchTerms" and "startPage" are defined by the standard
and so the client can substitute in the values provided by the user.
4. Client issues GET on the constructed URI.
We took this pattern and provided an RDF description document in the same
vein; the basic protocol being that only GET is supported and the URI must
be the unadorned service URI, a query uses the same URI but has the
associated query parameters and the POST binding may or may not use the
service URI but as the methods are distinguishable this works.
[1]
http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document
(Eric or anyone else, please feel free to push for query-based options,
but I'm not including them in this message.
Here are the proposed service discovery mechanisms that are based on
SPARQL endpoints. I've tried to include arguments for/against them where
I've picked them up in the discussion so far. Please augment/correct as
necessary.
Option 1 - HTTP-Header
Any GET or HEAD request on an endpoint would use an HTTP response header
to provide a URL at which a service description for that endpoint can be
found. Argument for: The response of any query issued against an
endpoint will include a pointer to the service description. Headers are
easy to include and consume. Argument against: This requires 2 requests
to get the service description.
Option 2 - HTTP OPTIONS
Return a service description in response to an HTTP request on the
endpoint that uses the HTTP OPTIONS verb. Argument for: Potentially
revives the underutilized OPTIONS verb in an appropriate way. Argument
against: OPTIONS is not commonly used and may be tough to implement in
certain environments (e.g. XHR?) Also, OPTIONS may not have the proper
cache semantics for service descriptions.
Option 7 - Conneg
An HTTP GET request on a SPARQL endpoint without any query parameters
and specifying an RDF serialization in the Accept: header would return a
service description for the endpoint. (Suggested in
http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2009Jul/0005.html
.) Argument for: Allows for endpoints that today return HTML query forms
in response to a regular GET on the endpoint URI. Argument against: May
be an abuse of content negotiation to return something which is not
strictly an alternative representation of what would be shown in the
HTML version. Content negotiation is not always easy to get right.
Option 8 - New protocol operation (?serviceDescription)
A request to a URI such as /endpoint/sparql?serviceDescription returns
the service description. Argument for: Simple extension of SPARQL
protocol that maps nicely to non-HTTP instantiations of the protocol.
Easy to implement and invoke. A well-known pattern from Web Services
stacks. Argument against: ?? Not sure, other than Steve is ok with it
but not thrilled. :-)
Note, any of these could be combined with Orri's "compromise" proposal,
in which the service description itself could optionally point to a
graph that can be queried that contains the service description info.
Lee
Thanks,
Simon K. Johnston (skjohn@us.ibm.com) - STSM, Jazz Foundation Services
Mobile: +1 (919) 200-9973
Office: +1 (919) 595-0786 (tie-line: 268-6838)
Blog: http://www.ibm.com/developerworks/blogs/page/johnston
Received on Tuesday, 18 August 2009 13:04:32 UTC