Doc: more on pz:extendrecs and spell fix
[pazpar2-moved-to-github.git] / doc / pazpar2_protocol.xml
index a622601..f266fd7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" standalone="no"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN"
- "http://www.oasis-open.org/docbook/xml/4.1/docbookx.dtd"
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
 [
      <!ENTITY % local SYSTEM "local.ent">
      %local;
  <refentryinfo>
   <productname>Pazpar2</productname>
   <productnumber>&version;</productnumber>
+  <info><orgname>Index Data</orgname></info>
  </refentryinfo>
  <refmeta>
   <refentrytitle>Pazpar2 protocol</refentrytitle>
   <manvolnum>7</manvolnum>
+  <refmiscinfo class="manual">Conventions and miscellaneous</refmiscinfo>
  </refmeta>
 
  <refnamediv>
@@ -24,7 +26,8 @@
   <refpurpose>The webservice protocol of Pazpar2</refpurpose>
  </refnamediv>
 
- <refsect1><title>DESCRIPTION</title>
+ <refsect1>
+  <title>DESCRIPTION</title>
   <para>
    Webservice requests are any that refer to filename "search.pz2". Arguments
    are GET-style parameters. Argument 'command' is always required and specifies
    request is forwarded to the HTTP server specified in the configuration
    using the proxy setting.
    This way, a regular webserver can host the user interface (itself dynamic
-   or static HTML), and AJAX-style calls can be used from JS (or any other client-based
-   scripting environment) to interact with the search logic in Pazpar2. 
+   or static HTML), and Ajax-style calls can be used from JS (or any other
+   client-based scripting environment) to interact with the search logic
+   in Pazpar2. 
   </para>
   <para>
    Each command is described in sub sections to follow.
   </para>
-  <refsect2 id="command-init"><title>init</title>
+  <refsect2 id="command-init">
+   <title>init</title>
    <para>
     Initializes a session.
-    Returns session ID to be used in subsequent requests.
+    Returns session ID to be used in subsequent requests. If
+    a server ID is given in the Pazpar2 server section, then a
+    period (.) and the server ID is appended to the session ID.
    </para>
    <para>
     Example:
@@ -59,9 +66,9 @@
     </init>
 ]]></screen>
    <para>
-     The init command may take a number of setting parameters, similar to
-     the 'settings' command described below. These settings are immediately
-     applied to the new session. Other parameters for init are:
+    The init command may take a number of setting parameters, similar to
+    the 'settings' command described below. These settings are immediately
+    applied to the new session. Other parameters for init are:
     <variablelist>
      <varlistentry>
       <term>clear</term>
@@ -78,9 +85,9 @@
       <term>service</term>
       <listitem>
        <para>
-       Makes the session use the service with the given ID. If
-       this is setting is omitted, the session will use the
-       unnamed service in the Pazpar2 configuration.
+        If this is defined it specifies a service ID. Makes the session use
+        the service with this ID. If this is setting is omitted, the
+        session will use the unnamed service in the Pazpar2 configuration.
        </para>
       </listitem>
      </varlistentry>
@@ -88,7 +95,8 @@
    </para>
   </refsect2>
   
-  <refsect2 id="command-ping"><title>ping</title>
+  <refsect2 id="command-ping">
+   <title>ping</title>
    <para>
     Keeps a session alive. An idle session will time out after one minute.
     The ping command can be used to keep the session alive absent other
    <para>
     Example:
     <screen><![CDATA[
-       search.pz?command=settings&session=2044502273&pz:allow[search.com:210/db1]=1
+search.pz?command=settings&session=2044502273&pz:allow[search.com:210/db1]=1
       ]]></screen>
     Response:
    <screen><![CDATA[
   <status>OK</status>
 </settings>
 ]]></screen>
-    </para>
-
+   </para>
+   
   </refsect2>
-  <refsect2 id="command-search"><title>search</title>
+  <refsect2 id="command-search">
+   <title>search</title>
    <para>
     Launches a search, parameters:
-    
+
     <variablelist>
      <varlistentry>
       <term>session</term>
       <term>filter</term>
       <listitem>
        <para>
