||This article includes a list of references, but its sources remain unclear because it has insufficient inline citations. (December 2009)|
Z39.50 is an international standard client–server, application layer communications protocol for searching and retrieving information from a database over a TCP/IP computer network. It is covered by ANSI/NISO standard Z39.50, and ISO standard 23950. The standard's maintenance agency is the Library of Congress.
Z39.50 is widely used in library environments and is often incorporated into integrated library systems and personal bibliographic reference software. Interlibrary catalogue searches for interlibrary loan are often implemented with Z39.50 queries.
Work on the Z39.50 protocol began in the 1970s, and led to successive versions in 1988, 1992, 1995 and 2003. The Contextual Query Language (formerly called the Common Query Language) is based on Z39.50 semantics.
It supports a number of actions, including search, retrieval, sort, and browse. Searches are expressed using attributes, typically from the bib-1 attribute set, which defines six attributes to be used in searches of information on the server computer: use, relation, position, structure, truncation, completeness. The syntax of the Z39.50 protocol allows for very complex queries.
In practice, however, the functional complexity is limited by the uneven implementations by developers and commercial vendors. The syntax of Z39.50 is abstracted from the underlying database structure; for example, if the client specifies an author search (Use attribute 1003), it is up to the server to determine how to map that search to the indexes it has at hand. This allows Z39.50 queries to be formulated without having to know anything about the target database; but it also means that results for the same query can vary widely among different servers. One server may have an author index; another may use its index of personal names, whether they are authors or not; another may have no name index and fall back on its keyword index; and another may have no suitable index and return an error.
An attempt to remedy this situation is the Bath Profile (named after Bath, England, where the working group first met in 1999). This document rigidly specifies the exact search syntax to employ for common bibliographic searches, and the expected behavior of Bath-compliant servers in response to these searches. Implementation of the Bath Profile has been slow but is gradually improving the Z39.50 landscape. The Bath Profile is maintained by Library and Archives Canada.
Z39.50 is a pre-Web technology, and various working groups are attempting to update it to fit better into the modern environment. These attempts fall under the designation ZING (Z39.50 International: Next Generation), and pursue various strategies.
The most important are the twin protocols SRU/SRW, which drop the Z39.50 communications protocol (replacing it with HTTP) but attempt to preserve the benefits of the query syntax. SRU is REST based and enables queries to be expressed in URL query strings; SRW uses SOAP. Both expect search results to be returned as XML.
These projects have a much lower barrier to entry for developers than the original Z39.50 protocol, allowing the relatively small market for library software to benefit from the web service tools developed for much larger markets.
Alternatives include the following.
- Search/Retrieve Web Service, successor to Z39.50
- Open Archives Initiative Protocol for Metadata Harvesting
- CQL: the Contextual Query Language: Specifications SRU: Search/Retrieval via URL, Standards, Library of Congress
- "Linked Data in Libraries Metadata Retrieval and Harvesting".
- Z39.50 Maintenance Agency
- Z39.50 Standard Document (pdf)
- Bath Profile
- SRU Maintenance Agency
- Z-Brary Registry of z39.50 Targets
- IRSpy Z39.50 Target Directory
- A Primer on the Protocol (pdf)
- BibDataZU (Z39.50 Client Software)
- Z39.50 Object-Orientation Model
- YAZ Toolkit
- PHP/YAZ Toolkit
- Mercury Z39.50 Client
- EndNote Z39.50 Client
- BookWhere z39.50 client and z39.50 registry
- JAFER Project (Java Access For Electronic Resources)