- From: Thompson, Bryan B. <BRYAN.B.THOMPSON@saic.com>
- Date: Tue, 1 Jun 2004 08:44:36 -0400
- To: "'public-rdf-dawg@w3.org'" <public-rdf-dawg@w3.org>
This completes my action to review joseki[1] against the current DAWG
draft (v1.89) requirements[2]. As described at [3], joseki is an
abstract protocol for RDF query and update languages. An extensible
binding is specified and implemented for HTTP. Joseki does not
specify a query language, but provides an extensible mechanism for a
client to indicate which query language (by URI or shortname) it wants
to use for a given request.
Joseki inherits its protocol characteristics from the protocol onto
which it is bound, for example the content and transport encoding
aspects of the HTTP protocol and its graph query and update
characteristics from the query language selected by the client.
Implementation details.
I reviewed a specific implementation of joskei[1]. This Joseki
distribution supports HTTP GET and provides the following query
languages: RDQL[5], Fetch, and SPO. [4] describes these query
languages.
RDQL: Uses the Jena implementation of RDQL. RDQL is an
implementation of the SquishQL RDF query language, which
itself is derived from rdfDB. This class of query
languages regards RDF as triple data, without schema or
ontology information.
fetch: The 'fetch' query language provides a "describe" or "tell
me about" query. It takes a resource as argument
(alternatively, it takes a property/object pair to find
the subject or subjects). It returns some RDF depending
on server and setup. Typically the bNode closure from
that resource as subject; it it were FOAF, then the
closure might be to resources of type foaf:Person + the
defining foaf:mbox property. The URI for "fetch" is
http://jena.hpl.hp.com/2003/07/query/fetch
SPO: Also known as "Triples", SPO is an experimental minimal
query language. An SPO query is a single triple pattern,
with optional subject (parameter "s"), predicate (parameter
"p"), and object (parameter "o", if a URIref, parameter "v"
for a string literal). Absence of a parameter implies "any"
for matching that slot of the triple pattern.
An extensible mechanism is provided for declaring various update
operations. Joseki bundles a declaration and implementation of two
update operations: 'add' and 'remove'.
Conclusions.
I reached two conclusions from this survey with broader relevance
to DAWG: (1) We do not have enough requirements yet concerning the
protocol; and (2) Our current requirements should be seperated into
protocol requirements and query language requirements for the
purpose of making technology evaluations such this one.
Survey Results.
For the purposes of this evaluation I have indicated if Joseki could
support the requirement under an HTTP binding. The codes are:
j+ : joseki supports this requirement today under a suitable
protocol binding and/or query language.
j- : the requirement appears to be explicitly outside of the
scope of joseki, which is not to say that it could NOT be
met by a suitable revision of joseki.
j? : need more information to make the determination.
Requirements:
j+ : 3.1 RDF Graph Pattern Matching (inherited from query lang.)
j+ : 3.2 Variable Binding Results.
All results from a request are RDF graphs - you can ask the
RDQL processor for the result set in RDF form using the
vocabulary:
http://www.w3.org/2003/03/rdfqr-tests/recording-query-results.html
The default mode of operation is the subgraph match. You
have to supply an additional parameter to the request
("format=BV") to get a variable binding result.
j? : 3.3 Extensible Value Testing (probably if the specified query
lang. supports this.)
j+ : 3.4 Subgraph Results (this is the specific mechanism for joseki)
j+ : 3.5 Local Queries (e.g., by using http://localhost/model?query
for the HTTP binding.)
j+ : 3.6 Optional Match (if the specified query language supports
this.)
j? : 3.7 Limited Datatype Support (probably if the specified query
lang. supports this.)
j+ : 3.8 Bookmarkable Queries (under the HTTP binding.)
j+ : 3.9 Bandwidth-efficient Protocol (under the HTTP binding by using
using the Accept-Encoding header to negotiate a content
compression algorithm, the selected algorithm is indicated to
the client via the Content-Encoding header.)
j? : 3.10 Result Limits (joseki does not currently support this in the
abstract protocol. If limits are a property of the query
language and not the protocol, then joseki would inherit
support for limits from a query language that supported them.
However, results would be unordered unless an ordering is
somehow specified, which means that the same request with a
limit parameter could return differing results on each
invocation against an unchanged triple store.)
Design Objectives:
j? : 4.1 Human-friendly Syntax (It all depends on the selected query
language and on whether or not you consider something mashed
into a URI to be 'human friendly'. It would be easy to
create a human friendly XForm interface for a given query
language.)
j- : 4.2 Provenance (No explicit provisions have been made for
provenance.)
j+ : 4.3 Non-existent Triples (If the selected query language supports
this feature.)
j? : 4.4 User-specifiable Serialization (Perhaps, but which query
languages support this feature?)
j? : 4.6 Aggregate Query (Perhaps, but which query languages support
this feature?)
j+ : 4.6 Additional Semantic Information.
Andy notes: "An RDQL query to Jena using jrv:directSubClassOf
or jrv:directSubPropertyOf. jrv is the Jena Reasoner
Vocabulary. It's a feature of the QL, not the protocol
although it could be a feature of which graph you ask."
[1] http://www.joseki.org
[2] http://www.w3.org/2001/sw/DataAccess/UseCases
[3] http://www.joseki.org/protocol.html
[4] http://www.joseki.org/query-languages.html
[5] http://jena.sourceforge.net/tutorial/RDQL/index.html
Received on Tuesday, 1 June 2004 08:45:05 UTC