Moved ignore files.
[yaz-moved-to-github.git] / doc / zoom.xml
index ce88f61..8c99869 100644 (file)
@@ -20,7 +20,7 @@ ZOOM_options_set_int(opt, name, value)
 ZOOM_connection_scan1 (ZOOM_connection c, ZOOM_query startterm)
 ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
 -->
-<!-- $Id: zoom.xml,v 1.51 2006-09-06 09:26:36 adam Exp $ -->
+<!-- $Id: zoom.xml,v 1.65 2007-09-11 16:36:51 adam Exp $ -->
  <chapter id="zoom"><title>ZOOM</title>
   <para>
     &zoom; is an acronym for 'Z39.50 Object-Orientation Model' and is
@@ -34,7 +34,15 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
    <para>
     A recent addition to &yaz; is SRU support. You can now make
     SRU ZOOM connections by specifying scheme <literal>http://</literal>
-    for the hostname for a connection.
+    for the hostname for a connection.  The dialect of SRU used is
+    specified by the value of the connection's <literal>sru</literal>
+    option, which may be SRU over HTTP GET (<literal>get</literal>),
+    SRU over HTTP POST (<literal>post</literal>) or SRW (SRU over
+    SOAP) (<literal>soap</literal>).  Using the facility for embedding
+    options in target strings, a connection can be forced to use SRU
+    rather the SRW (the default) by prefixing the target string with
+    <literal>sru=get,</literal>, like this:
+    <literal>sru=get,http://sru.miketaylor.org.uk:80/sru.pl</literal>
    </para>
   </note>
 
@@ -116,7 +124,7 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     <literal><parameter>key</parameter>=<parameter>value</parameter></literal>
     sequences, each of which represents an option to be set into the
     connection structure <emphasis>before</emphasis> the
-    protocol-level connection is forged and the initialisation
+    protocol-level connection is forged and the initialization
     handshake takes place.  This facility can be used to provide
     authentication credentials, as in host-strings such as:
     <literal>user=admin,password=halfAm4n,tcp:localhost:8017/db</literal>
@@ -253,6 +261,20 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
         mediumSetElementSetName</entry><entry>
         The element set name to be for medium-sized result sets.
        </entry><entry>none</entry></row>
+      <row><entry>
+        init_opt_search, init_opt_present, init_opt_delSet, etc.</entry><entry>
+        After a successful Init, these options may be interrogated to
+       discover whether the server claims to support the specified
+       operations.
+       </entry><entry>none</entry></row>
+      <row><entry>
+        sru_version</entry><entry>
+       SRU/SRW version. Should be <literal>1.1</literal>, or
+       <literal>1.2</literal>. This is , prior to connect, the version
+       to offer (highest version). And following connect (in fact
+       first operation), holds the negotiated version with the server
+       (same or lower version).
+       </entry><entry>1.2</entry></row>
      </tbody>
     </tgroup>
    </table>
@@ -318,7 +340,8 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
      API cannot tell the outcome (yet).
     </para>
     </sect2>
-   <sect2><title>SRU Protocol behavior</title>
+   <sect2 id="zoom.sru.init.behavior">
+    <title>SRU Protocol behavior</title>
     <para>
      The SRU protocol doesn't feature an Inititialize Request, so
      the connection phase merely establishes a TCP/IP connection
@@ -365,7 +388,7 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     sort criteria using the same string notation for sort as offered by
     the <link linkend="sortspec">YAZ client</link>.
    </para>
-   <sect2><title>Protocol behavior</title>
+   <sect2 id="zoom.sort.behavior"><title>Protocol behavior</title>
     <para>
      The query object is just an interface for the member Query
      in the SearchRequest. The sortby-function is an interface to the
@@ -416,7 +439,8 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     The number of hits also called result-count is returned by
     function <function>ZOOM_resultset_size</function>.
    </para>
-   <table frame="top"><title>ZOOM Result set Options</title>
+   <table id="zoom.resultset.options" 
+    frame="top"><title>ZOOM Result set Options</title>
     <tgroup cols="3">
      <colspec colwidth="4*" colname="name"></colspec>
      <colspec colwidth="7*" colname="description"></colspec>
@@ -462,6 +486,13 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
         If this option isn't set, the ZOOM module will automatically
         allocate a result set name.
        </entry><entry>default</entry></row>
+      <row><entry>
+        rpnCharset</entry><entry>Character set for RPN terms.
+        If this is set, ZOOM C will assume that the ZOOM application is
+        running UTF-8. Terms in RPN queries are then converted to the
+        rpnCharset. If this is unset, ZOOM C will not assume any encoding
+        of RPN terms and no conversion is performed.
+       </entry><entry>none</entry></row>
      </tbody>
     </tgroup>
    </table>
