Document pz:sortmap
[pazpar2-moved-to-github.git] / doc / pazpar2_protocol.xml
1 <?xml version="1.0" standalone="no"?>
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.4//EN"
3  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
4 [
5      <!ENTITY % local SYSTEM "local.ent">
6      %local;
7      <!ENTITY % entities SYSTEM "entities.ent">
8      %entities;
9      <!ENTITY % idcommon SYSTEM "common/common.ent">
10      %idcommon;
11 ]>
12 <refentry id="pazpar2_protocol">
13  <refentryinfo>
14   <productname>Pazpar2</productname>
15   <productnumber>&version;</productnumber>
16   <info><orgname>Index Data</orgname></info>
17  </refentryinfo>
18  <refmeta>
19   <refentrytitle>Pazpar2 protocol</refentrytitle>
20   <manvolnum>7</manvolnum>
21   <refmiscinfo class="manual">Conventions and miscellaneous</refmiscinfo>
22  </refmeta>
23
24  <refnamediv>
25   <refname>pazpar2_protocol</refname>
26   <refpurpose>The webservice protocol of Pazpar2</refpurpose>
27  </refnamediv>
28
29  <refsect1>
30   <title>DESCRIPTION</title>
31   <para>
32    Webservice requests are any that refer to filename "search.pz2". Arguments
33    are GET-style parameters. Argument 'command' is always required and specifies
34    the operation to perform. Any request not recognized as a webservice
35    request is forwarded to the HTTP server specified in the configuration
36    using the proxy setting.
37    This way, a regular webserver can host the user interface (itself dynamic
38    or static HTML), and Ajax-style calls can be used from JS (or any other
39    client-based scripting environment) to interact with the search logic
40    in Pazpar2. 
41   </para>
42   <para>
43    Each command is described in sub sections to follow.
44   </para>
45   <refsect2 id="command-init">
46    <title>init</title>
47    <para>
48     Initializes a session.
49     Returns session ID to be used in subsequent requests. If
50     a server ID is given in the Pazpar2 server section, then a
51     period (.) and the server ID is appended to the session ID.
52    </para>
53    <para>
54     Example:
55     <screen>
56      search.pz2?command=init
57     </screen>
58    </para>
59    <para>
60     Response:
61    </para>
62    <screen><![CDATA[
63     <init>
64      <status>OK</status>
65      <session>2044502273</session>
66     </init>
67 ]]></screen>
68    <para>
69     The init command may take a number of setting parameters, similar to
70     the 'settings' command described below. These settings are immediately
71     applied to the new session. Other parameters for init are:
72     <variablelist>
73      <varlistentry>
74       <term>clear</term>
75       <listitem>
76        <para>
77         If this is defined and the value is non-zero, the session will
78         not use the predefined databases in the configuration; only those
79         specified in the settings parameters (per session databases).
80         </para>
81       </listitem>
82      </varlistentry>
83
84      <varlistentry>
85       <term>service</term>
86       <listitem>
87        <para>
88         If this is defined it specifies a service ID. Makes the session use
89         the service with this ID. If this is setting is omitted, the
90         session will use the unnamed service in the Pazpar2 configuration.
91         </para>
92       </listitem>
93      </varlistentry>
94     </variablelist>
95    </para>
96   </refsect2>
97   
98   <refsect2 id="command-ping">
99    <title>ping</title>
100    <para>
101     Keeps a session alive. An idle session will time out after one minute.
102     The ping command can be used to keep the session alive absent other
103     activity.
104     It is suggested that any browser client have a simple alarm handler which
105     sends a ping every 50 seconds or so once a session has been initialized.
106    </para>
107    <para>
108     Example:
109     <screen><![CDATA[
110      search.pz?command=ping&session=2044502273
111 ]]>
112     </screen>
113     Response:
114    <screen><![CDATA[
115 <ping>
116   <status>OK</status>
117 </ping>
118 ]]></screen>
119    </para>
120   </refsect2>
121   <refsect2 id="command-settings">
122    <title>settings</title>
123    <para>
124     The settings command applies session-specific settings to one or more
125     databases. A typical function of this is to enable access to
126     restricted resources for registered users, or to set a user- or
127     library-specific username/password to use against a target. Each
128     setting parameter has the form name[target]=value, where name is the
129     name of the setting (e.g. pz:authentication), target is a target ID,
130     or possibly a wildcard, and value is the desired value for the
131     setting.
132    </para>
133    
134    <para>
135     Because the settings command manipulates potentially sensitive
136     information, it is possible to configure Pazpar2 to only allow access
137     to this command from a trusted site -- usually from server-side
138     scripting, which in turn is responsible for authenticating the user,
139     and possibly determining which resources he has access to, etc.
140    </para>
141    
142    <note>
143     <para>
144      As a shortcut, it is also possible to override settings directly in
145      the init command.
146     </para>
147    </note>
148    
149    <para>
150     Example:
151     <screen><![CDATA[
152 search.pz?command=settings&session=2044502273&pz:allow[search.com:210/db1]=1
153       ]]></screen>
154     Response:
155    <screen><![CDATA[
156 <settings>
157   <status>OK</status>
158 </settings>
159 ]]></screen>
160    </para>
161    
162   </refsect2>
163   <refsect2 id="command-search">
164    <title>search</title>
165    <para>
166     Launches a search, parameters:
167
168     <variablelist>
169      <varlistentry>
170       <term>session</term>
171       <listitem>
172        <para>
173         Session ID
174         </para>
175       </listitem>
176      </varlistentry>
177      <varlistentry>
178       <term>query</term>
179       <listitem>
180        <para>
181         CCL query
182         </para>
183       </listitem>
184      </varlistentry>
185      <varlistentry>
186       <term>filter</term>
187       <listitem>
188        <para>
189         Limits the search to a given set of targets specified by the
190         filter. The filter consists a comma separated list of
191         <emphasis>setting</emphasis>+<emphasis>operator</emphasis>+<emphasis>args</emphasis>
192         pairs. The <emphasis>setting</emphasis> is a Pazpar2 setting
193         (such as <literal>pz:id</literal>).
194         The <emphasis>operator</emphasis> is either
195         <literal>=</literal> (string match)
196         or <literal>~</literal> (substring match).
197         The <emphasis>args</emphasis> is a list of values separated
198         by <literal>|</literal> (or , one of the values).
199         The idea is that only targets with a setting matching one of
200         the values given will be included in the search.
201        </para>
202       </listitem>
203      </varlistentry>
204      <varlistentry>
205       <term>limit</term>
206       <listitem>
207        <para>
208         Narrows the search by one or more fields (typically facets).
209         The limit is sequence of one or more
210         <emphasis>name</emphasis>=<emphasis>args</emphasis> pairs separated
211         by comma. The <emphasis>args</emphasis> is a list of values
212         separated by vertical bar (<literal>|</literal>).
213         The meaning of <literal>|</literal> is alternative, ie OR .
214         A value that contains a comma (<literal>,</literal>),
215         a vertical bar (<literal>|</literal>) or
216         backslash itself must be preceded by backslash (<literal>\</literal>).
217         The <link linkend="limitmap">pz:limitmap</link> configuration
218         item defines how the searches are mapped to a database.
219        </para>
220       </listitem>
221      </varlistentry>
222      <varlistentry>
223       <term>startrecs</term>
224       <listitem>
225        <para>
226         Specifies the first record to retrieve from each target.
227         The first record in a result set for a target is numbered 0, next
228         record is numbered 2. By default maxrecs is 0.
229         </para>
230       </listitem>
231      </varlistentry>
232      <varlistentry>
233       <term>maxrecs</term>
234       <listitem>
235        <para>
236         Specifies the maximum number of records to retrieve from each
237         target. The default value is 100. This setting has same meaning
238         as per-target setting pz:maxrecs . If pz:maxrecs is set, it takes
239         precedence over argument maxrecs.
240         </para>
241       </listitem>
242      </varlistentry>
243     </variablelist>
244
245    </para>
246    <para>
247     Example:
248     <screen><![CDATA[
249 search.pz2?session=2044502273&command=search&query=computer+science
250 ]]>
251      </screen>
252     Response:
253    <screen><![CDATA[
254 <search>
255   <status>OK</status>
256 </search>
257      ]]></screen>
258    </para>
259   </refsect2>
260  
261   <refsect2 id="command-stat">
262    <title>stat</title>
263    <para>
264     Provides status information about an ongoing search. Parameters:
265
266     <variablelist>
267      <varlistentry>
268       <term>session</term>
269       <listitem>
270        <para>
271         Session ID
272         </para>
273       </listitem>
274      </varlistentry>
275     </variablelist>
276
277    </para>
278    <para>
279     Example:
280    <screen><![CDATA[
281 search.pz2?session=2044502273&command=stat
282     ]]></screen>
283     Output
284     <screen><![CDATA[
285 <stat>
286   <activeclients>3</activeclients>
287   <hits>7</hits>                   -- Total hitcount
288   <records>7</records>             -- Total number of records fetched in last query
289   <clients>1</clients>             -- Total number of associated clients
290   <unconnected>0</unconnected>     -- Number of disconnected clients
291   <connecting>0</connecting>       -- Number of clients in connecting state
292   <initializing>0</initializing>   -- Number of clients initializing
293   <searching>0</searching>         -- ... searching
294   <presenting>0</presenting>       -- ... presenting
295   <idle>1</idle>                   -- ... idle (not doing anything)
296   <failed>0</failed>               -- ... Connection failed
297   <error>0</error>                 -- ... Error was produced somewhere
298 </stat>
299      ]]></screen>
300   </para>
301   </refsect2>
302   
303   <refsect2 id="command-show">
304    <title>show</title>
305    <para>
306     Shows records retrieved. Parameters:
307     <variablelist>
308      <varlistentry>
309       <term>session</term>
310       <listitem>
311        <para>
312         Session ID
313        </para>
314       </listitem>
315      </varlistentry>
316      
317      <varlistentry>
318       <term>start</term>
319       <listitem>
320        <para>First record to show - 0-indexed.</para>
321       </listitem>
322      </varlistentry>
323      
324      <varlistentry>
325       <term>num</term>
326       <listitem>
327        <para>
328         Number of records to show If omitted, 20 is used.
329        </para>
330       </listitem>
331      </varlistentry>
332
333      <varlistentry>
334       <term>block</term>
335       <listitem>
336        <para>
337         If block is set to 1, the command will hang until there are records
338         ready to display. Use this to show first records rapidly without
339         requiring rapid polling.
340        </para>
341       </listitem>
342      </varlistentry>
343
344      <varlistentry>
345       <term>sort</term>
346       <listitem>
347        <para>
348         Specifies sort criteria. The argument is a comma-separated list
349         (no whitespace allowed) of sort fields, with the highest-priority
350         field first. A sort field may be followed by a colon followed by
351         the number '0' or '1', indicating whether results should be sorted in
352         increasing or decreasing order according to that field. 0==Decreasing is
353         the default.
354         Sort field names can be any field name designated as a sort field
355         in the pazpar2.cfg file, or the special names 'relevance' and
356         'position'.
357        </para>
358        <para>
359         For targets where If <link linkend="pz:sortmap">pz:sortmap</link>
360         is defined, a sort operation will be executed (possibly including
361         extending the search).
362        </para>
363       </listitem>
364      </varlistentry>
365      
366     </variablelist>
367    </para>
368    <para>
369     Example:
370     <screen><![CDATA[
371 search.pz2?session=2044502273&command=show&start=0&num=2&sort=title:1
372 ]]></screen>
373     Output:
374     <screen><![CDATA[
375 <show>
376   <status>OK</status>
377   <activeclients>3</activeclients>     -- How many clients are still working
378   <merged>6</merged>                   -- Number of merged records
379   <total>7</total>                     -- Total of all hitcounts
380   <start>0</start>                     -- The start number you requested
381   <num>2</num>                         -- Number of records retrieved
382   <hit>
383     <md-title>How to program a computer, by Jack Collins</md-title>
384     <count>2</count>                   -- Number of merged records 
385     <recid>6</recid>                   -- Record ID for this record
386   </hit>
387   <hit>
388     <md-title>
389   Computer processing of dynamic images from an Anger scintillation camera :
390   the proceedings of a workshop /
391     </md-title>
392     <recid>2</recid>
393   </hit>
394 </show>
395      ]]></screen>
396    </para>
397   </refsect2>
398
399   <refsect2 id="command-record">
400    <title>record</title>
401    <para>
402     Retrieves a detailed record. Unlike the 
403     <link linkend="command-show">show</link> command, this command 
404     returns metadata records before merging takes place. Parameters:
405     
406     <variablelist>
407      <varlistentry>
408       <term>session</term>
409       <listitem>
410        <para>
411         Session ID
412        </para>
413       </listitem>
414      </varlistentry>
415
416      <varlistentry>
417       <term>id</term>
418       <listitem>
419        <para>
420         record ID as provided by the
421         <link linkend="command-show">show</link> command.
422         </para>
423       </listitem>
424      </varlistentry>
425
426      <varlistentry>
427       <term>offset</term>
428       <listitem>
429        <para>
430         This optional parameter is an integer which, when given, makes
431         Pazpar2 return the raw record for a target. The raw record
432         from first target is numbered 0, second numbered 1, etc.
433         When a raw record is returned Pazpar2 will XSLT transform the
434         record but an XML version is returned. All ISO2709 records are
435         returned as MARCXML. OPAC records are returned as YAZ'
436         OPAC with an MARCXML sibling.
437        </para>
438        <para>
439         When offset is not given the Pazpar2 metadata for the record
440         is returned and with metadata for each targets' data specified
441         in a 'location' list.
442        </para>
443       </listitem>
444      </varlistentry>
445
446      <varlistentry>
447       <term>syntax</term>
448       <listitem>
449        <para>
450         This optional parameter is the record syntax used for raw 
451         transfer (i.e. when offset is specified). If syntax is not given,
452         but offset is used, the value of pz:requestsyntax is used.
453        </para>
454       </listitem>
455      </varlistentry>
456
457      <varlistentry>
458       <term>esn</term>
459       <listitem>
460        <para>
461         This optional parameter is the element set name used to retrieval
462         of a raw record (i.e. when offset is specified).
463         If esn is not given, but offset is used, the value of pz:elements
464         is used.
465        </para>
466       </listitem>
467      </varlistentry>
468
469      <varlistentry>
470       <term>binary</term>
471       <listitem>
472        <para>
473         This optional parameter enables "binary" response for retrieval
474         of a raw record (i.e. when offset is specified). For binary
475         responses the record is <emphasis>not</emphasis> converted to
476         XML and the HTTP content type is application/octet-stream.
477        </para>
478       </listitem>
479      </varlistentry>
480
481     </variablelist>
482    </para>
483    <para> 
484     Example:
485     <screen><![CDATA[
486 search.pz2?session=605047297&command=record&id=3
487 ]]></screen>
488
489     Example output:
490     
491     <screen><![CDATA[
492 <record>
493   <md-title>
494         The Puget Sound Region : a portfolio of thematic computer maps /
495   </md-title>
496   <md-date>1974</md-date>
497   <md-author>Mairs, John W.</md-author>
498   <md-subject>Cartography</md-subject>
499 </record>
500 ]]></screen>
501    </para>
502   </refsect2>
503
504   <refsect2 id="command-termlist">
505    <title>termlist</title>
506    <para>
507     Retrieves term list(s). Parameters:
508     
509     <variablelist>
510      <varlistentry>
511       <term>session</term>
512       <listitem>
513        <para>
514         Session Id.
515        </para>
516       </listitem>
517      </varlistentry>
518      <varlistentry>
519       <term>name</term>
520       <listitem>
521        <para>
522         comma-separated list of termlist names. If omitted,
523         all termlists are returned.
524        </para>
525       </listitem>
526      </varlistentry>
527      <varlistentry>
528       <term>num</term>
529       <listitem>
530        <para>
531         maximum number of entries to return - default is 15.
532        </para>
533       </listitem>
534      </varlistentry>
535     </variablelist>
536    </para>
537    <para>
538     Example:
539     <screen><![CDATA[
540 search.pz2?session=2044502273&command=termlist&name=author,subject
541 ]]></screen>
542     Output:
543     <screen><![CDATA[
544 <termlist>
545   <activeclients>3</activeclients>
546   <list name="author">
547     <term>
548       <name>Donald Knuth</name>
549       <frequency>10</frequency>
550     </term>
551       <term>
552       <name>Robert Pirsig</name>
553       <frequency>2</frequency>
554     </term>
555   </list>
556   <list name="subject">
557     <term>
558       <name>Computer programming</name>
559       <frequency>10</frequency>
560     </term>
561   </list>
562 </termlist>
563 ]]></screen>
564    </para>
565    
566    <para>
567     For the special termlist name "xtargets", results
568     are returned about the targets which have returned the most hits.
569     The 'term' subtree has additional elements,
570     specifically a state and diagnostic field (in the example below, a
571     target ID is returned in place of 'name'.
572     This may or may not change later.
573    </para>
574    <para>
575     Example
576     <screen><![CDATA[
577 <term>
578   <name>library2.mcmaster.ca</name>
579   <frequency>11734</frequency>         -- Number of hits
580   <state>Client_Idle</state>           -- See the description of 'bytarget' below
581   <diagnostic>0</diagnostic>           -- Z39.50 diagnostic codes
582 </term>
583 ]]></screen>
584    </para>
585   </refsect2>
586   
587
588   <refsect2 id="command-bytarget">
589    <title>bytarget</title>
590    <para>
591     Returns information about the status of each active client. Parameters:
592
593     <variablelist>
594      <varlistentry>
595       <term>session</term>
596       <listitem>
597        <para>
598         Session Id.
599         </para>
600       </listitem>
601      </varlistentry>
602     </variablelist>
603    </para>
604    <para> 
605     Example:
606     <screen><![CDATA[
607 search.pz2?session=605047297&command=bytarget&id=3
608 ]]></screen>
609     
610     Example output:
611     
612     <screen><![CDATA[
613 <bytarget>
614   <status>OK</status>
615   <target>
616     <id>z3950.loc.gov/voyager/</id>
617     <hits>10000</hits>
618     <diagnostic>0</diagnostic>
619     <records>65</records>
620     <state>Client_Presenting</state>
621   </target>
622   <!-- ... more target nodes below as necessary -->
623 </bytarget>
624 ]]></screen>
625     
626     The following client states are defined: Client_Connecting,
627     Client_Connected, Client_Idle, Client_Initializing, Client_Searching,
628     Client_Searching, Client_Presenting, Client_Error, Client_Failed,
629     Client_Disconnected, Client_Stopped, Client_Continue.
630    </para>
631   </refsect2>
632
633  </refsect1>
634  <refsect1>
635   <title>SEE ALSO</title>
636   <para>
637    Pazpar2:
638    <citerefentry>
639     <refentrytitle>pazpar2</refentrytitle>
640     <manvolnum>8</manvolnum>
641    </citerefentry>
642   </para>
643   <para>
644    Pazpar2 Configuration:
645    <citerefentry>
646     <refentrytitle>pazpar2_conf</refentrytitle>
647     <manvolnum>5</manvolnum>
648    </citerefentry>
649   </para>
650  </refsect1>
651 </refentry>
652
653 <!-- Keep this comment at the end of the file
654 Local variables:
655 mode: nxml
656 nxml-child-indent: 1
657 End:
658 -->