debian compat 9
[yazproxy-moved-to-github.git] / doc / reference.xml
index 28cd49f..2ef809c 100644 (file)
@@ -32,7 +32,7 @@
        usual YAZ address format (typically
        <literal>tcp:<parameter>hostname</parameter>:<parameter>port</parameter></literal>)
        as described in
-       <ulink url="http://www.indexdata.dk/yaz/doc/comstack.addresses.tkl"
+       <ulink url="&url.yaz.comstack.addresses;"
        >the Addresses section of the YAZ manual</ulink>.
       </para>
      </listitem>
     </orderedlist>
    </para>
    <para>
-    If the proxy receives an SRW/SRU request, the following rules are used.
+    If the proxy receives an SRU request, the following rules are used.
     <orderedlist>
      <listitem>
       <para>If default target has Explain information with a
        <literal>database</literal> that matches the path of the
-       HTTP request of SRW/SRU that backend server is used for
-       SRW/SRU operation.
-       </para>
+       HTTP request of SRU that backend server is used for SRU operation.
+      </para>
      </listitem>
      <listitem>
       <para>
      </listitem>
     </orderedlist>
    </para>
-   <note>
-    <para>
-     We know it is stupid to only check for explain in default target.
-     It means that it is only possible to offer one SRW/SRU server.
-     We expect to improve that in the next version of the YAZ proxy.
-    </para>
-   </note>
   </section>
   <section id="proxy-keepalive">
    <title>Keep-alive Facility</title>
    </para>
    <para>
     The config file is XML based. The YAZ proxy must be compiled 
-    with <ulink url="http://www.xmlsoft.org/">libxml2</ulink> and
-    <ulink url="http://xmlsoft.org/XSLT/">libXSLT</ulink> support in
+    with <ulink url="&url.libxml2;">libxml2</ulink> and
+    <ulink url="&url.libxslt;">libXSLT</ulink> support in
     order for the config file facility to be enabled.
    </para>
    <para>
     <para>
      The proxy config file must have a root element called
      <literal>proxy</literal> and scoped within namespace
-     <literal> xmlns="http://indexdata.dk/yazproxy/schema/0.8/</literal>.
+     <literal> xmlns="http://indexdata.dk/yazproxy/schema/0.9/"</literal>.
      All information except an optional XML header must be stored
      within the <literal>proxy</literal> element.
     </para>
     <screen>
      &lt;?xml version="1.0"?>
-     &lt;proxy xmlns="http://indexdata.dk/yazproxy/schema/0.8/">
+     &lt;proxy xmlns="http://indexdata.dk/yazproxy/schema/0.9/">
       &lt;!-- content here .. -->
      &lt;/proxy>
     </screen>
      equivalent to command line option <literal>-t</literal>.
     </para>
     <para>
-     <screen>
-     &lt;?xml version="1.0"?>
-     &lt;proxy xmlns="http://indexdata.dk/yazproxy/schema/0.9/">
-      &lt;target name="server1" default="1">
-       &lt;!-- description of server1 .. -->
-      &lt;/target>
-      &lt;target name="server2">
-       &lt;!-- description of server2 .. -->
-      &lt;/target>
-     &lt;/proxy>
+      <screen><![CDATA[
+     <?xml version="1.0"?>
+     <proxy xmlns="http://indexdata.dk/yazproxy/schema/0.9/">
+      <target name="server1" default="1">
+       <!-- description of server1 .. -->
+      </target>
+      <target name="server2">
+       <!-- description of server2 .. -->
+      </target>
+     </proxy>
+      ]]>
      </screen>
     </para>
    </section>
     </para>
    </section>
 
+   <section id="proxy-config-max-sockets">
+    <title>max-sockets</title>
+    <para>
+     The element <literal>max-sockets</literal> is the child of element
+     <literal>target</literal> and specifies the maximum number of sockets
+     to use for the target for all sessions using it. In other words: maximum
+     number of Z39.50 session to the target.
+    </para>
+   </section>
+
    <section id="proxy-config-keepalive">
     <title>keepalive</title>
     <para>The <literal>keepalive</literal> element holds information about
     </para>
     <para>
      The following sets maximum number of bytes transferred per minute to
-     500Kbytes and maximum number of requests to 40.
+     500Kbytes, maximum number of records retrievals to 40
+     and maximum number of searches to 20.
      <screen>
       &lt;limit>
        &lt;bandwidth>524288&lt;/bandwidth>
        &lt;retrieve>40&lt;/retrieve>
+       &lt;search>20&lt;/search>
       &lt;/limit>
      </screen>
     </para>
     <note>
      <para>
-      Typically the limits for keepalive are much higher than
-      those for session minute average.
+      Typically the values in the keepalive section are mugh higher
+      than their equivalent limit counterparts (bandwidth, pdu).
      </para>
     </note>
    </section>
     <title>syntax</title>
     <para>
      The <literal>syntax</literal> element specifies accept or reject