@@ -480,7 +511,8 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     Read <literal>searchresult.size</literal> to determine the
     number of items.
    </para>
-   <table frame="top"><title>Search Info Report options</title>
+   <table id="zoom.search.info.report.options" 
+    frame="top"><title>Search Info Report Options</title>
     <tgroup cols="2">
      <colspec colwidth="4*" colname="name"></colspec>
      <colspec colwidth="7*" colname="description"></colspec>
@@ -525,7 +557,7 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
      </tbody>
     </tgroup>
    </table>
-   <sect2>
+   <sect2 id="zoom.z3950.resultset.behavior">
     <title>Z39.50 Protocol behavior</title>
     <para>
      The creation of a result set involves at least a SearchRequest
@@ -577,7 +609,7 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
      to specify one elementSetName option rather than three.
      </para>
    </sect2>
-   <sect2>
+   <sect2 id="zoom.sru.resultset.behavior">
     <title>SRU Protocol behavior</title>
     <para>
      Current version of &yaz; does not take advantage of a result set id
@@ -625,13 +657,16 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     created from result sets.
    </para>
    <synopsis>
-     void ZOOM_resultset_records (ZOOM_resultset r,
-                                  ZOOM_record *recs,
-                                  size_t start, size_t count);
-     ZOOM_record ZOOM_resultset_record (ZOOM_resultset s, size_t pos);
+     void ZOOM_resultset_records(ZOOM_resultset r,
+                                 ZOOM_record *recs,
+                                 size_t start, size_t count);
+     ZOOM_record ZOOM_resultset_record(ZOOM_resultset s, size_t pos);
+
+     const char *ZOOM_record_get(ZOOM_record rec, const char *type,
+                                 size_t *len);
 
-     const char *ZOOM_record_get (ZOOM_record rec, const char *type,
-                                  size_t *len);
+     int ZOOM_record_error(ZOOM_record rec, const char **msg,
+                           const char **addinfo, const char **diagset);
 
      ZOOM_record ZOOM_record_clone (ZOOM_record rec);
 
@@ -655,6 +690,12 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     If no record could be obtained <literal>NULL</literal> is returned.
    </para>
    <para>
+    Error information for a record can be checked with
+    <function>ZOOM_record_error</function> which returns non-zero
+    (error code) if record is in error, called <emphasis>Surrogate
+     Diagnostics</emphasis> in Z39.50.
+   </para>
+   <para>
     Function <function>ZOOM_resultset_records</function> retrieves
     a number of records from a result set. Parameter <literal>start</literal>
     and <literal>count</literal> specifies the range of records to
@@ -711,6 +752,12 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
         <literal>const char *</literal>. 
        </para></listitem>
      </varlistentry>
+     <varlistentry><term><literal>schema</literal></term>
+      <listitem><para>The schema of the record is returned
+        as a C null-terminated string. Return type is
+        <literal>const char *</literal>. 
+       </para></listitem>
+     </varlistentry>
      <varlistentry><term><literal>render</literal></term>
       <listitem><para>The record is returned in a display friendly
         format. Upon completion buffer is returned
@@ -760,7 +807,8 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
      render; charset=marc8,iso-8859-1
     </screen>
    </para>
-   <sect2><title>Z39.50 Protocol behavior</title>
+   <sect2 id="zoom.z3950.record.behavior">
+    <title>Z39.50 Protocol behavior</title>
     <para>
      The functions <function>ZOOM_resultset_record</function> and
      <function>ZOOM_resultset_records</function> inspects the client-side
@@ -779,7 +827,8 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
      <emphasis>now</emphasis>.
     </para>
    </sect2>
-   <sect2><title>SRU Protocol behavior</title>
+   <sect2 id="zoom.sru.record.behavior">
+    <title>SRU Protocol behavior</title>
     <para>
      The ZOOM driver for SRU treats records returned by a SRU server
      as if they where Z39.50 records with transfer syntax XML and
@@ -796,14 +845,16 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
    </para>
 
    <para>
-    The Scan interface is Z39.50 only. SRW version 1.0 does not
-    support this.
+    The Scan interface is supported for both Z39.50 and SRU.
    </para>
 
    <synopsis>
     ZOOM_scanset ZOOM_connection_scan(ZOOM_connection c,
                                       const char *startpqf);
 
