Mention VS 2013 only
[metaproxy-moved-to-github.git] / doc / book.xml
index c40160a..86c2886 100644 (file)
@@ -1,25 +1,16 @@
 <?xml version="1.0" standalone="no"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1//EN"
-    "http://www.oasis-open.org/docbook/xml/4.1/docbookx.dtd" 
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+    "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
 [
+     <!ENTITY copyright SYSTEM "copyright.xml">
      <!ENTITY % local SYSTEM "local.ent">
      %local;
      <!ENTITY manref SYSTEM "manref.xml">
-     <!ENTITY progref SYSTEM "progref.xml">
+     <!ENTITY gpl2 SYSTEM "gpl-2.0.xml">
      <!ENTITY % idcommon SYSTEM "common/common.ent">
      %idcommon;
-     <!-- Next line allows imagedata/@format="PDF" and is taken from 
-         http://lists.oasis-open.org/archives/docbook/200303/msg00163.html
-     -->
-     <!ENTITY % local.notation.class "| PDF">
-     <!-- Next line is necessary for some XML parsers, for reasons I
-          don't understand.  I got this from
-         http://lists.oasis-open.org/archives/docbook/200303/msg00180.html
-     -->
-     <!NOTATION PDF SYSTEM "PDF">
 ]>
-<!-- $Id: book.xml,v 1.63 2008-02-27 11:08:49 adam Exp $ -->
-<book id="metaproxy">
+<book>
  <bookinfo>
   <title>Metaproxy - User's Guide and Reference</title>
   <authorgroup>
@@ -35,8 +26,8 @@
   </authorgroup>
   <releaseinfo>&version;</releaseinfo>
   <copyright>
-   <year>2005-2007</year>
-   <holder>Index Data ApS</holder>
+   <year>2005-2014</year>
+   <holder>Index Data</holder>
   </copyright>
   <abstract>
    <simpara>
     processes, interprets and redirects requests from IR clients using
     standard protocols such as the binary
     <ulink url="&url.z39.50;">ANSI/NISO Z39.50</ulink>
-    and  the information search and retrieval 
+    and  the information search and retrieval
     web service <ulink url="&url.sru;">SRU</ulink>
     as well as functioning as a limited
-    <ulink url="&url.http;">HTTP</ulink> server. 
+    <ulink url="&url.http;">HTTP</ulink> server.
    </simpara>
    <simpara>
     Metaproxy is configured by an XML file which
@@ -81,7 +72,7 @@
 
  <chapter id="introduction">
   <title>Introduction</title>
-  
+
   <para>
    <ulink url="&url.metaproxy;">Metaproxy</ulink>
    is a stand alone program that acts as a universal router, proxy and
@@ -89,7 +80,7 @@
    as <ulink url="&url.z39.50;">Z39.50</ulink> and
    <ulink url="&url.sru;">SRU</ulink>.
    To clients, it acts as a server of these protocols: it can be searched,
-   records can be retrieved from it, etc. 
+   records can be retrieved from it, etc.
    To servers, it acts as a client: it searches in them,
    retrieves records from them, etc.  it satisfies its clients'
    requests by transforming them, multiplexing them, forwarding them
    including examples.
   </para>
  </chapter>
+
  <chapter id="installation">
   <title>Installation</title>
   <para>
     </varlistentry>
     <varlistentry><term><ulink url="&url.libxslt;">Libxslt</ulink></term>
      <listitem>
-      <para>This is an XSLT processor - based on 
+      <para>This is an XSLT processor - based on
        <ulink url="&url.libxml2;">Libxml2</ulink>. Both Libxml2 and
        Libxslt must be installed with the development components
        (header files, etc.) as well as the run-time libraries.
       <para>
        The popular C++ library. Initial versions of Metaproxy
        was built with 1.32 but this is no longer supported.
-       Metaproxy is known to work with Boost version 1.33 / 1.34.
+       Metaproxy is known to work with Boost version 1.33 through 1.55.
       </para>
      </listitem>
     </varlistentry>
   </para>
   <para>
    We have successfully built Metaproxy using the compilers
