1 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.4//EN"
2 "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
3 <!ENTITY copyright SYSTEM "copyright.xml">
4 <!ENTITY % idcommon SYSTEM "common/common.ent">
7 <refentry id="ref-zoom">
9 <productname>Metaproxy</productname>
10 <info><orgname>Index Data</orgname></info>
14 <refentrytitle>zoom</refentrytitle>
15 <manvolnum>3mp</manvolnum>
16 <refmiscinfo class="manual">Metaproxy Module</refmiscinfo>
20 <refname>zoom</refname>
21 <refpurpose>Metaproxy ZOOM Module</refpurpose>
25 <title>DESCRIPTION</title>
27 This filter implements a generic client based on
28 <ulink url="&url.yaz.zoom;">ZOOM</ulink> of YAZ.
29 The client implements the protocols that ZOOM C does: Z39.50, SRU
30 (GET, POST, SOAP) and SOLR .
34 This filter only deals with Z39.50 on input. The following services
35 are supported: init, search, present and close. The backend target
36 is selected based on the database as part search and
37 <emphasis>not</emphasis> as part of init.
41 This filter is an alternative to the z3950_client filter but also
42 shares properties of the virt_db - in that the target is selected
43 for a specific database
47 The ZOOM filter relies on a target profile description, which is
48 XML based. It picks the profile for a given database from a web service
49 or it may be locally given for each unique database (AKA virtual database
50 in virt_db). Target profiles are directly and indrectly given as part
51 of the <literal>torus</literal> element in the configuration.
57 <title>CONFIGURATION</title>
59 The configuration consists of five parts: <literal>torus</literal>,
60 <literal>fieldmap</literal>, <literal>cclmap</literal>,
61 <literal>contentProxy</literal> and <literal>log</literal>.
66 The <literal>torus</literal> element specifies target profiles
67 and takes the following content:
71 <term>attribute <literal>url</literal></term>
74 URL of Web service to be used to fetch target profile
75 for a given database (udb). The special sequence
76 <literal>%db</literal> of the URL is replaced by the
77 actual database specified as part of Search.
80 The special sequence <literal>%realm</literal> is replaced by value
81 of attribute <literal>realm</literal> or by realm DATABASE argument.
86 <term>attribute <literal>realm</literal></term>
89 The default realm value. Used for %realm in URL, unless
90 specified in DATABASE argument.
95 <term>attribute <literal>proxy</literal></term>
98 HTTP proxy to bse used for fetching target profiles.
103 <term>attribute <literal>xsldir</literal></term>
106 Directory that is searched for XSL stylesheets. Stylesheets
107 are specified in the target profile by the
108 <literal>transform</literal> element.
113 <term>attribute <literal>element_transform</literal></term>
116 Specifies the element that triggers retrieval and transform using
117 the parameters elementSet, recordEncoding, requestSyntax, transform
118 from the target profile. Default value
119 is "pz2", due to the fact that for historical reasons the
120 common format is that used in Pazpar2.
125 <term>attribute <literal>element_raw</literal></term>
128 Specifies an element that triggers retrieval using the
129 parameters elementSet, recordEncoding, requestSyntax from the
130 target profile. Same actions as for element_transform, but without
131 the XSL transform. Useful for debugging.
132 The default value is "raw".
137 <term>element <literal>records</literal></term>
140 Local target profiles. This element may includes zero or
141 more <literal>record</literal> elements (one per target
142 profile). See section TARGET PROFILE.
148 <refsect2 id="fieldmap">
149 <title>fieldmap</title>
151 The <literal>fieldmap</literal> may be specified zero or more times and
152 specifies the map from CQL fields to CCL fields and takes the
157 <term>attribute <literal>cql</literal></term>
160 CQL field that we are mapping "from".
165 <term>attribute <literal>ccl</literal></term>
168 CCL field that we are mapping "to".
174 <refsect2 id="cclmap_base">
175 <title>cclmap</title>
177 The third part of the configuration consists of zero or more
178 <literal>cclmap</literal> elements that specifies
179 <emphasis>base</emphasis> CCL profile to be used for all targets.
180 This configuration, thus, will be combined with cclmap-definitions
181 from the target profile.
185 <title>contentProxy</title>
187 The <literal>contentProxy</literal> element controls content proxy'in.
189 is optional and must only be defined if content proxy'ing is enabled.
193 <term>attribute <literal>server</literal></term>
196 Specifies the content proxy host. The host is of the form
197 host[:port]. That is without a method (such as HTTP) and optional
203 <term>attribute <literal>tmp_file</literal></term>
206 Specifies a filename of a session file for content proxy'ing. The
207 file should be an absolute filename that includes
208 <literal>XXXXXX</literal> which is replaced by a unique filename
209 using the mkstemp(3) system call. The default value of this
210 setting is <literal>/tmp/cf.XXXXXX.p</literal>.
219 The <literal>log</literal> element controls logging for the
224 <term>attribute <literal>apdu</literal></term>
227 If the value of apdu is "true", then protocol packages
228 (APDUs and HTTP packages) from the ZOOM filter will be
229 logged to the yaz_log system. A value of "false" will
230 not perform logging of protocol packages (the default
239 <title>QUERY HANDLING</title>
241 The ZOOM filter accepts three query types: RPN(Type-1), CCL and
245 Queries are converted in two separate steps. In the first step
246 the input query is converted to RPN/Type-1. This is always
247 the common internal format between step 1 and step 2.
248 In step 2 the query is converted to the native query type of the target.
251 Step 1: for RPN, the query is passed un-modified to the target.
254 Step 1: for CCL, the query is converted to RPN via
255 <link linkend="cclmap"><literal>cclmap</literal></link> elements part of
256 the target profile as well as
257 <link linkend="cclmap_base">base CCL maps</link>.
260 Step 1: For CQL, the query is converted to CCL. The mappings of
261 CQL fields to CCL fields are handled by
262 <link linkend="fieldmap"><literal>fieldmap</literal></link>
263 elements as part of the target profile. The resulting query, CCL,
264 is the converted to RPN using the schema mentioned earlier (via
265 <literal>cclmap</literal>).
268 Step 2: If the target is Z39.50-based, it is passed verbatim (RPN).
269 If the target is SRU-based, the RPN will be converted to CQL.
270 If the target is SOLR-based, the RPN will be converted to SOLR's query
276 <title>SORTING</title>
278 The ZOOM module actively handle CQL sorting - using the SORTBY parameter
279 which was introduced in SRU version 1.2. The conversion from SORTBY clause
280 to native sort for some target is driven by the two parameters:
281 <link linkend="sortStrategy"><literal>sortStrategy</literal></link>
282 and <link linkend="sortmap"><literal>sortmap_</literal><replaceable>field</replaceable></link>.
285 If a sort field that does not have an equivalent
286 <literal>sortmap_</literal>-mapping is passed un-modified through the
287 conversion. It doesn't throw a diagnostic.
292 <title>TARGET PROFILE</title>
294 The ZOOM module is driven by a number of settings that specifies how
295 to handle each target.
296 Note that unknown elements are silently <emphasis>ignored</emphasis>.
299 The elements, in alphabetical order, are:
303 <term id="zoom-torus-authentication">authentication</term><listitem>
305 Authentication parameters to be sent to the target. For
306 Z39.50 targets, this will be sent as part of the
307 Init Request. Authentication consists of two components: username
308 and password, separated by a slash.
311 If this value is omitted or empty no authentication information is sent.
316 <varlistentry id="cclmap">
317 <term>cclmap_<replaceable>field</replaceable></term><listitem>
319 This value specifies CCL field (qualifier) definition for some
320 field. For Z39.50 targets this most likely will specify the
321 mapping to a numeric use attribute + a structure attribute.
322 For SRU targets, the use attribute should be string based, in
323 order to make the RPN to CQL conversion work properly (step 2).
329 <term>cfAuth</term><listitem>
331 When cfAuth is defined, its value will be used as authentication
332 to backend target and authentication setting will be specified
333 as part of a database. This is like a "proxy" for authentication and
334 is used for Connector Framework based targets.
340 <term id="zoom-torus-cfproxy">cfProxy</term><listitem>
342 Specifies HTTP proxy for the target in the form
343 <replaceable>host</replaceable>:<replaceable>port</replaceable>.
349 <term>cfSubDB</term><listitem>
351 Specifies sub database for a Connector Framework based target.
356 <varlistentry id="zoom-torus-contentConnector">
357 <term>contentConnector</term><listitem>
359 Specifies a database for content-based proxy'ing.
365 <term>elementSet</term><listitem>
367 Specifies the elementSet to be sent to the target if record
368 transform is enabled (not to be confused' with the record_transform
369 module). The record transform is enabled only if the client uses
370 record syntax = XML and a element set determined by
371 the <literal>element_transform</literal> /
372 <literal>element_raw</literal> from the configuration.
373 By default that is the element sets <literal>pz2</literal>
374 and <literal>raw</literal>.
375 If record transform is not enabled, this setting is
376 not used and the element set specified by the client
383 <term>literalTransform</term><listitem>
385 Specifies a XSL stylesheet to be used if record
386 transform is anabled; see description of elementSet.
387 The XSL transform is only used if the element set is set to the
388 value of <literal>element_transform</literal> in the configuration.
391 The value of literalTransform is the XSL - string encoded.
397 <term>piggyback</term><listitem>
399 A value of 1/true is a hint to the ZOOM module that this Z39.50
400 target supports piggyback searches, ie Search Response with
401 records. Any other value (false) will prevent the ZOOM module
402 to make use of piggyback (all records part of Present Response).
408 <term>queryEncoding</term><listitem>
410 If this value is defined, all queries will be converted
411 to this encoding. This should be used for all Z39.50 targets that
412 do not use UTF-8 for query terms.
418 <term>recordEncoding</term><listitem>
420 Specifies the character encoding of records that are returned
421 by the target. This is primarily used for targets were records
422 are not UTF-8 encoded already. This setting is only used
423 if the record transform is enabled (see description of elementSet).
429 <term>requestSyntax</term><listitem>
431 Specifies the record syntax to be specified for the target
432 if record transform is enabled; see description of elementSet.
433 If record transform is not enabled, the record syntax of the
434 client is passed verbatim to the target.
439 <varlistentry id="sortmap">
440 <term>sortmap_<replaceable>field</replaceable></term><listitem>
442 This value the native field for a target. The form of the value is
443 given by <link linkend="sortStrategy">sortStrategy</link>.
448 <varlistentry id="sortStrategy">
449 <term>sortStrategy</term><listitem>
451 Specifies sort strategy for a target. One of:
452 <literal>z3950</literal>, <literal>type7</literal>,
453 <literal>cql</literal>, <literal>sru11</literal> or
454 <literal>embed</literal>. The <literal>embed</literal> chooses type-7
455 or CQL sortby depending on whether Type-1 or CQL is
456 actually sent to the target.
462 <term>sru</term><listitem>
464 If this setting is set, it specifies that the target is web service
465 based and must be one of : <literal>get</literal>,
466 <literal>post</literal>, <literal>soap</literal>
467 or <literal>solr</literal>.
473 <term>transform</term><listitem>
475 Specifies a XSL stylesheet filename to be used if record
476 transform is anabled; see description of elementSet.
477 The XSL transform is only used if the element set is set to the
478 value of <literal>element_transform</literal> in the configuration.
484 <term>udb</term><listitem>
486 This value is required and specifies the unique database for
487 this profile . All target profiles should hold a unique database.
492 <varlistentry id="urlRecipe">
493 <term>urlRecipe</term><listitem>
495 The value of this field is a string that generates a dynamic link
496 based on record content. If the resulting string is non-zero in length
497 a new field, <literal>metadata</literal> with attribute
498 <literal>type="generated-url"</literal>.
499 The contents of this field is the result of the URL recipe conversion.
500 The urlRecipe value may refer to an existing metadata element by
501 ${field[pattern/result/flags]}, which will take content
502 of field and perform a regular expression conversion using the pattern
503 given. For example: <literal>${md-title[\s+/+/g]}</literal> takes
504 metadadata element <literal>title</literal> and converts one or more
505 spaces to a plus character.
508 If the <link linkend="zoom-torus-contentConnector">contentConnector</link>
509 setting also defined, the resulting value is
510 augmented with a session string as well as the content proxy server.
516 <term>zurl</term><listitem>
518 This is setting is mandatory and specifies the ZURL of the
519 target in the form of host/database. The HTTP method should
520 not be provided as this is guessed from the "sru" attribute value.
527 <title>DATABASE parameters</title>
529 Extra information may be carried in the Z39.50 Database or SRU path,
530 such as authentication to be passed to backend etc. Some of
531 the parameters override TARGET profile values. The format is
534 udb,parm1=value1&parm2=value2&...
537 Where udb is the unique database recognised by the backend and parm1,
538 value1, .. are parameters to be passed. The following describes the
539 supported parameters. Like form values in HTTP the parameters and
540 values are URL encoded. The separator, though, between udb and parameters
541 is a comma rather than a question mark. What follows question mark are
542 HTTP arguments (in this case SRU arguments).
549 Specifies user to be passed to backend. If this parameter is
550 omitted, the user will be taken from TARGET profile setting
551 <link linkend="zoom-torus-authentication">
552 <literal>authentication</literal>
559 <term>password</term>
562 Specifies password to be passed to backend. If this parameters is
563 omitted, the password will be taken from TARGET profile setting
564 <link linkend="zoom-torus-authentication">
565 <literal>authentication</literal>
575 Specifies proxy to be for backend. If this parameters is
576 omitted, the proxy will be taken from TARGET profile setting
577 <link linkend="zoom-torus-cfproxy">
578 <literal>cfProxy</literal>
585 <term>cproxysession</term>
588 Session ID for content proxy. This parameter is, generally,
589 not used by anything but the content proxy itself.
597 Session realm to be used for this target, changed the resulting
598 URL to be used for getting a target profile, by changing the
599 value that gets substituted for the %realm string.
607 All parameters that has prefix x, dash are passed verbatim
615 <title>SCHEMA</title>
616 <literallayout><xi:include
617 xi:href="../xml/schema/filter_zoom.rnc"
619 xmlns:xi="http://www.w3.org/2001/XInclude" />
624 <title>EXAMPLES</title>
626 The following configuration illustrates most of the
631 url="http://torus.indexdata.com/src/records/?query=udb%3D%db"
632 proxy="localhost:3128"
634 <fieldmap cql="cql.anywhere"/>
635 <fieldmap cql="cql.serverChoice"/>
636 <fieldmap cql="dc.creator" ccl="au"/>
637 <fieldmap cql="dc.title" ccl="ti"/>
638 <fieldmap cql="dc.subject" ccl="su"/>
642 <attr type="u" value="12"/>
643 <attr type="s" value="107"/>
655 <title>SEE ALSO</title>
658 <refentrytitle>metaproxy</refentrytitle>
659 <manvolnum>1</manvolnum>
664 <refentrytitle>virt_db</refentrytitle>
665 <manvolnum>3mp</manvolnum>
673 <!-- Keep this comment at the end of the file