Perl extension implementing the ZOOM API for Information Retrieval
This module provides a nice, Perlish implementation of the ZOOM Abstract API described and documented at http://zoom.z3950.org/api/
the ZOOM module is implemented as a set of thin classes on top of the non-OO functions provided by this distribution's Net::Z3950::ZOOM module, which in turn is a thin layer on top of the ZOOM-C code supplied as part of Index Data's YAZ Toolkit. Because ZOOM-C is also the underlying code that implements ZOOM bindings in C++, Visual Basic, Scheme, Ruby, .NET (including C#) and other languages, this Perl module works compatibly with those other implementations. (Of course, the point of a public API such as ZOOM is that all implementations should be compatible anyway; but knowing that the same code is running is reassuring.)
The ZOOM module provides two enumerations (ZOOM::Error and ZOOM::Event), three utility functions diag_str(), event_str() and event() in the ZOOM package itself, and eight classes: ZOOM::Exception, ZOOM::Options, ZOOM::Connection, ZOOM::Query, ZOOM::ResultSet, ZOOM::Record, ZOOM::ScanSet and ZOOM::Package. Of these, the Query class is abstract, and has four concrete subclasses: ZOOM::Query::CQL, ZOOM::Query::PQF, ZOOM::Query::CQL2RPN and ZOOM::Query::CCL2RPN. Finally, it also provides a ZOOM::Query::Log module which supplies a useful general-purpose logging facility. Many useful ZOOM applications can be built using only the Connection, ResultSet, Record and Exception classes, as in the example code-snippet above.
A typical application will begin by creating an Connection object, then using that to execute searches that yield ResultSet objects, then fetching records from the result-sets to yield Record objects. If an error occurs, an Exception object is thrown and can be dealt with.
More sophisticated applications might also browse the server's indexes to create a ScanSet, from which indexed terms may be retrieved; others might send ``Extended Services'' Packages to the server, to achieve non-standard tasks such as database creation and record update. Searching using a query syntax other than PQF can be done using an query object of one of the Query subclasses. Finally, sets of options may be manipulated independently of the objects they are associated with using an Options object.
In general, method calls throw an exception if anything goes wrong, so you don't need to test for success after each call. See the section below on the Exception class for details.