Describe target-charset. Reorder reference a bit.
[yazproxy-moved-to-github.git] / doc / reference.xml
index c2ca0df..bdbb9e3 100644 (file)
@@ -3,7 +3,7 @@
   <section id="proxy-operation">
    <title>Operating Environment</title>
    <para>
-    The YAZ proxy is a single program. After startup it spawns 
+    The YAZ proxy is a console program. After startup it spawns 
     a child process (except on Windows or if option -X is given). 
     The child process is the core of the proxy and it handles all
     communication with clients and servers. The parent process
     <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;target name="server1" default="1">
        &lt;!-- description of server1 .. -->
       &lt;/target>
      <screen>
       &lt;keepalive>
        &lt;bandwidth>1048576&lt;/bandwidth>
-       &lt;retrieve>400&lt;/retrieve>
+       &lt;pdu>400&lt;/pdu>
       &lt;/keepalive>
      </screen>
     </para>
      The proxy records bandwidth/pdu requests during the last 60 seconds
      (1 minute). The <literal>limit</literal> may include the
      elements <literal>bandwidth</literal>, <literal>pdu</literal>,
-     and <literal>retrieve</literal>. The <literal>bandwidth</literal>
+     <literal>retrieve</literal> and <literal>search</literal>.
+     The <literal>bandwidth</literal>
      measures the number of bytes transferred within the last minute.
      The <literal>pdu</literal> is the number of requests in the last
      minute. The <literal>retrieve</literal> holds the maximum records to
-     be retrieved in one Present Request.
+     which may be retrieved in one Present Request.
+     The <literal>search</literal> is the maximum number of searches
+     within the last minute.
     </para>
     <para>
-     If a bandwidth/pdu limit is reached the proxy will postpone the
+     If a bandwidth/pdu/search limit is reached the proxy will postpone the
      requests to the target and wait one or more seconds. The idea of the
      limit is to ensure that clients that downloads hundreds or thousands of
      records do not hurt other users.
     </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>
      A target that supports use attributes 1,4, 1000 through 1003 and
      no other use attributes, could use the following rules:
      <screen>
-      &lt;attribute type="1" value="1,4,1000-1003">
+      &lt;attribute type="1" value="1,4,1000-1003"/>
       &lt;attribute type="1" value="*" error="114"/>
      </screen>
     </para>
      If attribute <literal>marcxml</literal> is given, the proxy will
      perform MARC21 to MARCXML conversion. In this case the
      <literal>type</literal> should be XML. The proxy will use
-     preferred record syntax USMARC/MARC21 against the backend target.
+     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>
+     If attribute <literal>backendtype</literal> is given, that holds the
+     record syntax to be transmitted 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
        ..
        &lt;syntax type="usmarc"/>
        &lt;syntax type="xml" marcxml="1"
-        identifier="info:srw/schema/1/marcxml-v1.1"
-        &lt;title>MARCXML&lt;title>
-        &lt;name>marcxml&lt;name>
-       &lt;syntax>
+         identifier="info:srw/schema/1/marcxml-v1.1"
+         &lt;title>MARCXML&lt;title>
+         &lt;name>marcxml&lt;name>
+       &lt;/syntax>
        &lt;syntax type="xml" marcxml="1" stylesheet="MARC21slim2SRWDC.xsl"
-        identifier="info:srw/schema/1/dc-v1.1">
-        &lt;title>Dublin Core&lt;title>
-        &lt;name>dc&lt;name>
-       &lt;syntax>
+         identifier="info:srw/schema/1/dc-v1.1">
+         &lt;title>Dublin Core&lt;title>
+         &lt;name>dc&lt;name>
+       &lt;/syntax>
        &lt;syntax type="*" error="238"/>
        ..
        &lt;/target>
    <section id="proxy-config-cql2rpn">
     <title>cql2rpn</title>
     <para>
