Refer to full name of Apache products at first mention, as per ASF trademark guidelines.
[yaz-moved-to-github.git] / doc / book.xml
index e1988c2..6b4c3f3 100644 (file)
@@ -78,7 +78,7 @@
     <listitem>
      <para>
       Supports
-      <ulink url="&url.solr;">Solr</ulink> Web Service version 1.4.x
+      <ulink url="&url.solr;">Apache Solr</ulink> Web Service version 1.4.x
       (client side only)
      </para>
     </listitem>
    <title>Reading this Manual</title>
    <para>
     Most implementors only need to read a fraction of the
-    material in thie manual, so a quick walkthrough of the chapters
+    material in this manual, so a quick walkthrough of the chapters
     is in order.
    </para>
    <itemizedlist>
     <listitem>
      <para>
       <xref linkend="installation"/> contains installation
-      instructions for &yaz;. You don't need reading this
+      instructions for &yaz;. You don't need to read this
       if you expect to download &yaz; binaries.
       However, the chapter contains information about how
       to make <emphasis>your</emphasis> application link
     <listitem>
      <para>
       <xref linkend="zoom"/> describes the ZOOM API of &yaz;.
-      This is definitely worth a read if you wish to develop a Z39.50/SRU
+      This is definitely worth reading if you wish to develop a Z39.50/SRU
       client.
      </para>
     </listitem>
     <listitem>
      <para>
       <xref linkend="yaz-client"/> describes how to use the &yaz; Z39.50
-      client. If you're developer and wish to test your server
+      client. If you're a developer and wish to test your server
       or a server from another party, you might find this chapter
       useful.
     </para>
       <xref linkend="odr"/> goes through the details of the
       ODR module which is the work horse that encodes and decodes
       BER packages. Implementors using ZOOM only, do <emphasis>not</emphasis>
-      need reading this.
+      need to read this.
       Most other Z39.50 implementors only need to read the first two
       sections (<xref linkend="odr.introduction"/> and
       <xref linkend="odr.use"/>).
     level APIs of &yaz;.
    </para>
    <para>
-    The YAZ toolkit modules is shown in figure <xref linkend="yaz.layer"/>.
+    The YAZ toolkit modules are shown in figure <xref linkend="yaz.layer"/>.
    </para>
    <figure id="yaz.layer">
     <title>YAZ layers</title>
    <note>
     <para>
      If you are using the premade definitions of the &asn; module, and you
-     are not adding new protocol of your own, the only parts of &odr; that you
+     are not adding a new protocol of your own, the only parts of &odr; that you
      need to worry about are documented in
      <xref linkend="odr.use"/>.
     </para>
      <ulink url="&url.automake;">Automake</ulink> and
      <ulink url="&url.libtool;">Libtool</ulink>
      are used to generate Makefiles and configure &yaz; for the system.
-     You do <emphasis>not</emphasis> these tools unless you're using the
+     You do <emphasis>not</emphasis> need these tools unless you're using the
      Git version of &yaz;.
     </para>
     <para>
      &yaz; includes a tiny ASN.1 compiler. This compiler is
      written in <ulink url="&url.tcl;">Tcl</ulink>.
      But as for Bison you do not need it unless you're using Git
-     version of &yaz; or you're using the compiler to built own codecs
+     version of &yaz; or you're using the compiler to build your own codecs
      for private ASN.1.
     </para>
     <para>
        <replaceable>prefix</replaceable>. By default configure will
        search for iconv on the system. Use this option if it
        doesn't find iconv. Alternatively,
-       <literal>--without-iconv</literal>, can be uset to force &yaz;
+       <literal>--without-iconv</literal>, can be used to force &yaz;
        not to use iconv.
        </para>
        </listitem>
        <replaceable>prefix</replaceable>.
        Use this option if you want XSLT and XML support.
        By default, configure will
-       search for libxslt on the system. Use this option if it
+       search for libxslt on the system. Use this option if
        libxslt is not found automatically. Alternatively,
        <literal>--without-xslt</literal>, can be used to force &yaz;
        not to use libxslt.
        <replaceable>prefix</replaceable>.
        Use this option if you want &yaz; to use XML and support SRU/Solr.
        By default, configure will