-       Filtering.
+       Limits the search to a given set of targets specified by the
+       filter. The filter consists a comma separated list of
+       <emphasis>setting</emphasis>+<emphasis>operator</emphasis>+<emphasis>args</emphasis>
+       pairs. The <emphasis>setting</emphasis> is a Pazpar2 setting
+       (such as <literal>pz:id</literal>).
+       The <emphasis>operator</emphasis> is either
+       <literal>=</literal> (string match)
+       or <literal>~</literal> (substring match).
+       The <emphasis>args</emphasis> is a list of values separated
+       by <literal>|</literal> (or , one of the values).
+       The idea is that only targets with a setting matching one of
+       the values given will be included in the search.
+       </para>
+      </listitem>
+     </varlistentry>
+     <varlistentry>
+      <term>limit</term>
+      <listitem>
+       <para>
+       Narrows the search by one or more fields (typically facets).
+       The limit is sequence of one or more
+       <emphasis>name</emphasis>=<emphasis>args</emphasis> pairs separated
+       by comma. The <emphasis>args</emphasis> is a list of values
+       separated by vertical bar (<literal>|</literal>).
+       The meaning of <literal>|</literal> is alternative, ie OR .
+       A value that contains a comma (<literal>,</literal>),
+       a vertical bar (<literal>|</literal>) or
+       backslash itself must be preceded by backslash (<literal>\</literal>).
+       The <link linkend="limitmap">pz:limitmap</link> configuration
+       item defines how the searches are mapped to a database.
+       </para>
+      </listitem>
+     </varlistentry>
+     <varlistentry>
+      <term>startrecs</term>
+      <listitem>
+       <para>
+       Specifies the first record to retrieve from each target.
+       The first record in a result set for a target is numbered 0, next
+       record is numbered 2. By default maxrecs is 0.
+       </para>
+      </listitem>
+     </varlistentry>
+     <varlistentry>
+      <term>maxrecs</term>
+      <listitem>
+       <para>
+       Specifies the maximum number of records to retrieve from each
+       target. The default value is 100. This setting has same meaning
+       as per-target setting pz:maxrecs . If pz:maxrecs is set, it takes
+       precedence over argument maxrecs.
+       </para>
+      </listitem>
+     </varlistentry>
+     <varlistentry>
+      <term>sort</term>
+      <listitem>
+       <para>
+       Specifies sort criteria. The argument is a comma-separated list
+       (no whitespace allowed) of sort fields, with the highest-priority
+       field first. A sort field may be followed by a colon followed by
+       the number '0' (decreasing) or '1' (increasing).  Default
+        sort order is decreasing.
+       Sort field names can be any field name designated as a sort field
+        in the pazpar2.cfg file, or the special names 'relevance' and
+       'position'.
+       </para>
+       <para>
+       If not specified here or as <link linkend="sort-default">sort-default"</link>
+       in pazpar2.cfg, Pazpar2 will default to the built-in 'relevance' ranking. 
+       </para>
+       <para>
+       Having sort criteria at search is important for targets that 
+       supports native sorting in order to get best results. Pazpar2 
+       will trigger a new search if search criteria changes from Pazpar2 
+       to target-based sorting or visa-versa.
        </para>
       </listitem>
      </varlistentry>
@@ -251,7 +335,7 @@ search.pz2?session=2044502273&command=stat
       <listitem>
        <para>
        Session ID
-       </para>
+       </para>
       </listitem>
      </varlistentry>
      
@@ -275,8 +359,8 @@ search.pz2?session=2044502273&command=stat
       <term>block</term>
       <listitem>
        <para>
-       If block is set to 1, the command will hang until there are records ready
-       to display. Use this to show first records rapidly without
+       If block is set to 1, the command will hang until there are records
+       ready to display. Use this to show first records rapidly without
        requiring rapid polling.
        </para>
       </listitem>
@@ -289,10 +373,25 @@ search.pz2?session=2044502273&command=stat
        Specifies sort criteria. The argument is a comma-separated list
        (no whitespace allowed) of sort fields, with the highest-priority
        field first. A sort field may be followed by a colon followed by
-       the number '0' or '1', indicating whether results should be sorted in
-       increasing or decreasing order according to that field. 0==Decreasing is
-       the default. Sort field names can be any field name designated as a sort field
-        in the pazpar2.cfg file, or the special name 'relevance'.
+       the number '0' (decreasing) or '1' (increasing).  Default
+        sort order is decreasing.
+       Sort field names can be any field name designated as a sort field
+        in the pazpar2.cfg file, or the special names 'relevance' and
+       'position'.
+
+       If not specified here or as <link linkend="sort-default">sort-default"</link> 
+       in pazpar2.cfg, pazpar2 will default to the built-in 'relevance' ranking. 
+
+       Having sort criteria at search is important for targets that 
+       supports native sorting in order to get best results. pazpar2 
+       will trigger a new search if search criteria changes from pazpar2 
+       to target-based sorting.
+
+       </para>
+       <para>
+       For targets where If <link linkend="pz:sortmap">pz:sortmap</link>
+       is defined, a sort operation will be executed (possibly including
+       extending the search).
        </para>
       </listitem>
      </varlistentry>
@@ -336,7 +435,7 @@ search.pz2?session=2044502273&command=show&start=0&num=2&sort=title:1
     Retrieves a detailed record. Unlike the 
     <link linkend="command-show">show</link> command, this command 
     returns metadata records before merging takes place. Parameters:
-
+    
     <variablelist>
      <varlistentry>
       <term>session</term>
@@ -362,15 +461,16 @@ search.pz2?session=2044502273&command=show&start=0&num=2&sort=title:1
       <listitem>
        <para>
        This optional parameter is an integer which, when given, makes