-   <ulink url="&url.gcc;">GCC</ulink> version 4.0 and
-   <ulink url="&url.vstudio;">Microsoft Visual Studio</ulink> 2003/2005.
+   <ulink url="&url.gcc;">GCC</ulink> and
+   <ulink url="&url.vstudio;">Microsoft Visual Studio</ulink>.
   </para>
 
+  <para>
+   As an option, Metaproxy may also be compiled with
+   <ulink url="&url.usemarcon;">USEMARCON</ulink> support which allows for
+   MARC conversions for the <xref linkend="ref-record_transform"/> filter.
+  </para>
   <section id="installation.unix">
    <title>Installation on Unix (from Source)</title>
    <para>
     tools binary packages. If, for example, Libxml2/libxslt are already
     installed as development packages use those (and omit compilation).
    </para>
-   
-   <para>
-    Libxml2/libxslt:
-   </para>
-   <screen>
-    gunzip -c libxml2-version.tar.gz|tar xf -
-    cd libxml2-version
-    ./configure
-    make
-    su
-    make install
-   </screen>
-   <screen>
-    gunzip -c libxslt-version.tar.gz|tar xf -
-    cd libxslt-version
-    ./configure
-    make
-    su
-    make install
-   </screen>
-   <para>
-    YAZ/YAZ++:
-   </para>
-   <screen>
-    gunzip -c yaz-version.tar.gz|tar xf -
-    cd yaz-version
-    ./configure
-    make
-    su
-    make install
-   </screen>
-   <screen>
-    gunzip -c yazpp-version.tar.gz|tar xf -
-    cd yazpp-version
-    ./configure
-    make
-    su
-    make install
-   </screen>
-   <para>
-    Boost:
-   </para>
-   <screen>
-    gunzip -c boost-version.tar.gz|tar xf -
-    cd boost-version
-    ./configure
-    make
-    su
-    make install
-   </screen>
-   <para>
-    Metaproxy:
-   </para>
-   <screen>
-    gunzip -c metaproxy-version.tar.gz|tar xf -
-    cd metaproxy-version
-    ./configure
-    make
-    su
-    make install
-   </screen>
+
+   <note>
+    <para>
+     <ulink url="&url.usemarcon;">USEMARCON</ulink> is not available
+     as a package at the moment, so Metaproxy must be built from source
+     if that is to be used.
+    </para>
+   </note>
+
+   <section id="libxml2.fromsource">
+    <title>Libxml2/libxslt</title>
+    <para>
+     Libxml2/libxslt:
+    </para>
+    <screen>
+     gunzip -c libxml2-version.tar.gz|tar xf -
+     cd libxml2-version
+     ./configure
+     make
+     su
+     make install
+    </screen>
+    <screen>
+     gunzip -c libxslt-version.tar.gz|tar xf -
+     cd libxslt-version
+     ./configure
+     make
+     su
+     make install
+    </screen>
+   </section>
+   <section id="usemarcon">
+    <title>USEMARCON (optional)</title>
+    <screen>
+     gunzip -c usemarcon317.tar.gz|tar xf -
+     cd usemarcon317
+     ./configure
+     make
+     su
+     make install
+    </screen>
+   </section>
+
+   <section id="yaz.fromsource">
+    <title>YAZ/YAZ++</title>
+    <screen>
+     gunzip -c yaz-version.tar.gz|tar xf -
+     cd yaz-version
+     ./configure
+     make
+     su
+     make install
+    </screen>
+    <screen>
+     gunzip -c yazpp-version.tar.gz|tar xf -
+     cd yazpp-version
+     ./configure
+     make
+     su
+     make install
+    </screen>
+   </section>
+   <section>
+    <title id="boost.fromsource">Boost</title>
+    <para>
+     Metaproxy needs components thread and test from
+     Boost.
+    </para>
+    <screen>
+     gunzip -c boost-version.tar.gz|tar xf -
+     cd boost-version
+     ./configure --with-libraries=thread,test,regex --with-toolset=gcc
+     make
+     su
+     make install
+    </screen>
+    <para>
+     However, under the hood bjam is used. You can invoke that with
+    </para>
+    <screen>
+     ./bjam --toolset=gcc --with-thread --with-test --with-regex stage
+    </screen>
+    <para>
+     Replace <literal>stage</literal> with <literal>clean</literal> /
+     <literal>install</literal> to perform clean and install respectively.
+    </para>
+    <para>
+     Add <literal>--prefix=DIR</literal> to install Boost in other
+     prefix than <literal>/usr/local</literal>.
+    </para>
+   </section>
+   <section id="metaproxy.fromsource">
+    <title>Metaproxy</title>
+    <screen>
+     gunzip -c metaproxy-version.tar.gz|tar xf -
+     cd metaproxy-version
+     ./configure
+     make
+     su
+     make install
+    </screen>
+    <para>
+     You may have to tell configure where Boost is installed by supplying
+     options <literal>--with-boost</literal> and <literal>--with-boost-toolset</literal>.
+     The former sets the PREFIX for Boost (same as --prefix for Boost above).
+     The latter the compiler toolset (eg. gcc34).
+    </para>
+    <para>
+     Pass <literal>--help</literal> to configure to get a list of
+     available options.
+    </para>
+   </section>
   </section>
 
   <section id="installation.debian">
    <title>Installation on Debian GNU/Linux</title>
    <para>
-    All dependencies for Metaproxy are available as 
-    <ulink url="&url.debian;">Debian</ulink>
-    packages for the sarge (stable in 2005) and etch (testing in 2005)
-    distributions.
+    All dependencies for Metaproxy are available as
+    <ulink url="&url.debian;">Debian</ulink> packages.
    </para>
    <para>
     The procedures for Debian based systems, such as
    <para>
     There is currently no official Debian package for YAZ++.
     And the official Debian package for YAZ is probably too old.
-    But Index Data bulds "new" versions of those for Debian (i386 only).
+    But Index Data builds "new" versions of those for Debian (i386, amd64 only).
    </para>
    <para>
     Update the <filename>/etc/apt/sources.list</filename>
    </para>
    <screen>
     apt-get install libxslt1-dev
-    apt-get install libyazpp2-dev
+    apt-get install libyazpp6-dev
     apt-get install libboost-dev
+    apt-get install libboost-system-dev
     apt-get install libboost-thread-dev
     apt-get install libboost-test-dev
+    apt-get install libboost-regex-dev
    </screen>
    <para>
     With these packages installed, the usual configure + make
   <section id="installation.rpm">
    <title>Installation on RPM based Linux Systems</title>
    <para>
-    All external dependencies for Metaproxy are available as 
-    RPM packages, either from your distribution site, or from the 
+    All external dependencies for Metaproxy are available as
+    RPM packages, either from your distribution site, or from the
     <ulink url="http://fr.rpmfind.net/">RPMfind</ulink> site.
    </para>
    <para>
-    For example, an installation of the requires Boost C++ development 
+    For example, an installation of the requires Boost C++ development
     libraries on RedHat Fedora C4 and C5 can be done like this:
-    <screen> 
+    <screen>
     wget ftp://fr.rpmfind.net/wlinux/fedora/core/updates/testing/4/SRPMS/boost-1.33.0-3.fc4.src.rpm
     sudo rpmbuild --buildroot src/ --rebuild -p fc4/boost-1.33.0-3.fc4.src.rpm
     sudo rpm -U /usr/src/redhat/RPMS/i386/boost-*rpm
    </para>
    <para>
     There is currently no official RPM package for YAZ++.
-    See the <ulink url="&url.yazplusplus;">YAZ++</ulink> pages 
+    See the <ulink url="&url.yazplusplus;">YAZ++</ulink> pages
     for more information on a Unix tarball install.
    </para>
    <para>
   <section id="installation.windows">
    <title>Installation on Windows</title>
    <para>
-    Metaproxy can be compiled with Microsoft
+    Metaproxy has been tested Microsoft
     <ulink url="&url.vstudio;">Visual Studio</ulink>.
-    Version 2003 (C 7.1) and 2005 (C 8.0) is known to work.
+    2013 (C 12.0).
    </para>
    <section id="installation.windows.boost">
     <title>Boost</title>
     <para>
      <ulink url="&url.libxslt;">Libxslt</ulink> can be downloaded
      for Windows from
-     <ulink url="&url.libxml2.download.win32;">here</ulink>.
+     <ulink url="&url.libxml2.download.windows;">here</ulink>.
     </para>
     <para>
-     Libxslt has other dependencies, but these can all be downloaded
-     from the same site. Get the following package:
-     iconv, zlib, libxml2, libxslt.
+     Libxslt also requires libxml2 to operate.
     </para>
    </section>
 
     <title>YAZ++</title>
     <para>
      Get <ulink url="&url.yazplusplus;">YAZ++</ulink> as well.
-     Version 1.0.3 or later is required.
+     Version 1.6.0 or later is required.
     </para>
     <para>
      YAZ++ includes NMAKE makefiles, similar to those found in the
        </para>
       </listitem>
      </varlistentry>
-      
+
     </variablelist>
-    
+
     <para>
      After successful compilation you'll find
      <literal>metaproxy.exe</literal> in the
 
   </section>
  </chapter>
+
 <chapter id="yazproxy-comparison">
  <title>YAZ Proxy Comparison</title>
  <para>
   <tbody>
    <row>
     <entry>Z39.50 server</entry>
-    <entry>Using filter <literal>frontend_net</literal></entry>
+    <entry>Using filter <xref linkend="ref-frontend_net"/></entry>
     <entry>Supported</entry>
    </row>
    <row>
     <entry>SRU server</entry>
-    <entry>Supported with filter <literal>sru_z3950</literal></entry>
+    <entry>Supported with filter <xref linkend="ref-sru_z3950"/></entry>
     <entry>Supported</entry>
    </row>
    <row>
     <entry>Z39.50 client</entry>
-    <entry>Supported with filter <literal>z3950_client</literal></entry>
+    <entry>Supported with filter <xref linkend="ref-z3950_client"/></entry>
     <entry>Supported</entry>
    </row>
    <row>
     <entry>SRU client</entry>
-    <entry>Unsupported</entry>
+    <entry>Supported with filter <xref linkend="ref-zoom"/></entry>
     <entry>Unsupported</entry>
    </row>
    <row>
    </row>
    <row>
     <entry>Record cache</entry>
-    <entry>Unsupported</entry>
+    <entry>Supported by filter <literal>session_shared</literal></entry>
     <entry>Supported for last result set within one Z39.50/HTTP-keep alive session</entry>
    </row>
    <row>
    </row>
    <row>
     <entry>SRU Virtual database, i.e. select any Z39.50 target for path</entry>
-    <entry>Supported with filter <literal>virt_db</literal>, 
+    <entry>Supported with filter <literal>virt_db</literal>,
      <literal>sru_z3950</literal></entry>
     <entry>Supported</entry>
    </row>
    </row>
    <row>
     <entry>Retrieval and search limits</entry>
-    <entry>Unsupported</entry>
+    <entry>Supported using filter <literal>limit</literal></entry>
     <entry>Supported</entry>
    </row>
    <row>
     <entry>Bandwidth limits</entry>
-    <entry>Unsupported</entry>
+    <entry>Supported using filter <literal>limit</literal></entry>
     <entry>Supported</entry>
    </row>
    <row>
     <entry>Connect limits</entry>
-    <entry>Unsupported</entry>
+    <entry>Supported by filter <literal>frontend_net</literal> (connect-max)</entry>
     <entry>Supported</entry>
    </row>
    <row>
    <row>
     <entry>Query check</entry>
     <entry>
-     Supported in a limited way using <literal>query_rewrite</literal>
+      Supported by <literal>query_rewrite</literal> which may be check
+      a query and throw diagnostics (errors)
     </entry>
     <entry>Supported</entry>
    </row>
 
    <row>
     <entry><ulink url="&url.usemarcon;">USEMARCON</ulink></entry>
-    <entry>Unsupported</entry>
+    <entry>Supported with <literal>record_transform</literal></entry>
     <entry>Supported</entry>
    </row>
 
 
  <chapter id="filters">
   <title>Filters</title>
-  
-  
+
+
   <section id="filters-introductory-notes">
    <title>Introductory notes</title>
    <para>
     others are sinks: they consume packages and return a result
     (<literal>backend_test</literal>,
     <literal>bounce</literal>,
-    <literal>http_file</literal>, 
+    <literal>http_file</literal>,
     <literal>z3950_client</literal>);
     the others are true filters, that read, process and pass on the
     packages they are fed
     <literal>virt_db</literal>).
    </para>
  </section>
-  
-  
+
+
   <section id="overview.filter.types">
    <title>Overview of filter types</title>
    <para>
    <para>
     The filters are here listed in alphabetical order:
    </para>
-   
+
 <!--
 
 ### New filters:
@@ -812,7 +858,7 @@ Figure out what additional information we need in:
      the user.
     </para>
    </section>
-   
+
    <section id="backend_test">
     <title><literal>backend_test</literal>
     (mp::filter::Backend_test)</title>
@@ -823,38 +869,38 @@ Figure out what additional information we need in:
      even read this section.
     </para>
    </section>
-   
+
    <section id="bounce">
     <title><literal>bounce</literal>
     (mp::filter::Bounce)</title>
     <para>
-     A sink that swallows <emphasis>all packages</emphasis>, 
+     A sink that swallows <emphasis>all packages</emphasis>,
      and returns them almost unprocessed.
      It never sends any package of any type further down the row, but
      sets Z39.50 packages to Z_Close, and HTTP_Request packages to
      HTTP_Response err code 400 packages, and adds a suitable bounce
-     message. 
+     message.
      The bounce filter is usually added at end of each filter chain route
      to prevent infinite hanging of for example HTTP
-     requests packages when only the Z39.50 client partial sink 
+     requests packages when only the Z39.50 client partial sink
      filter is found in the
-     route.  
+     route.
     </para>
    </section>
-   
+
    <section id="cql_rpn">
     <title><literal>cql_rpn</literal>
     (mp::filter::CQLtoRPN)</title>
     <para>
-     A query language transforming filter which catches Z39.50 
+     A query language transforming filter which catches Z39.50
      <literal>searchRequest</literal>
      packages containing <literal>CQL</literal> queries, transforms
      those to <literal>RPN</literal> queries,
      and sends the <literal>searchRequests</literal> on to the next
-     filters. It is among other things useful in a SRU context. 
+     filters. It is among other things useful in a SRU context.
     </para>
    </section>
-   
+
    <section id="frontend_net">
     <title><literal>frontend_net</literal>
      (mp::filter::FrontendNet)</title>
@@ -870,19 +916,19 @@ Figure out what additional information we need in:
     <title><literal>http_file</literal>
      (mp::filter::HttpFile)</title>
     <para>
-     A partial sink which swallows only 
-     <literal>HTTP_Request</literal> packages, and 
+     A partial sink which swallows only
+     <literal>HTTP_Request</literal> packages, and
      returns the contents of files from the local
-     filesystem in response to HTTP requests.  
+     filesystem in response to HTTP requests.
      It lets Z39.50 packages and all other forthcoming package types
-     pass untouched. 
+     pass untouched.
      (Yes, Virginia, this
      does mean that Metaproxy is also a Web-server in its spare time.  So
      far it does not contain either an email-reader or a Lisp
      interpreter, but that day is surely coming.)
     </para>
    </section>
-   
+
    <section id="load_balance">
     <title><literal>load_balance</literal>
      (mp::filter::LoadBalance)</title>
@@ -890,7 +936,7 @@ Figure out what additional information we need in:
      Performs load balancing for incoming Z39.50 init requests.
      It is used together with the <literal>virt_db</literal> filter,
      but unlike the <literal>multi</literal> filter it does send an
-     entire session to only one of the virtual backends. The 
+     entire session to only one of the virtual backends. The
      <literal>load_balance</literal> filter is assuming that
      all backend targets have equal content, and chooses the backend
      with least load cost for a new session.
@@ -902,7 +948,7 @@ Figure out what additional information we need in:
     </warning>
    </para>
    </section>
-      
+
    <section id="log">
     <title><literal>log</literal>
      (mp::filter::Log)</title>
@@ -923,13 +969,13 @@ Figure out what additional information we need in:
      of virtual databases and multi-database searching below.
     </para>
    </section>
-   
+
    <section id="query_rewrite">
    <title><literal>query_rewrite</literal>
      (mp::filter::QueryRewrite)</title>
     <para>
-     Rewrites Z39.50 <literal>Type-1</literal> 
-     and <literal>Type-101</literal> (``<literal>RPN</literal>'') 
+     Rewrites Z39.50 <literal>Type-1</literal>
+     and <literal>Type-101</literal> (``<literal>RPN</literal>'')
      queries by a
      three-step process: the query is transliterated from Z39.50
      packet structures into an XML representation; that XML
@@ -938,8 +984,8 @@ Figure out what additional information we need in:
      structure.
     </para>
    </section>
-   
-   
+
+
    <section id="record_transform">
     <title><literal>record_transform</literal>
     (mp::filter::RecordTransform)</title>
@@ -961,7 +1007,7 @@ Figure out what additional information we need in:
      This filter implements global sharing of
      result sets (i.e. between threads and therefore between
      clients), yielding performance improvements by clever resource
-     pooling. 
+     pooling.
     </para>
    </section>
 
@@ -976,17 +1022,17 @@ Figure out what additional information we need in:
      messages.
      The <literal>sru_z3950</literal> filter  processes also  SRU
      GET/POST/SOAP explain requests, returning
-     either the absolute minimum required by the standard, or a  full 
+     either the absolute minimum required by the standard, or a  full
      pre-defined ZeeReX explain record.
-     See the 
+     See the
      <ulink url="&url.zeerex.explain;">ZeeReX Explain</ulink>
-     standard pages and the 
+     standard pages and the
      <ulink url="&url.sru.explain;">SRU Explain</ulink> pages
      for more information on the correct explain syntax.
      SRU scan requests are not supported yet.
     </para>
    </section>
-   
+
    <section id="template">
     <title><literal>template</literal>
      (mp::filter::Template)</title>
@@ -999,7 +1045,7 @@ Figure out what additional information we need in:
      intended for civilians.
     </para>
    </section>
-   
+
    <section id="virt_db">
     <title><literal>virt_db</literal>
      (mp::filter::VirtualDB)</title>
@@ -1014,7 +1060,7 @@ Figure out what additional information we need in:
      of virtual databases and multi-database searching below.
     </para>
    </section>
-   
+
    <section id="z3950_client">
     <title><literal>z3950_client</literal>
      (mp::filter::Z3950Client)</title>
@@ -1028,7 +1074,7 @@ Figure out what additional information we need in:
      the route.  Subsequent requests are sent to the same address,
      which is remembered at Init time in a Session object.
      HTTP_Request packages and all other forthcoming package types
-     are passed untouched. 
+     are passed untouched.
     </para>
   </section>
 
@@ -1041,7 +1087,7 @@ Figure out what additional information we need in:
      Z39.50 explain requests, returning a static ZeeReX
      Explain XML record from the config section. All other packages
      are passed through.
-     See the 
+     See the
      <ulink url="&url.zeerex.explain;">ZeeReX Explain</ulink>
      standard pages
      for more information on the correct explain syntax.
@@ -1052,11 +1098,11 @@ Figure out what additional information we need in:
      </para>
     </warning>
    </section>
-   
+
 
   </section>
-  
-  
+
+
   <section id="future.directions">
    <title>Future directions</title>
   <para>
@@ -1094,13 +1140,13 @@ Figure out what additional information we need in:
    </variablelist>
   </section>
  </chapter>
+
+
+
  <chapter id="configuration">
   <title>Configuration: the Metaproxy configuration file format</title>
-  
-  
+
+
   <section id="configuration-introductory-notes">
    <title>Introductory notes</title>
    <para>
@@ -1113,7 +1159,7 @@ Figure out what additional information we need in:
     Metaproxy.)
    </para>
   </section>
