Many huge changes.
authormike <mike>
Wed, 16 Nov 2005 14:54:43 +0000 (14:54 +0000)
committermike <mike>
Wed, 16 Nov 2005 14:54:43 +0000 (14:54 +0000)
lib/ZOOM.pod

index cfb636e..da85d4a 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: ZOOM.pod,v 1.3 2005-11-15 17:33:04 mike Exp $
+# $Id: ZOOM.pod,v 1.4 2005-11-16 14:54:43 mike Exp $
 
 use strict;
 use warnings;
 
 use strict;
 use warnings;
@@ -24,7 +24,7 @@ ZOOM - Perl extension implementing the ZOOM API for Information Retrieval
 =head1 DESCRIPTION
 
 This module provides a nice, Perlish implementation of the ZOOM
 =head1 DESCRIPTION
 
 This module provides a nice, Perlish implementation of the ZOOM
-Abstract API described at http://zoom.z3950.org/api/
+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 C<Net::Z3950::ZOOM>
 
 the ZOOM module is implemented as a set of thin classes on top of the
 non-OO functions provided by this distribution's C<Net::Z3950::ZOOM>
@@ -55,14 +55,16 @@ C<ZOOM::Query::CQL>
 and
 C<ZOOM::Query::PQF>.
 Many useful ZOOM applications can be built using only the Connection,
 and
 C<ZOOM::Query::PQF>.
 Many useful ZOOM applications can be built using only the Connection,
-ResultSet and Record classes, as in the example code-snippet above.
+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.
 
 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 browse the server's indexes to
-create a ScanSet, from which indexed terms may be retrieved; others
+
+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
 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
@@ -70,13 +72,205 @@ 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.
 
 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.