-     or a particular record syntax request from the client.
+     or a particular record syntax request from the client. It also
+     allows record conversion of XML records via XSLT.
     </para>
     <para>
      The <literal>syntax</literal> has one required attribute:
      <literal>type</literal> should be XML. The proxy will use
      preferred record syntax USMARC/MARC21 or <literal>backendtype</literal> 
      (if given) against the backend target.
+     For the special case where <literal>backendtype</literal> is
+     <literal>opac</literal> the proxy will convert the OPAC
+     record to OPACXML.
+    </para>
+    <para>
+      When <literal>marcxml</literal> is used, yazproxy assumes
+      that records retrieved from the backend are encoded in the
+      <ulink url="&url.marc8;">MARC-8</ulink> character set.
+      This is correct for most MARC21 based systems, but not for 
+      other MARC variants or UTF-8 based MARC21 systems.
+      The <literal>backendcharset</literal> attribute specifies
+      the character set of the MARC records to be converted.
     </para>
     <para>
      If attribute <literal>backendtype</literal> is given, that holds the
      record syntax to be transmitted to backend.
     </para>
     <para>
+     If attribute <literal>backendelementset</literal> is given, that holds
+     elementset to be transmitted to backend. An empty value of
+     <literal>backendelementset</literal> has the effect of omitting
+     any Comp-Spec (and elementset) sent to backend.
+    </para>
+    <para>If <literal>backendelementset</literal> is omitted, the element
+     set from client is used, except if <literal>marcxml</literal> is used.
+     In that case (using <literal>marcxml</literal>), no Comp-Spec and no
+     elementset is sent to backend.
+    </para>
+    <para>
      If attribute <literal>stylesheet</literal> is given, the proxy
      will convert XML record from server via XSLT. It is important
      that the content from server is XML. If used in conjunction with
-     attribute <literal>marcxml</literal> the MARC to MARCXML conversion
-     takes place before the XSLT conversion takes place.
+     attribute <literal>marcxml</literal>, the MARC to MARCXML/OPACXML
+     conversion takes place before the XSLT conversion takes place.
     </para>
     <para>
      If attribute <literal>identifier</literal> is given that is the
-     SRW/SRU record schema identifier for the resulting output record (after
+     SRU record schema identifier for the resulting output record (after
      MARCXML and/or XSLT conversion). 
     </para>
     <para>
      If sub element <literal>title</literal> is given (as child element
-     of <literal>syntax</literal>, then that is the official SRW/SRU
+     of <literal>syntax</literal>, then that is the official SRU
      name of the resulting record schema.
     </para>
     <para>
     <title>explain</title>
     <para>
      The <literal>explain</literal> element includes Explain information
-     for SRW/SRU about the server in the target section. This
+     for SRU about the server in the target section. This
      information must have a <literal>serverInfo</literal> element
      with a database that this target must be available as (URL path).
      For example,
       </explain>
       ]]>
      </screen>
-     In the above case, the SRW/SRU service is available as
+     In the above case, the SRU service is available as
      <literal>http://myhost.org:8000/mydatabase</literal>.
     </para>
     
      The content of the <literal>cql2rpn</literal> element specifies
      the path from the working directory to a CQL-to-RPN conversion
      file for the server in the target section. This element
-     is required for SRW/SRU searches to operate against Z39.50
+     is required for SRU searches to operate against Z39.50
      servers that don't support CQL. Most Z39.50 servers only support
      Type-1/RPN so this is usually required.
     </para>
     <para>
      See YAZ documentation for more information about the
-     <ulink url="http://indexdata.dk/yaz/doc/tools.tkl#tools.cql.pqf">CQL
-      to PQF</ulink> conversion. See also the
+     <ulink url="&url.yaz.cql2pqf;">CQL to PQF</ulink> conversion.
+     See also the
      <filename>pqf.properties</filename> in the <filename>etc</filename> 
      (or <replaceable>prefix/share/yazproxy</replaceable>)
      directory of the YAZ proxy distribution.
     </para>
    </section>
 
-   <section id="proxy-config-max-clients">
-    <title>max-clients</title>
-    <para>
-     The element <literal>max-clients</literal> is the child of element
-     <literal>proxy</literal> and specifies the total number of
-     allowed connections to targets (all targets). If this limit
-     is reached the proxy will close the least recently used connection.
-    </para>
-    <para>
-     Note, that many Unix systems impose a system on the number of
-     open files allowed in a single process, typically in the 
-     range 256 (Solaris) to 1024 (Linux).
-     The proxy uses 2 sockets per session + a few files
-     for logging. As a rule of thumb, ensure that 2*max-clients + 5
-     can be opened by the proxy process.
-    </para>
-    <tip>
-     <para>
-      Using the <ulink url="http://www.gnu.org/software/bash/bash.html">
-       bash</ulink> shell, you can set the limit with
-      <literal>ulimit -n</literal><replaceable>no</replaceable>. 
-       Use <literal>ulimit -a</literal> to display limits.
-     </para>
-     </tip>
-   </section>
-
    <section id="proxy-config-target-authentication">
     <title>target-authentication</title>
     <para>
     </variablelist>
    </section>
 
