X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=doc%2Fzoom.xml;h=af485ee058b8136fc06f66def7010bf409bad603;hb=7b9c683505fd79972d6f3d397ac1c6e9040d2110;hp=cba9e9ea01e8f7b80b32e621f2e1902fcfa1b284;hpb=994ac888aec8e10aaaf578687b4d554b300cb4fd;p=yazpp-moved-to-github.git diff --git a/doc/zoom.xml b/doc/zoom.xml index cba9e9e..af485ee 100644 --- a/doc/zoom.xml +++ b/doc/zoom.xml @@ -1,5 +1,5 @@ - + ZOOM-C++ @@ -17,7 +17,7 @@ programming languages. - The Yaz++ library includes an implementation of the C++ binding for ZOOM, enabling quick, easy development of client applications. @@ -25,11 +25,10 @@ For example, here is a tiny Z39.50 client that fetches and displays the MARC record for Farlow & Brett Surman's - - The Complete Dinosaur + The Complete Dinosaur from the Library of Congress's Z39.50 server: - + #include <iostream> #include <yaz++/zoom.h> @@ -39,17 +38,21 @@ { connection conn("z3950.loc.gov", 7090); conn.option("databaseName", "Voyager"); - resultSet rs(conn, prefixQuery("@attr attr 1=7 0253333490")); + conn.option("preferredRecordSyntax", "USMARC"); + resultSet rs(conn, prefixQuery("@attr 1=7 0253333490")); const record *rec = rs.getRecord(0); cout << rec->render() << endl; } - - - (Note that, for the sake of simplicity, this does not check for - errors: we show a more realistic version of this program later.) - + + + + For the sake of simplicity, this program does not check + for errors: we show a more robust version of the same program + later.) + + - Yaz++'s implementation of the C++ binding is a thin layer over Yaz's + YAZ++'s implementation of the C++ binding is a thin layer over YAZ's implementation of the C binding. For information on the supported options and other such details, see the ZOOM-C documentation, which can be found on-line at @@ -182,7 +185,7 @@ }; - This class enables a query to be created by compiling Yaz's + This class enables a query to be created by compiling YAZ's cryptic but powerful Prefix Query Notation (PQN). @@ -204,7 +207,7 @@ Common Command Language (CCL). The qualifiers recognised by the CCL parser are specified in an - external configuration file in the format described by the Yaz + external configuration file in the format described by the YAZ documentation. @@ -432,10 +435,10 @@ Usually that's what you want: it means that you can easily fetch a record, use it and forget all about it, like this: - + resultSet rs(conn, query); cout << rs.getRecord(0)->render(); - + But sometimes you want a record to live on past the lifetime of the resultSet from which it was @@ -443,7 +446,7 @@ be used to make an autonomous copy. The application must delete it when it doesn't need it any longer: - + record *rec; { resultSet rs(conn, query); @@ -452,7 +455,7 @@ } cout << rec->render(); delete rec; - + @@ -583,6 +586,63 @@ + + Revised Sample Program + + Now we can revise the sample program from the + introduction + to catch exceptions and report any errors: + + + /* g++ -o zoom-c++-hw zoom-c++-hw.cpp -lyaz++ -lyaz */ + + #include <iostream> + #include <yaz++/zoom.h> + + using namespace ZOOM; + + int main(int argc, char **argv) + { + try { + connection conn("z3950.loc.gov", 7090); + conn.option("databaseName", "Voyager"); + conn.option("preferredRecordSyntax", "USMARC"); + resultSet rs(conn, prefixQuery("@attr 1=7 0253333490")); + const record *rec = rs.getRecord(0); + cout << rec->render() << endl; + } catch (systemException &e) { + cerr << "System error " << + e.errcode() << " (" << e.errmsg() << ")" << endl; + } catch (bib1Exception &e) { + cerr << "BIB-1 error " << + e.errcode() << " (" << e.errmsg() << "): " << e.addinfo() << endl; + } catch (queryException &e) { + cerr << "Query error " << + e.errcode() << " (" << e.errmsg() << "): " << e.addinfo() << endl; + } catch (exception &e) { + cerr << "Error " << + e.errcode() << " (" << e.errmsg() << ")" << endl; + } + } + + + The heart of this program is the same as in the original version, + but it's now wrapped in a try block followed by + several catch blocks which try to give helpful + diagnostics if something goes wrong. + + + The first such block diagnoses system-level errors such as memory + exhaustion or a network connection being broken by a server's + untimely death; the second catches errors at the Z39.50 level, + such as a server's report that it can't provide records in USMARC + syntax; the third is there in case there's something wrong with + the syntax of the query (although in this case it's correct); and + finally, the last catch block is a + belt-and-braces measure to be sure that nothing escapes us. + + + References @@ -624,7 +684,7 @@ sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t - sgml-parent-document: "zebra.xml" + sgml-parent-document: "yaz++.xml" sgml-local-catalogs: nil sgml-namecase-general:t End: