Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Corrected links that should have been relative instead of absolute.

See also: Our SRU Server

The facts as we know them:

  • SRU (Search/Retrieve via URL) is a URL-based system for communication between information retrieval systems. SRW (Search/Retreive Web Service) is a generic Web Service for communication between information retrieval systems. SRW is SRU is based on Z39.50, but removes a lot of the old baggage that no one was using. If any of the old stuff is needed, it can be implemented as a separate web service. This is just search and retrieve.
  • SRW (Search/Retreive Web Service) is being renamed "SRU via SOAP".
  • CQL is the query language used by SRU/SRW. (Contextual Query Language)
  • All of the above used to fall under the set of standards called ZiNG (Z39.50 International: Next Generation).These days, most people simply talk about support for SRU, but they may mean any combination of the ZiNG standards, but they are now all being renamed SRU. (Although the SRU XML objects still use the SRW namespace.)

A list of OCLC's SRU servers.

It is very easy to write basic SRW SRU implementations. SOAP toolkits can
use a WSDL description to generate protocol code. Then all we have to
do is implement the single client or server SRW SRU method, which
translates your query format into an CQL query (client) or a CLQ query
into your database query (server).


CQL allows you to specify the format of the result set (Dublin Core,
MARCXML, etc.). All servers must support Dublin Core and the SRW
Diagnostics SRUDiagnostics format.

The query can be a list of attribute-value pairs, or a chunk of XML.

CQL makes a distinction between string search (exact match of a string)
and keyword search (finding all words of a string somewhere in the document).

Bibliographic (MODS-like) searching

Bibliographic searching is currently at the proposal stage.




The result set can contain state-preserving information, like the
original query or an IP address, for use with lightweight clients.

Records in the result set are encoded as strings, with angle brackets
escaped. This doesn't work very well for completely browser-based
clients using SRU, since you lose the ability to apply XPath
statements to returned records. This problem will be addressed in a
future version.

Servers can/should retain result sets, so they can be referenced
later, especially when the client is asking for multiple pages from a
set. A good way to force the server to keep a result set is to "touch"
it with the client, and refresh the time.



SRU info

Authentication/encryption is not built into the protocol, and must be addressed
at a higher level. (See general web services literature.)


  • Xquery is based on knowing the structure of the data being searched. It doesn't work well for general-purpose searches.
  • SDLIP is complex, doesn't have a query language
  • DASL is linked to SQL, but pretty good
  • Z39.50 is complex and fragile

OCLC's SRW server

Ralph LeVan at OCLC maintains a Java-based SRW/SRU server package. Out of the box, it can connect to OCLC's Pears database and the Lucene indexes created by DSpace.


  • doGet


  • OpenURL is focused more on location of a known item, while SRU is focused on searching for a list of items that may meet a user's needs. OpenURL requests result in the user "going somewhere", whether to a service provider's web page, an online copy of the requested item, or a "not available" page. SRU requests result in an XML document that contains metadata about the requested item(s).