-       search for libxml2 on the system. Use this option if it
+       search for libxml2 on the system. Use this option if
        libxml2 is not found automatically. Alternatively,
        <literal>--without-xml2</literal>, can be used to force &yaz;
        not to use libxml2.
      This section describes how to compile - and link your own
      applications using the &yaz; toolkit.
      If you're used to Makefiles this shouldn't be hard. As for
-     other libraries you have used before, you have to set a proper include
+     other libraries you have used before, you need to set a proper include
      path for your C/C++ compiler and specify the location of
      &yaz; libraries. You can do it by hand, but generally we suggest
      you use the <filename>yaz-config</filename> that is generated
    </sect2>
   </sect1>
   <sect1 id="installation.win32">
-   <title>WIN32</title>
+   <title>Windows</title>
    <para>The easiest way to install YAZ on Windows is by downloading
    an installer from
    <ulink url="&url.yaz.download.win32;">here</ulink>.
    </para>
 
    <sect2 id="installation.win32.source">
-    <title>Compiling from Source on WIN32</title>
+    <title>Compiling from Source on Windows</title>
     <para>
      &yaz; is shipped with "makefiles" for the NMAKE tool that comes
      with <ulink url="&url.vstudio;">
      Microsoft Visual Studio</ulink>. It has been tested with
-     Microsoft Visual Studio 2003/2005/2008.
+     Microsoft Visual Studio 2013.
     </para>
     <para>
      Start a command prompt and switch the sub directory
          If <literal>HAVE_LIBXML2</literal> is set to 1, YAZ is compiled
          with SRU support. In this configuration, set
          <literal>LIBXML2_DIR</literal> to the
-         <ulink url="&url.libxml2;">libxml2</ulink> source directory
-        and
-        <literal>ZLIB_DIR</literal> to the zlib directory.
-        </para>
-        <para>
-         Windows versions of libxslt, libxml2, zlib and iconv can be found
-        <ulink url="&url.libxml2.download.win32;">
-         Igor Zlatkovi&#x0107;' site</ulink>.
-        </para>
-       <note>
-        <para>
-         YAZ is not using zlib but libxml2 is depending on it.
-        </para>
-       </note>
+         <ulink url="&url.libxml2;">libxml2</ulink> source directory.
+       </para>
+       <para>
+        You can get pre-compiled Libxml2+Libxslt DLLs and headers from
+        <ulink url="&url.libxml2.download.windows;">here</ulink>.
+        Should you with to compile those libraries yourself, refer to
+        to <xref linkend="installation.windows.libxml2"/>
+       </para>
        </listitem>
       </varlistentry>
       <varlistentry>
         </para>
        <note>
         <para>
-         libxslt depends libxml2.
+         libxslt depends on libxml2.
         </para>
        </note>
        </listitem>
        <term><filename>bin/yaz-icu.exe</filename></term>
        <listitem><para>This program exposes the ICU wrapper library if that
        is enabled for YAZ. Only if ICU is available this program is
-       build.
+       built.
       </para></listitem>
       </varlistentry>
       <varlistentry>
        <term><filename>bin/zoomtst1.exe</filename>,
        <filename>bin/zoomtst2.exe</filename>, ..</term>
        <listitem><para>
-       Several small applications that demonstrates the ZOOM API.
+       Several small applications that demonstrate the ZOOM API.
       </para></listitem>
       </varlistentry>
      </variablelist>
    </sect2>
 
    <sect2 id="installation-linking-yaz-win32">
-    <title>How to make apps using YAZ on WIN32</title>
+    <title>How to make apps using YAZ on Windows</title>
     <para>
-     This section will go though the process of linking your WIN32
+     This section will go though the process of linking your Windows
      applications with &yaz;.
     </para>
     <para>
      Some people are confused by the fact that we use the nmake
      tool to build &yaz;. They think they have to do that too - in order
