This is part 3 of the Z39.50 series for dummies. In the first part I explained what Z39.50 is and how to run a simple search. In the second part I showed how to run a simple meta search on the command line.
I searched for the book:
UNIX network programming / W. Richard Stevens, ISBN 0-13-949876-1 in four large libraries:
$ for zurl in `cat zurl.txt`
zoomsh "connect $zurl" \
"search @attr 1=7 0-13-949876-1" "quit"
z3950.loc.gov:7090/voyager: 0 hits
melvyl.cdlib.org:210/CDL90: 1 hits
library.ox.ac.uk:210/ADVANCE: 1 hits
z3950.library.wisc.edu:210/madison: 0 hits
Only 2 out of 4 libraries own this must-have book. Can this be true? Well, lets modify the ISBN and search without dashes ('-')
$ for zurl in `cat zurl.txt` do zoomsh "connect $zurl" \ "search @attr 1=7 0139498761" "quit" done z3950.loc.gov:7090/voyager: 1 hits melvyl.cdlib.org:210/CDL90: 1 hits library.ox.ac.uk:210/ADVANCE: 1 hits z3950.library.wisc.edu:210/madison: 1 hits
Bingo - every library has a copy of UNIX network programming by W. Richard Stevens!
Z39.50 defines the syntax to search in a database. It does not define the semantic of a search, how an ISBN is structured.
If you build a search engine on top of Z39.50 you need an additional layer to handle the semantic of a search for each database. (You need this layer too to add workaround for broken implementations)
In this example above we must remove the dashes in an ISBN search for the Library of Congress and University of Wisconsin-Madinson Libraries.
Another thing which you must be aware: libraries use for historical reasons different character sets: utf-8, iso8859-1, iso5426 and marc8. You must convert your search query to the right character set for each library, for searching and retrieving the records.
In this article I described the challenges to run a meta search on top of Z39.50. All these problems are due the underlying databases and not Z39.50 - you will have the same problems if you use a web based XML services such as SRU or a proprietary, vendor-based API. The truth is that running a metasearch is not a trivial task.