+    ZOOM_scanset ZOOM_connection_scan1(ZOOM_connection c,
+                                       ZOOM_query q);
+
     size_t ZOOM_scanset_size(ZOOM_scanset scan);
 
     const char * ZOOM_scanset_term(ZOOM_scanset scan, size_t pos,
@@ -859,8 +910,15 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
      @attr 1=4 @attr 6=2 "science o"
     </literallayout>
    </para>
+
+   <para>
+    The <function>ZOOM_connecton_scan1</function> is a newer and
+    more generic alternative to <function>ZOOM_connection_scan</function>
+    which allows to use both CQL and PQF for Scan.
+   </para>
    
-   <table frame="top"><title>ZOOM Scan Set Options</title>
+   <table frame="top" id="zoom.scanset.options">
+    <title>ZOOM Scan Set Options</title>
     <tgroup cols="3">
      <colspec colwidth="4*" colname="name"></colspec>
      <colspec colwidth="7*" colname="description"></colspec>
@@ -888,12 +946,19 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
         scanStatus</entry><entry>An integer indicating the Scan Status
         of last scan.
        </entry><entry>0</entry></row>
+      <row><entry>
+        rpnCharset</entry><entry>Character set for RPN terms.
+        If this is set, ZOOM C will assume that the ZOOM application is
+        running UTF-8. Terms in RPN queries are then converted to the
+        rpnCharset. If this is unset, ZOOM C will not assume any encoding
+        of RPN terms and no conversion is performed.
+       </entry><entry>none</entry></row>
      </tbody>
     </tgroup>
    </table>
   </sect1>
 
-  <sect1 id="zoom.ext"><title>Extended Services</title>
+  <sect1 id="zoom.extendedservices"><title>Extended Services</title>
    <para>
     ZOOM offers an interface to a subset of the Z39.50 extended services
     as well as a few privately defined ones:
@@ -902,35 +967,35 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     <listitem>
      <para>
       Z39.50 Item Order (ILL).
-      See <xref linkend="zoom.ext.itemorder"/>.
+      See <xref linkend="zoom.item.order"/>.
      </para>
     </listitem>
     <listitem>
      <para>
       Record Update. This allows a client to insert, modify or delete
       records.
-      See <xref linkend="zoom.ext.update"/>.
+      See <xref linkend="zoom.record.update"/>.
      </para>
     </listitem>
     <listitem>
      <para>
       Database Create. This a non-standard feature. Allows a client
       to create a database.
-      See <xref linkend="zoom.ext.dbcreate"/>.
+      See <xref linkend="zoom.database.create"/>.
      </para>
     </listitem>
     <listitem>
      <para>
       Database Drop. This a non-standard feature. Allows a client
       to delete/drop a database.
-      See <xref linkend="zoom.ext.dbdrop"/>.
+      See <xref linkend="zoom.database.drop"/>.
      </para>
      </listitem>
     <listitem>
      <para>
       Commit operation. This a non-standard feature. Allows a client
       to commit operations.
-      See <xref linkend="zoom.ext.commit"/>.
+      See <xref linkend="zoom.commit"/>.
      </para>
     </listitem>
     <!-- all the ILL PDU options should go here too -->
@@ -971,7 +1036,8 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     package type to be sent.
    </para>
 
-   <table frame="top"><title>Extended Service Common Options</title>
+   <table frame="top" id="zoom.extendedservices.options">
+    <title>Extended Service Common Options</title>
     <tgroup cols="3">
      <colspec colwidth="4*" colname="name"></colspec>
      <colspec colwidth="7*" colname="description"></colspec>
@@ -1005,10 +1071,19 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
        <entry><literal>create</literal></entry>
       </row>
       <row>
+       <entry>waitAction</entry>
+       <entry>
+       Wait action for package. Possible values:
+       <literal>wait</literal>, <literal>waitIfPossible</literal>,
+       <literal>dontWait</literal> or <literal>dontReturnPackage</literal>.
+       </entry>
+       <entry><literal>waitIfPossible</literal></entry>
+      </row>
+      <row>
        <entry>targetReference</entry>
        <entry>
        Target Reference. This is part of the response as returned
-       by the server. Read it after a succesful operation.
+       by the server. Read it after a successful operation.
        </entry>
        <entry><literal>none</literal></entry>
       </row>
@@ -1016,13 +1091,14 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     </tgroup>
    </table>
 
-   <sect2 id="zoom.ext.itemorder"><title>Item Order</title>
+   <sect2 id="zoom.item.order"><title>Item Order</title>
     <para>
      For Item Order, type must be set to <literal>itemorder</literal> in
      <function>ZOOM_package_send</function>.
     </para>
 
-    <table frame="top"><title>Item Order Options</title>
+    <table frame="top" id="zoom.item.order.options">
+     <title>Item Order Options</title>
      <tgroup cols="3">
       <colspec colwidth="4*" colname="name"></colspec>
       <colspec colwidth="7*" colname="description"></colspec>
@@ -1061,13 +1137,14 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
 
    </sect2>
 
-   <sect2 id="zoom.ext.update"><title>Record Update</title>
+   <sect2 id="zoom.record.update"><title>Record Update</title>
     <para>
      For Record Update, type must be set to <literal>update</literal> in
      <function>ZOOM_package_send</function>.
     </para>
 
-    <table frame="top"><title>Record Update Options</title>
+    <table frame="top" id="zoom.record.update.options">
+     <title>Record Update Options</title>
      <tgroup cols="3">
       <colspec colwidth="4*" colname="name"></colspec>
       <colspec colwidth="7*" colname="description"></colspec>
@@ -1090,7 +1167,7 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
         <literal>recordDelete</literal>,
         <literal>elementUpdate</literal>.
        </entry>
-       <entry><literal>specialUpdate</literal></entry>
+       <entry><literal>specialUpdate (recordInsert for updateVersion=1 which does not support specialUpdate)</literal></entry>
        </row>
        <row>
        <entry>recordIdOpaque</entry>
@@ -1119,19 +1196,49 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
        <entry>Database from connection object</entry>
        <entry>Default</entry>
        </row>
+       <row>
+       <entry>correlationInfo.note</entry>
+       <entry>Correlation Info Note (string)</entry>
+       <entry>none</entry>
+       </row>
+       <row>
+       <entry>correlationInfo.id</entry>
+       <entry>Correlation Info ID (integer)</entry>
+       <entry>none</entry>
+       </row>
+       <row>
+       <entry>elementSetName</entry>
+       <entry>Element Set for Record</entry>
+       <entry>none</entry>
+       </row>
+       <row>
+       <entry>updateVersion</entry>
+       <entry>Record Update version which holds one of the values
+        1, 2 or 3. Each version has a distinct OID:
+        1.2.840.10003.9.5
+        (<ulink url="&url.z39.50.extupdate1;">first version</ulink>) ,
+        1.2.840.10003.9.5.1 
+        (second version) and 
+        1.2.840.10003.9.5.1.1 
+        (<ulink url="&url.z39.50.extupdate3;">third and
+         newest version</ulink>).
+       </entry>
+       <entry>3</entry>
+       </row>
       </tbody>
      </tgroup>
     </table>
     
    </sect2>
 
-   <sect2 id="zoom.ext.dbcreate"><title>Database Create</title>
+   <sect2 id="zoom.database.create"><title>Database Create</title>
     <para>
      For Database Create, type must be set to <literal>create</literal> in
      <function>ZOOM_package_send</function>.
     </para>
     
-    <table frame="top"><title>Database Create Options</title>
+    <table frame="top" id="zoom.database.create.options">
+     <title>Database Create Options</title>
      <tgroup cols="3">
       <colspec colwidth="4*" colname="name"></colspec>
       <colspec colwidth="7*" colname="description"></colspec>
@@ -1154,13 +1261,14 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     </table>
    </sect2>
    
-   <sect2 id="zoom.ext.dbdrop"><title>Database Drop</title>
+   <sect2 id="zoom.database.drop"><title>Database Drop</title>
     <para>
      For Database Drop, type must be set to <literal>drop</literal> in
      <function>ZOOM_package_send</function>.
     </para>
     
-    <table frame="top"><title>Database Create Options</title>
+    <table frame="top" id="zoom.database.drop.options">
+     <title>Database Drop Options</title>
      <tgroup cols="3">
       <colspec colwidth="4*" colname="name"></colspec>
       <colspec colwidth="7*" colname="description"></colspec>
@@ -1183,14 +1291,15 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     </table>
    </sect2>
    
-   <sect2 id="zoom.ext.commit"><title>Commit Operation</title>
+   <sect2 id="zoom.commit"><title>Commit Operation</title>
     <para>
      For Commit, type must be set to <literal>commit</literal> in
      <function>ZOOM_package_send</function>.
     </para>
    </sect2>
 
-   <sect2><title>Protocol behavior</title>
+   <sect2 id="zoom.extended.services.behavior">
+    <title>Protocol behavior</title>
     <para>
      All the extended services are Z39.50-only.
     </para>
@@ -1269,7 +1378,8 @@ ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn)
     (integer) for the last event.
    </para>
 
-   <table frame="top"><title>ZOOM Event IDs</title>
+   <table frame="top" id="zoom.event.ids">
+    <title>ZOOM Event IDs</title>
     <tgroup cols="2">
      <colspec colwidth="4*" colname="name"></colspec>
      <colspec colwidth="7*" colname="description"></colspec>