-     to make their WIN32 applications work with &yaz;. The good news is that
+     to make their Windows applications work with &yaz;. The good news is that
      you don't have to. You can use the integrated environment of
      Visual Studio if desired for your own application.
     </para>
      </variablelist>
     </para>
    </sect2>
+
+   <sect2 id="installation.windows.libxml2">
+    <title>Compiling Libxml2 and Libxslt on windows</title>
+    <para>
+     Download libxml2 and Libxslt source and unpack it.
+     In the example below we install  Libxml2 2.9.2 and Libxslt 1.1.28
+     for 32-bit, so we  use the destination directories
+     libxml2.2.9.2.win32 and libxslt-1.1.28.win32 to reflect both
+     version and architecture.
+     <screen>
+      cd win32
+      cscript configure.js prefix=c:\libxml2-2.9.2.win32 iconv=no
+      nmake
+      nmake install
+     </screen>
+    </para>
+    <note>
+     <para>
+      There's an error in <filename>configure.js</filename> for Libxml2 2.9.2.
+      Line 17 should be assigned to <filename>configure.ac</filename>
+      rather than <filename>configure.in</filename>.
+     </para>
+    </note>
+    <para>
+     For Libxslt it is similar. We must ensure that compilation of
+     Libxslt links against the already installed libxml2.
+     <screen>
+      cd win32
+      cscript configure.js prefix=c:\libxslt-1.1.28.win32 iconv=no \
+          lib=c:\libxml2-2.9.2.win32\lib \
+         include=c:\libxml2-2.9.2.win32\include\libxml2
+      nmake
+      nmake install
+     </screen>
+    </para>
+   </sect2>
+
   </sect1>
  </chapter>
  <!--
        first operation), holds the negotiated version with the server
        (same or lower version).
       </entry><entry>1.2</entry></row>
+      <row id="zoom.extraArgs.option"><entry>
+       extraArgs</entry><entry>
+       Extra arguments for SRU/Solr URLs. The value must be
+       URL encoded already.
+      </entry><entry></entry></row>
       <row id="zoom.facets.option"><entry>
        facets</entry><entry>
        Requested or recommend facets may be given before a search is sent.
     The <parameter>type</parameter> is a string of the format:
    </para>
    <para>
-    <replaceable>format</replaceable>[;charset=<replaceable>from</replaceable>[/<replaceable>opacfrom</replaceable>][,<replaceable>to</replaceable>]][;format=<replaceable>v</replaceable>]
+    <replaceable>format</replaceable>[;charset=<replaceable>from</replaceable>[/<replaceable>opacfrom</replaceable>][,<replaceable>to</replaceable>]][;format=<replaceable>v</replaceable>][;base64=<replaceable>xpath</replaceable>]
    </para>
    <para>
-    where <replaceable>format</replaceable> specifies the format of the
-    returned record, <replaceable>from</replaceable>
+    If <literal>charset</literal> is given, then <replaceable>from</replaceable>
     specifies the character set of the record in its original form
     (as returned by the server), <replaceable>to</replaceable> specifies
-    the output (returned)
-    character set encoding.
-    If <replaceable>to</replaceable> is omitted UTF-8 is assumed.
+    the output (returned) character set encoding.
+    If <replaceable>to</replaceable> is omitted, then UTF-8 is assumed.
     If charset is not given, then no character set conversion takes place.
-   </para>
-
-   <para>OPAC records may be returned in a different
-     set from the bibliographic MARC record. If this is this the case,
+    OPAC records may be returned in a different
+    set from the bibliographic MARC record. If this is this the case,
     <replaceable>opacfrom</replaceable> should be set to the character set
     of the OPAC record part.
    </para>
+
+   <para>
+    The <literal>format</literal> is generic but can only be used to
+    specify XML indentation when the value <replaceable>v</replaceable>
+    is 1 (<literal>format=1</literal>).
+   </para>
+   <para>
+    The <literal>base64</literal> allows a full record to be extracted
+    from base64-encoded string in an XML document.
+   </para>
    <note>
      <para>
        Specifying the OPAC record character set requires YAZ 4.1.5 or later.
      </para>