-  
+
   <section id="overview.xml.structure">
    <title>Overview of the config file XML structure</title>
    <para>
@@ -1126,11 +1172,19 @@ Figure out what additional information we need in:
     &lt;metaproxy xmlns="http://indexdata.com/metaproxy" version="1.0"&gt;
    </screen>
    <para>
-    The top-level element is &lt;metaproxy&gt;.  This contains a
-    &lt;start&gt; element, a &lt;filters&gt; element and a
-    &lt;routes&gt; element, in that order.  &lt;filters&gt; is
-    optional; the other two are mandatory.  All three are
-    non-repeatable.
+    The top-level element is &lt;metaproxy&gt;.  This contains
+    a &lt;dlpath&gt; element,
+    a &lt;start&gt; element,
+    a &lt;filters&gt; element and
+    a &lt;routes&gt; element, in that order.  &lt;dlpath&gt; and
+    &lt;filters&gt; are optional; the other two are mandatory.
+    All four are non-repeatable.
+   </para>
+   <para>
+     The &lt;dlpath;&gt; element contains a text element which
+     specifies the location of filter modules. This is only needed
+     if Metaproxy must load 3rd party filters (most filters with Metaproxy
+     are built into the Metaproxy application).
    </para>
   <para>
     The &lt;start&gt; element is empty, but carries a