-     The CDATA of <literal>cql2rpn</literal> refers to CQL to a RPN conversion
-     file - for the server in the target section. This element
-     is required for SRW/SRU searches to operate against a Z39.50
-     server that doesn't support CQL. Most Z39.50 servers only support
+     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
+     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
      <filename>pqf.properties</filename> in the <filename>etc</filename> 
      (or <replaceable>prefix/share/yazproxy</replaceable>)
-     directory of the YAZ proxy.
+     directory of the YAZ proxy distribution.
     </para>
    </section>
    
     </para>
    </section>
 
+   <section id="proxy-config-target-authentication">
+    <title>target-authentication</title>
+    <para>
+     The element <literal>target-authentication</literal> specifies
+     fixed authentication information to be sent to the backend target.
+    </para>
+    <para>
+     This element takes a an attribute <literal>type</literal> which is
+     the authenticatin type to be used.. 
+    </para>
+    <variablelist>
+     <varlistentry><term><literal>none</literal></term>
+      <listitem>
+       <para>
+       No authentication. There is no CDATA associated with this.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry><term><literal>anonymous</literal></term>
+      <listitem>
+       <para>
+       Anonymous authentication. There is no CDATA associated with this.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry><term><literal>open</literal></term>
+      <listitem>
+       <para>
+       Open authentication. The CDATA consists of the
+       open authentication string.
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry><term><literal>idPass</literal></term>
+      <listitem>
+       <para>
+       IdPass authentication. The CDATA consists of
+       three terms: user, group and password.
+       </para>
+      </listitem>
+     </varlistentry>
+    </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 SRW/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>
      </screen>
     </para>
    </section>
+
+   <section id="proxy-max-connect">
+    <title>max-connect</title>
+    <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.
+    </para>
+    <para>
+     If the maximum number is reached the proxy will terminate the
+     just initiated session (connection terminated).
+    </para>
+   </section>
+
+   <section id="proxy-limit-connect">
+    <title>limit-connect</title>
+    <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.
+    </para>
+    <para>
+     If the maximum number is reached the proxy delay the first operatation
+     in the session (Thus delaying the connection).
+    </para>
+   </section>
+
+   <section id="proxy-docpath">
+    <title>docpath</title>
+    <para>
+     The element <literal>docpath</literal> is a child of element
+     <literal>proxy</literal> and specifies an allowed HTTP path
+     for local file access. Using <literal>docpath</literal> the
+     proxy may return static file content.
+    </para>
+    <para>
+     The value of docpath both serves as a HTTP path prefix 
+     <emphasis>and</emphasis> as a local file prefix. 
+     If a value of <literal>etc</literal> is used only URLs with the
+     prefix <literal>/etc/</literal> results in a local file access to the
+     directory <literal>etc</literal> within the working directory
+     of yazproxy.
+    </para>
+    <note>
+    <para>
+      Care has been taken to ensure that hostile URLs are rejected - including
+      strings such as <literal>..</literal> and <literal>/</literal> (absolute
+      file system access).
+     </para>
+    </note>
+   </section>
+
   </section>
   <section id="proxy-usage">
-   <title>Proxy Usage (man page)</title>
+   <title>Proxy Manual Pages</title>
    <refentry id="yazproxy-man">
     &yaz-proxy-ref;
    </refentry>
     directory <filename>etc</filename> of the distribution.
    </para>
    <screen><![CDATA[
-    <?xml version="1.0"?>
+<?xml version="1.0"?>
 <!-- XML Schema for YAZ proxy config file.
-    $Id: reference.xml,v 1.5 2004-04-21 13:08:21 adam Exp $
+    $Id: reference.xml,v 1.16 2006-04-06 10:30:16 adam Exp $
 -->
 <xs:schema
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:exp="http://explain.z3950.org/dtd/2.0/"
-  xmlns="http://indexdata.dk/yazproxy/schema/0.8/"
-  targetNamespace="http://indexdata.dk/yazproxy/schema/0.8/"
+  xmlns="http://indexdata.dk/yazproxy/schema/0.9/"
+  targetNamespace="http://indexdata.dk/yazproxy/schema/0.9/"
   >
  <xs:import namespace="http://explain.z3950.org/dtd/2.0/" 
       schemaLocation="zeerex-2.0.xsd"/>
     <xs:element ref="target" minOccurs="0" maxOccurs="unbounded"/>
     <xs:element ref="max-clients" minOccurs="0"/>
     <xs:element ref="log" minOccurs="0"/>
+    <xs:element ref="module" minOccurs="0"/>
    </xs:sequence>
   </xs:complexType>
  </xs:element>
      <xs:element ref="attribute" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="syntax" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="preinit" minOccurs="0"/>
-     <xs:element name="exp:explain" minOccurs="0"/>
+     <xs:element ref="exp:explain" minOccurs="0"/>
      <xs:element ref="cql2rpn" minOccurs="0"/>
+     <xs:element ref="target-authentication" minOccurs="0"/>
+     <xs:element ref="client-authentication" minOccurs="0"/>
+     <xs:element ref="negotiation-charset" minOccurs="0"/>
+     <xs:element ref="negotiation-lang" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="default" type="xs:string" use="optional"/>
    <xs:attribute name="name" type="xs:string"/>
+   <xs:attribute name="database" type="xs:string"/>
   </xs:complexType>
  </xs:element>
 
  <xs:element name="retrieve" type="xs:integer"/>
  <xs:element name="preinit" type="xs:integer"/>
  <xs:element name="cql2rpn" type="xs:string"/>
+ <xs:element name="target-authentication">
+   <xs:complexType>
+    <xs:simpleContent>
+      <xs:extension base="xs:string">
+        <xs:attribute name="type" type="xs:string"/>
+      </xs:extension>
+    </xs:simpleContent>
+   </xs:complexType>
+ </xs:element>
+
+ <xs:element name="client-authentication">
+   <xs:complexType>
+    <xs:simpleContent>
+      <xs:extension base="xs:string">
+        <xs:attribute name="module" type="xs:string"/>
+        <xs:attribute name="args" type="xs:string"/>
+      </xs:extension>
+    </xs:simpleContent>
+   </xs:complexType>
+ </xs:element>
+
+ <xs:element name="negotiation-charset" type="xs:string"/>
+ <xs:element name="negotiation-lang" type="xs:string"/>
 
  <xs:element name="keepalive">
   <xs:complexType>
  <xs:element name="syntax">
   <xs:complexType>
    <xs:sequence>
-    <xs:element name="title" type="xs:string" minOccurs="0"/>
-    <xs:element name="name" type="xs:string" minOccurs="0"
-                                             maxOccurs="unbounded"/>
+    <xs:element ref="title" minOccurs="0"/>
+    <xs:element ref="name" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
-   <xs:attribute name="error" type="xs:string" minOccurs="0"/>
-   <xs:attribute name="type" type="xs:string" minOccurs="0"/>
-   <xs:attribute name="marcxml" type="xs:string" minOccurs="0"/>
-   <xs:attribute name="identifier" type="xs:string" minOccurs="0"/>
-   <xs:attribute name="stylesheet" type="xs:string" minOccurs="0"/>
+   <xs:attribute name="error" type="xs:string" />
+   <xs:attribute name="type" type="xs:string" />
+   <xs:attribute name="marcxml" type="xs:string" />
+   <xs:attribute name="identifier" type="xs:string" />
+   <xs:attribute name="stylesheet" type="xs:string" />
+   <xs:attribute name="backendtype" type="xs:string" />
+   <xs:attribute name="backendcharset" type="xs:string" />
+   <xs:attribute name="usemarconstage1" type="xs:string" />
+   <xs:attribute name="usemarconstage2" type="xs:string" />
   </xs:complexType>
  </xs:element>
 
+ <xs:element name="title" type="xs:string"/>
+ <xs:element name="name" type="xs:string"/>
+
  <xs:element name="max-clients" type="xs:integer"/>
  <xs:element name="log" type="xs:string"/>
+ <xs:element name="module" type="xs:string"/>
 
 </xs:schema>
-
 ]]>
    </screen>
   </section>