+     <para>
+       Specifying the base64 parameter requires YAZ 4.2.35 or later.
+     </para>
    </note>
    <para>
     The format argument controls whether record data should be XML
     The <parameter>type</parameter> specifies the actual extended service
     package type to be sent.
    </para>
+   <table frame="top" id="zoom.extendedservices.type">
+    <title>Extended Service Type</title>
+    <tgroup cols="2">
+     <colspec colwidth="3*" colname="value"></colspec>
+     <colspec colwidth="7*" colname="description"></colspec>
+     <thead>
+      <row>
+       <entry>Type</entry>
+       <entry>Description</entry>
+      </row>
+     </thead>
+     <tbody>
+      <row>
+       <entry>itemorder</entry><entry>Item Order</entry>
+      </row>
+      <row>
+       <entry>update</entry><entry>Record Update</entry>
+      </row>
+      <row>
+       <entry>create</entry><entry>Database Create</entry>
+      </row>
+      <row>
+       <entry>drop</entry><entry>Database Drop</entry>
+      </row>
+      <row>
+       <entry>commit</entry><entry>Commit Operation</entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+
    <table frame="top" id="zoom.extendedservices.options">
     <title>Extended Service Common Options</title>
     <tgroup cols="3">
    <sect2 id="zoom.item.order">
     <title>Item Order</title>
     <para>
-     For Item Order, type must be set to <literal>itemorder</literal> in
+     For Item Order, <literal>type</literal> must be set to
+     <literal>itemorder</literal> in
      <function>ZOOM_package_send</function>.
     </para>
 
        <entry>none</entry>
        </row>
        <row>
+       <entry>itemorder-setname</entry>
+       <entry>Name of result set for record</entry>
+       <entry>default</entry>
+       </row>
+       <row>
        <entry>itemorder-item</entry>
        <entry>Position for item (record) requested. An integer</entry>
        <entry>1</entry>
       </tbody>
      </tgroup>
     </table>