@@ -1183,6 +1237,7 @@ Figure out what additional information we need in:
    </para>
    <screen><![CDATA[<?xml version="1.0"?>
 <metaproxy xmlns="http://indexdata.com/metaproxy" version="1.0">
+  <dlpath>/usr/lib/metaproxy/modules</dlpath>
   <start route="start"/>
   <filters>
     <filter id="frontend" type="frontend_net">
@@ -1191,7 +1246,7 @@ Figure out what additional information we need in:
     <filter id="backend" type="z3950_client">
     </filter>
   </filters>
-  <routes>  
+  <routes>
     <route id="start">
       <filter refid="frontend"/>
       <filter type="log"/>
@@ -1226,7 +1281,7 @@ Figure out what additional information we need in:
     mutton, beef and trout packages.
     When the response arrives, it is handed
     back to the <literal>log</literal> filter, which emits another
-    message; and then to the <literal>frontend_net</literal> filter, 
+    message; and then to the <literal>frontend_net</literal> filter,
     which returns the response to the client.
    </para>
   </section>
@@ -1236,7 +1291,7 @@ Figure out what additional information we need in:
    <para>
     Metaproxy XML configuration snippets can be reused by other
     filters using the <literal>XInclude</literal> standard, as seen in
-    the <literal>/etc/config-sru-to-z3950.xml</literal> example SRU 
+    the <literal>/etc/config-sru-to-z3950.xml</literal> example SRU
     configuration.
    <screen><![CDATA[
     <filter id="sru" type="sru_z3950">
@@ -1254,7 +1309,7 @@ Figure out what additional information we need in:
    <para>
     The distribution contains RelaxNG Compact and XML syntax checking
     files, as well as XML Schema files. These are found in the
-    distribution paths 
+    distribution paths
    <screen>
     xml/schema/metaproxy.rnc
     xml/schema/metaproxy.rng
@@ -1264,8 +1319,8 @@ Figure out what additional information we need in:
     configuration files. For example, using the utility
     <filename>xmllint</filename>, syntax checking is done like this:
    <screen>
-    xmllint --noout --schema xml/schema/metaproxy.xsd etc/config-local.xml 
-    xmllint --noout --relaxng xml/schema/metaproxy.rng etc/config-local.xml 
+    xmllint --noout --schema xml/schema/metaproxy.xsd etc/config-local.xml
+    xmllint --noout --relaxng xml/schema/metaproxy.rng etc/config-local.xml
    </screen>
     (A recent version of <literal>libxml2</literal> is required, as
     support for XML Schemas is a relatively recent addition.)
@@ -1617,13 +1672,8 @@ Z>
     merges them into a single Search response, which is what
     eventually makes it back to the client.
    </para>
-  </section>
-
 
-  <section id="multidb.picture">
-   <title>A picture is worth a thousand words (but only five hundred on 64-bit architectures)</title>
-   <simpara>
-    <inlinemediaobject>
+    <mediaobject>
      <imageobject>
       <imagedata fileref="multi.pdf" format="PDF" scale="50"/>
      </imageobject>
@@ -1640,13 +1690,10 @@ Z>
        document.]
       </phrase>
      </textobject>
-<!-- ### This used to work with an older version of DocBook
      <caption>
-      <para>Caption: progress of packages through filters.</para>
+      <para>A picture is worth a thousand words (but only five hundred on 64-bit architectures)</para>
      </caption>
--->
-    </inlinemediaobject>
-   </simpara>
+    </mediaobject>
   </section>
  </chapter>
 
@@ -1654,17 +1701,17 @@ Z>
  <chapter id="sru-server">
   <title>Combined SRU webservice and Z39.50 server configuration</title>
   <para>
-   Metaproxy can act as 
-   <ulink url="&url.sru;">SRU</ulink> and 
-   web service server, which translates web service requests to 
+   Metaproxy can act as
+   <ulink url="&url.sru;">SRU</ulink> and
+   web service server, which translates web service requests to
    <ulink url="&url.z39.50;">ANSI/NISO Z39.50</ulink> packages and
    sends them off to common available targets.
   </para>
   <para>
   A typical setup for this operation needs a filter route including the
-  following modules: 
+  following modules:
   </para>
-   
+
   <table id="sru-server-table-config" frame="top">
    <title>SRU/Z39.50 Server Filter Route Configuration</title>
    <tgroup cols="3">
@@ -1675,7 +1722,7 @@ Z>
       <entry>Purpose</entry>
      </row>
     </thead>
-    
+
     <tbody>
      <row>
       <entry><literal>frontend_net</literal></entry>
@@ -1745,16 +1792,16 @@ Z>
     </tbody>
    </tgroup>
   </table>
-  <para> 
+  <para>
    A typical minimal example <ulink url="&url.sru;">SRU</ulink>
-   server configuration file is found in the tarball distribution at 
+   server configuration file is found in the tarball distribution at
    <literal>etc/config-sru-to-z3950.xml</literal>.
-  </para> 
+  </para>
   <para>
    Off course, any other metaproxy modules can be integrated into a
-   SRU server solution, including, but not limited to, load balancing, 
-   multiple target querying 
-   (see  <xref linkend="multidb"/>), and complex RPN query rewrites. 
+   SRU server solution, including, but not limited to, load balancing,
+   multiple target querying
+   (see  <xref linkend="multidb"/>), and complex RPN query rewrites.
   </para>
 
 
@@ -2025,8 +2072,8 @@ Z>
    </para>
   </section>
  </chapter>
+
+
  <reference id="reference">
   <title>Reference</title>
    <partintro id="reference-introduction">
@@ -2044,9 +2091,7 @@ Z>
 <appendix id="license">
  <title>License</title>
 
-  <para>
-   Metaproxy, Copyright &copy; 1995-2007 Index Data ApS.
- </para>
+  &copyright;
 
   <para>
    Metaproxy is free software; you can redistribute it and/or modify it under
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.
   </para>
-  
+
   <para>
    You should have received a copy of the GNU General Public License
    along with Metaproxy; see the file LICENSE.  If not, write to the
-   Free Software Foundation, 
+   Free Software Foundation,
    51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    </para>
-  
-  <sect1 id="gpl">
-   <title>GNU General Public License</title>
-   <screen>
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-w Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-   </screen> 
-  </sect1>
+
  </appendix>
+
+ &gpl2;
 </book>
 
- <!-- Keep this comment at the end of the file
- Local variables:
- mode: sgml
- sgml-omittag:t
- sgml-shorttag:t
- sgml-minimize-attributes:nil
- sgml-always-quote-attributes:t
- sgml-indent-step:1
- sgml-indent-data:t
- sgml-parent-document: nil
- sgml-local-catalogs: nil
- sgml-namecase-general:t
- End:
- -->
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: nxml
+nxml-child-indent: 1
+End:
+-->