+
+=head1 UTILITY FUNCTION
+
+=head2 ZOOM::diag_str()
+
+ $msg = ZOOM::diag_str(ZOOM::Error::INVALID_QUERY);
+
+Returns a human-readable English-language string corresponding to the
+error code that is its own parameter.  This works for any error-code
+returned from
+C<ZOOM::Exception::code()>,
+C<ZOOM::Connection::error_x()>
+or
+C<ZOOM::Connection::errcode()>,
+irrespective of whether it is a member of the C<ZOOM::Error>
+enumeration or drawn from the BIB-1 diagnostic set.
+
+=head1 CLASSES
+
+The eight ZOOM classes are described here in ``sensible order'':
+first, the four commonly used classes, in the he order that they will
+tend to be used in most programs (Connection, ResultSet, Record,
+Exception); then the four more esoteric classes in descending order of
+how often they are needed.
+
+With the exception of the Options class, which is an extension to the
+ZOOM model, the introduction to each class includes a link to the
+relevant section of the ZOOM Abstract API.
+
+=head2 ZOOM::Connection
+
+ $conn = new ZOOM::Connection("indexdata.dk:210/gils");
+ print("server is '", $conn->option("serverImplementationName"), "'\n");
+ $conn->option(preferredRecordSyntax => "usmarc");
+ $conn->option_binary(iconBlob => "foo\0bar");
+ $rs = $conn->search_pqf('@attr 1=4 mineral');
+ $ss = $conn->scan('@attr 1=1003 a');
+ if ($conn->errcode() != 0) {
+    die("somthing went wrong: " . $conn->errmsg())
+ }
+ $conn->destroy()
+
+This class represents a connection to an information retrieval server,
+using an IR protocol such as ANSI/NISO Z39.50, SRW (the
+Search/Retrieve Webservice), SRU (the Search/Retrieve URL) or
+OpenSearch.  Not all of these protocols require a low-level connection
+to be maintained, but the Connection object nevertheless provides a
+location for the necessary cache of configuration and state
+information, as well as a uniform API to the connection-oriented
+facilities (searching, index browsing, etc.), provided by these
+protocols.
+
+See the description of the C<Connection> class in the ZOOM Abstract
+API at
+http://zoom.z3950.org/api/zoom-current.html#3.2
+
+=head3 Methods
+
+=head4 new()
+
+ $conn = new ZOOM::Connection("indexdata.dk", 210);
+ $conn = new ZOOM::Connection("indexdata.dk/gils:210");
+ $conn = new ZOOM::Connection("tcp:indexdata.dk/gils:210");
+ $conn = new ZOOM::Connection("http:indexdata.dk/gils:210");
+
+I<###>
+
+create
+connect
+error_x
+errcode
+errmsg
+addinfo
+option
+option_binary
+search
+search_pqf
+scan
+package
+destroy
+
+=head2 ZOOM::ResultSet
+
+I<###>
+
+=head2 ZOOM::Record
+
+I<###>
+
+=head2 ZOOM::Exception
+
+In general, method calls throw an exception (of class
+C<ZOOM::Exception>) if anything goes wrong, so you don't need to test
+for success after each call.  Exceptions are caught by enclosing the
+main code in an C<eval{}> block and checking C<$@> on exit from that
+block, as in the code-sample above.
+
+There are a small number of exceptions to this rule.
+I<###>
+
+=head2 ZOOM::ScanSet
+
+I<###>
+
+=head2 ZOOM::Package
+
+I<###>
+
+=head2 ZOOM::Query
+
+I<###>
+
+=head2 ZOOM::Options
+
+I<###>
+
+=head1 ENUMERATIONS
+
+The ZOOM module provides two enumerations that list possible return
+values from particular functions.  They are described in the following
+sections.
+
+=head2 ZOOM::Error
+
+ if ($@->code() == ZOOM::Error::QUERY_PQF) {
+     return "your query was not accepted";
+ }
+
+This class provides a set of manifest constants representing some of
+the possible error codes that can be raised by the ZOOM module.  The
+methods that return error-codes are
+C<ZOOM::Exception::code()>,
+C<ZOOM::Connection::error_x()>
+and
+C<ZOOM::Connection::errcode()>.
+
+The C<ZOOM::Error> class provides the constants
+C<NONE>,
+C<CONNECT>,
+C<MEMORY>,
+C<ENCODE>,
+C<DECODE>,
+C<CONNECTION_LOST>,
+C<INIT>,
+C<INTERNAL>,
+C<TIMEOUT>,
+C<UNSUPPORTED_PROTOCOL>,
+C<UNSUPPORTED_QUERY>,
+C<INVALID_QUERY>,
+C<CREATE_QUERY>,
+C<QUERY_CQL>,
+C<QUERY_PQF>,
+C<SORTBY>,
+C<CLONE>
+and
+C<PACKAGE>,
+each of which specifies a client-side error.  Since errors may also be
+diagnosed by the server, and returned to the client, error codes may
+also take values from the BIB-1 diagnostic set of Z39.50, listed at
+the Z39.50 Maintenance Agency's web-site at
+http://www.loc.gov/z3950/agency/defns/bib1diag.html
+
+All error-codes, whether client-side from the C<ZOOM::Error>
+enumeration or server-side from the BIB-1 diagnostic set, can be
+translated into human-readable messages by passing them to the
+C<ZOOM::diag_str()> utility function.
+
+=head2 ZOOM::Event
+
+ if ($conn->last_event() == ZOOM::Event::CONNECT) {
+     print "Connected!\n";
+ }
+
+In applications that need it - mostly complex multiplexing
+applications - The C<ZOOM::Connection::last_event()> method is used to
+return an indication of the last event that occurred on a particular
+connection.  It always returns a value drawn from this enumeration,
+that is, one of C<NONE>, C<CONNECT>, C<SEND_DATA>, C<RECV_DATA>,
+C<TIMEOUT>, C<UNKNOWN>, C<SEND_APDU>, C<RECV_APDU>, C<RECV_RECORD> or
+C<RECV_SEARCH>.
+
+You almost certainly don't need to know about this.  Frankly, I'm not
+sure how to use it myself.
 
 =head1 SEE ALSO
 
 
 =head1 SEE ALSO
 
+The ZOOM abstract API,
+http://zoom.z3950.org/api/zoom-current.html
+
 The C<Net::Z3950::ZOOM> module, included in the same distribution as this one.
 
 The C<Net::Z3950> module, which this one supersedes.
 
 The C<Net::Z3950::ZOOM> module, included in the same distribution as this one.
 
 The C<Net::Z3950> module, which this one supersedes.
 
+The BIB-1 diagnostic set of Z39.50,
+http://www.loc.gov/z3950/agency/defns/bib1diag.html
+
 =head1 AUTHOR
 
 Mike Taylor, E<lt>mike@indexdata.comE<gt>
 =head1 AUTHOR
 
 Mike Taylor, E<lt>mike@indexdata.comE<gt>