+    <para>
+     There are two variants of item order: ILL-variant and
+     XML document variant. In order to use the XML variant the setting
+     <literal>doc</literal> must hold the XML item order document. If that
+     setting is unset, the ILL-variant is used.
+    </para>
+
+    <table frame="top" id="zoom.illrequest.options">
+     <title>ILL Request Options</title>
+     <tgroup cols="1">
+      <colspec colwidth="4*" colname="name"></colspec>
+      <thead>
+       <row>
+       <entry>Option</entry>
+       </row>
+      </thead>
+      <tbody>
+       <row><entry>protocol-version-num</entry></row>
+       <row><entry>transaction-id,initial-requester-id,person-or-institution-symbol,person</entry></row>
+       <row><entry>transaction-id,initial-requester-id,person-or-institution-symbol,institution</entry></row>
+       <row><entry>transaction-id,initial-requester-id,name-of-person-or-institution,name-of-person</entry></row>
+       <row><entry>transaction-id,initial-requester-id,name-of-person-or-institution,name-of-institution</entry></row>
+       <row><entry>transaction-id,transaction-group-qualifier</entry></row>
+       <row><entry>transaction-id,transaction-qualifier</entry></row>
+       <row><entry>transaction-id,sub-transaction-qualifier</entry></row>
+       <row><entry>service-date-time,this,date</entry></row>
+       <row><entry>service-date-time,this,time</entry></row>
+       <row><entry>service-date-time,original,date</entry></row>
+       <row><entry>service-date-time,original,time</entry></row>
+       <row><entry>requester-id,person-or-institution-symbol,person</entry></row>
+       <row><entry>requester-id,person-or-institution-symbol,institution</entry></row>
+       <row><entry>requester-id,name-of-person-or-institution,name-of-person</entry></row>
+       <row><entry>requester-id,name-of-person-or-institution,name-of-institution</entry></row>
+       <row><entry>responder-id,person-or-institution-symbol,person</entry></row>
+       <row><entry>responder-id,person-or-institution-symbol,institution</entry></row>
+       <row><entry>responder-id,name-of-person-or-institution,name-of-person</entry></row>
+       <row><entry>responder-id,name-of-person-or-institution,name-of-institution</entry></row>
+       <row><entry>transaction-type</entry></row>
+       <row><entry>delivery-address,postal-address,name-of-person-or-institution,name-of-person</entry></row>
+       <row><entry>delivery-address,postal-address,name-of-person-or-institution,name-of-institution</entry></row>
+       <row><entry>delivery-address,postal-address,extended-postal-delivery-address</entry></row>
+       <row><entry>delivery-address,postal-address,street-and-number</entry></row>
+       <row><entry>delivery-address,postal-address,post-office-box</entry></row>
+       <row><entry>delivery-address,postal-address,city</entry></row>
+       <row><entry>delivery-address,postal-address,region</entry></row>
+       <row><entry>delivery-address,postal-address,country</entry></row>
+       <row><entry>delivery-address,postal-address,postal-code</entry></row>
+       <row><entry>delivery-address,electronic-address,telecom-service-identifier</entry></row>
+       <row><entry>delivery-address,electronic-address,telecom-service-addreess</entry></row>
+       <row><entry>billing-address,postal-address,name-of-person-or-institution,name-of-person</entry></row>
+       <row><entry>billing-address,postal-address,name-of-person-or-institution,name-of-institution</entry></row>
+       <row><entry>billing-address,postal-address,extended-postal-delivery-address</entry></row>
+       <row><entry>billing-address,postal-address,street-and-number</entry></row>
+       <row><entry>billing-address,postal-address,post-office-box</entry></row>
+       <row><entry>billing-address,postal-address,city</entry></row>
+       <row><entry>billing-address,postal-address,region</entry></row>
+       <row><entry>billing-address,postal-address,country</entry></row>
+       <row><entry>billing-address,postal-address,postal-code</entry></row>
+       <row><entry>billing-address,electronic-address,telecom-service-identifier</entry></row>
+       <row><entry>billing-address,electronic-address,telecom-service-addreess</entry></row>
+       <row><entry>ill-service-type</entry></row>
+       <row><entry>requester-optional-messages,can-send-RECEIVED</entry></row>
+       <row><entry>requester-optional-messages,can-send-RETURNED</entry></row>
+       <row><entry>requester-optional-messages,requester-SHIPPED</entry></row>
+       <row><entry>requester-optional-messages,requester-CHECKED-IN</entry></row>
+       <row><entry>search-type,level-of-service</entry></row>
+       <row><entry>search-type,need-before-date</entry></row>
+       <row><entry>search-type,expiry-date</entry></row>
+       <row><entry>search-type,expiry-flag</entry></row>
+       <row><entry>place-on-hold</entry></row>
+       <row><entry>client-id,client-name</entry></row>
+       <row><entry>client-id,client-status</entry></row>
+       <row><entry>client-id,client-identifier</entry></row>
+       <row><entry>item-id,item-type</entry></row>
+       <row><entry>item-id,call-number</entry></row>
+       <row><entry>item-id,author</entry></row>
+       <row><entry>item-id,title</entry></row>
+       <row><entry>item-id,sub-title</entry></row>
+       <row><entry>item-id,sponsoring-body</entry></row>
+       <row><entry>item-id,place-of-publication</entry></row>
+       <row><entry>item-id,publisher</entry></row>
+       <row><entry>item-id,series-title-number</entry></row>
+       <row><entry>item-id,volume-issue</entry></row>
+       <row><entry>item-id,edition</entry></row>
+       <row><entry>item-id,publication-date</entry></row>
+       <row><entry>item-id,publication-date-of-component</entry></row>
+       <row><entry>item-id,author-of-article</entry></row>
+       <row><entry>item-id,title-of-article</entry></row>
+       <row><entry>item-id,pagination</entry></row>
+       <row><entry>item-id,ISBN</entry></row>
+       <row><entry>item-id,ISSN</entry></row>
+       <row><entry>item-id,additional-no-letters</entry></row>
+       <row><entry>item-id,verification-reference-source</entry></row>
+       <row><entry>copyright-complicance</entry></row>
+       <row><entry>retry-flag</entry></row>
+       <row><entry>forward-flag</entry></row>
+       <row><entry>requester-note</entry></row>
+       <row><entry>forward-note</entry></row>
+      </tbody>
+     </tgroup>
+    </table>
    </sect2>
    <sect2 id="zoom.record.update">
     <title>Record Update</title>
     <para>