+   <section id="proxy-config-target-charset">
+    <title>target-charset</title>
+    <para>
+     The element <literal>target-charset</literal> specifies the
+     native character set that the target uses for queries.
+    </para>
+    <para>
+     If this is specified the proxy will act as a Z39.50 server
+     supporting character set negotiation. And in SRU mode
+     it will convert from UTF-8 (UNICODE) to this native character
+     set (if possible).
+    </para>
+   </section>
+
+   <section id="proxy-config-max-clients">
+    <title>max-clients</title>
+    <para>
+     The element <literal>max-clients</literal> is the child of element
+     <literal>proxy</literal> and specifies the total number of
+     allowed connections to targets (all targets). If this limit
+     is reached the proxy will close the least recently used connection.
+    </para>
+    <para>
+     Note, that many Unix systems impose a system on the number of
+     open files allowed in a single process, typically in the 
+     range 256 (Solaris) to 1024 (Linux).
+     The proxy uses 2 sockets per session + a few files
+     for logging. As a rule of thumb, ensure that 2*max-clients + 5
+     can be opened by the proxy process.
+    </para>
+    <tip>
+     <para>
+      Using the <ulink url="&url.bash;">bash</ulink> shell, you can set
+      the limit with
+      <literal>ulimit -n</literal><replaceable>no</replaceable>. 
+       Use <literal>ulimit -a</literal> to display limits.
+     </para>
+     </tip>
+   </section>
+
    <section id="proxy-config-log">
     <title>log</title>
     <para>
          and the size of the APDU is logged.
         </entry>
        </row>
+       <row>
+        <entry><literal>client-ip</literal></entry>
+        <entry>
+         Log the client IP for each log entry. By default, the client IP
+         is only logged when a new session starts.
+        </entry>
+       </row>
        </tbody>
       </tgroup>
      </table>
     <para>
      The element <literal>max-connect</literal> is a child of element
      <literal>proxy</literal> and specifies the maximum number
-     of connections to be initiated within the last minute.
+     of connections to be initiated within the last minute (or
+     value of <link linkend="proxy-period-connect">period-connect</link>.
     </para>
     <para>
      If the maximum number is reached the proxy will terminate the
     <para>
      The element <literal>max-connect</literal> is a child of element
      <literal>proxy</literal> and specifies the limit of number
-     of connections to be initiated within the last minute.
+     of connections to be initiated within the last minute (or
+     value of <link linkend="proxy-period-connect">period-connect</link>.
+    </para>
+    <para>
+     If the maximum number is reached the proxy delays the first operation
+     in the session by one second.
+    </para>
+   </section>
+
+   <section id="proxy-period-connect">
+    <title>period-connect</title>
+    <para>
+     The element <literal>period-connect</literal> is a child of element
+     <literal>proxy</literal> and specifies period - in the number of seconds
+     that <link linkend="proxy-limit-connect">limit-connect</link> and 
+     <link linkend="proxy-max-connect">max-connect</link>
+     should measure connections.
     </para>
     <para>
-     If the maximum number is reached the proxy delay the first operatation
-     in the session (Thus delaying the connection).
+     If <literal>period-connect</literal> is omitted, 60 seconds is used.
     </para>
    </section>
 
     The <literal>categoryTypeId</literal> is either
     OID 1.2.840.10003.10.1000.81.1, 1.2.840.10003.10.1000.81.2
     for proxy target and proxy cookie respectively. The
-    integer element <literal>category</literal> is set to 0.
+    <literal>categoryValue</literal> is set to 1.
     The value proxy and cookie is stored in element
     <literal>characterInfo</literal> of the <literal>information</literal>
      choice.
    <screen><![CDATA[
 <?xml version="1.0"?>
 <!-- XML Schema for YAZ proxy config file.
-    $Id: reference.xml,v 1.15 2006-04-06 01:16:54 adam Exp $
 -->
 <xs:schema
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
      <xs:element ref="url" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="target-timeout" minOccurs="0"/>
      <xs:element ref="client-timeout" minOccurs="0"/>
+     <xs:element ref="max-sockets" minOccurs="0"/>
      <xs:element ref="keepalive" minOccurs="0"/>
      <xs:element ref="limit" minOccurs="0"/>
      <xs:element ref="attribute" minOccurs="0" maxOccurs="unbounded"/>
  <xs:element name="url" type="xs:string"/>
  <xs:element name="target-timeout" type="xs:integer"/>
  <xs:element name="client-timeout" type="xs:integer"/>
+ <xs:element name="max-sockets" type="xs:integer"/>
  <xs:element name="bandwidth" type="xs:integer"/>
  <xs:element name="pdu" type="xs:integer"/>
  <xs:element name="retrieve" type="xs:integer"/>
    <xs:attribute name="backendcharset" type="xs:string" />
    <xs:attribute name="usemarconstage1" type="xs:string" />
    <xs:attribute name="usemarconstage2" type="xs:string" />
+   <xs:attribute name="backendelementset" type="xs:string" />
   </xs:complexType>
  </xs:element>