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