-       Pazpar2 return the raw record for a target. The raw record
-       from first target is numbered 0, second numbered 1, etc.
-       When a raw record is returned Pazpar2 will XSLT transform the
-       record but an XML version is returned. All ISO2709 records are
-       returned as MARCXML. OPAC records are returned as YAZ'
-       OPAC with an MARCXML sibling.
+       Pazpar2 return the original record for a specific target.
+       The record set from first target is numbered 0,
+       second record set is numbered 1, etc.
+       The nativesyntax setting, as usual, is used to determine how to
+       create XML from the original record - unless parameter
+       <literal>binary</literal> is given in which the record is
+       fetched as "raw" from ZOOM C (raw, original record).
        </para>
        <para>
-       When offset is not given the Pazpar2 metadata for the record
+       When offset/checksum is not given, the Pazpar2 metadata for the record
        is returned and with metadata for each targets' data specified
        in a 'location' list.
        </para>
@@ -378,6 +478,40 @@ search.pz2?session=2044502273&command=show&start=0&num=2&sort=title:1
      </varlistentry>
 
      <varlistentry>
+      <term>checksum</term>
+      <listitem>
+       <para>
+       This optional parameter is a string which, when given, makes
+       Pazpar2 return the original record for a specific target. The
+       checksum is returned as attribtue 'checksum' in element
+       'location' for show command and record command (when checksum
+       and offset is NOT given).
+       The nativesyntax setting, as usual, is used to determine how to
+       create XML from the original record - unless parameter
+       <literal>binary</literal> is given in which the record is
+       fetched as "raw" from ZOOM C (raw, original record).
+       </para>
+       <para>
+       When offset/checksum is not given, the Pazpar2 metadata for the record
+       is returned and with metadata for each targets' data specified
+       in a 'location' list.
+       </para>
+      </listitem>
+     </varlistentry>
+
+
+     <varlistentry>
+      <term>nativesyntax</term>
+      <listitem>
+       <para>
+       This optional parameter can be used to override pz:nativesyntax
+       as given for the target. This allow an alternative nativesyntax
+       to be used for original records (see parameteroffset above).
+       </para>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry>
       <term>syntax</term>
       <listitem>
        <para>
@@ -405,9 +539,9 @@ search.pz2?session=2044502273&command=show&start=0&num=2&sort=title:1
       <listitem>
        <para>
        This optional parameter enables "binary" response for retrieval
-       of a raw record (i.e. when offset is specified). For binary
-       responses the record is <emphasis>not</emphasis> converted to
-       XML and the HTTP content type is application/octet-stream.
+       of a original record (i.e. when offset is specified). For binary
+       response the record by default is fetched from ZOOM C using
+       the "raw" option or by parameter nativesyntax if given.
        </para>
       </listitem>
      </varlistentry>
@@ -453,7 +587,16 @@ search.pz2?session=605047297&command=record&id=3
       <term>name</term>
       <listitem>
        <para>
-       comma-separated list of termlist names (default "subject")
+       comma-separated list of termlist names. If omitted,
+       all termlists are returned.
+       </para>
+      </listitem>
+     </varlistentry>
+     <varlistentry>
+      <term>num</term>
+      <listitem>
+       <para>
+       maximum number of entries to return - default is 15.
        </para>
       </listitem>
      </varlistentry>
@@ -464,7 +607,7 @@ search.pz2?session=605047297&command=record&id=3
     <screen><![CDATA[
 search.pz2?session=2044502273&command=termlist&name=author,subject
 ]]></screen>
-Output:
+    Output:
     <screen><![CDATA[
 <termlist>
   <activeclients>3</activeclients>
@@ -486,8 +629,8 @@ Output:
   </list>
 </termlist>
 ]]></screen>
-    </para>
-
+   </para>
+   
    <para>
     For the special termlist name "xtargets", results
     are returned about the targets which have returned the most hits.
@@ -506,9 +649,9 @@ Output:
   <diagnostic>0</diagnostic>           -- Z39.50 diagnostic codes
 </term>
 ]]></screen>
-    </para>
+   </para>
   </refsect2>
-
+  
 
   <refsect2 id="command-bytarget">
    <title>bytarget</title>
@@ -531,7 +674,7 @@ Output:
     <screen><![CDATA[
 search.pz2?session=605047297&command=bytarget&id=3
 ]]></screen>
-
+    
     Example output:
     
     <screen><![CDATA[
@@ -556,7 +699,8 @@ search.pz2?session=605047297&command=bytarget&id=3
   </refsect2>
 
  </refsect1>
- <refsect1><title>SEE ALSO</title>
+ <refsect1>
+  <title>SEE ALSO</title>
   <para>
    Pazpar2:
    <citerefentry>
@@ -576,15 +720,7 @@ search.pz2?session=605047297&command=bytarget&id=3
 
 <!-- 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
+mode: nxml
+nxml-child-indent: 1
 End:
 -->