-     For Record Update, type must be set to <literal>update</literal> in
+     For Record Update, <literal>type</literal> must be set to
+     <literal>update</literal> in
      <function>ZOOM_package_send</function>.
     </para>
     <table frame="top" id="zoom.record.update.options">
 
    <sect2 id="zoom.database.create"><title>Database Create</title>
     <para>
-     For Database Create, type must be set to <literal>create</literal> in
+     For Database Create, <literal>type</literal> must be set to
+     <literal>create</literal> in
      <function>ZOOM_package_send</function>.
     </para>
 
    <sect2 id="zoom.database.drop">
     <title>Database Drop</title>
     <para>
-     For Database Drop, type must be set to <literal>drop</literal> in
+     For Database Drop, <literal>type</literal> must be set to
+     <literal>drop</literal> in
      <function>ZOOM_package_send</function>.
     </para>
     <table frame="top" id="zoom.database.drop.options">
    <sect2 id="zoom.commit">
     <title>Commit Operation</title>
     <para>
-     For Commit, type must be set to <literal>commit</literal> in
+     For Commit, <literal>type</literal> must be set to
+     <literal>commit</literal> in
      <function>ZOOM_package_send</function>.
     </para>
    </sect2>
@@ -5697,6 +5884,12 @@ typedef struct {
           in YAZ 4.2.38.
          </entry>
          </row>
+         <row><entry><literal>s=sl</literal></entry>
+         <entry>
+           Tokens are split into sub-phrases of all combinations - in order.
+          This facility appeared in YAZ 5.14.0.
+         </entry>
+         </row>
          <row><entry><literal>r=o</literal></entry>
          <entry>
           Allows ranges and the operators greather-than, less-than, ...
@@ -7360,21 +7553,25 @@ int cql_transform_rpn2cql_wrbuf(cql_transform_t ct,
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term><literal>xslt</literal></term>
+       <term><literal>select</literal></term>
        <listitem>
         <para>
-         The <literal>xslt</literal> element specifies a conversion
-         via &acro.xslt;. The following attributes may be specified:
+         The <literal>select</literal> selects one or more text nodes
+        and decodes them as XML.
+        The following attributes may be specified:
          <variablelist>
-          <varlistentry><term><literal>stylesheet</literal> (REQUIRED)</term>
+          <varlistentry><term><literal>path</literal> (REQUIRED)</term>
            <listitem>
             <para>
-             Stylesheet file.
+             X-Path expression for selecting text nodes.
             </para>
            </listitem>
           </varlistentry>
          </variablelist>
         </para>
+        <para>
+         This conversion is available in YAZ 5.8.0 and later.
+        </para>
        </listitem>
       </varlistentry>
       <varlistentry>
@@ -7392,6 +7589,24 @@ int cql_transform_rpn2cql_wrbuf(cql_transform_t ct,
         </para>
        </listitem>
       </varlistentry>
+      <varlistentry>
+       <term><literal>xslt</literal></term>
+       <listitem>
+        <para>
+         The <literal>xslt</literal> element specifies a conversion
+         via &acro.xslt;. The following attributes may be specified:
+         <variablelist>
+          <varlistentry><term><literal>stylesheet</literal> (REQUIRED)</term>
+           <listitem>
+            <para>
+             Stylesheet file.
+            </para>
+           </listitem>
+          </varlistentry>
+         </variablelist>
+        </para>
+       </listitem>
+      </varlistentry>
      </variablelist>
     </para>
    </sect2>