+
+ <para>
+ This filter only deals with Z39.50 on input. The following services
+ are supported: init, search, present and close. The backend target
+ is selected based on the database as part search and
+ <emphasis>not</emphasis> as part of init.
+ </para>
+
+ <para>
+ This filter is an alternative to the z3950_client filter but also
+ shares properties of the virt_db - in that the target is selected
+ for a specific database
+ </para>
+
+ <para>
+ The ZOOM filter relies on a target profile description, which is
+ XML based. It picks the profile for a given database from a web service
+ or it may be locally given for each unique database (AKA virtual database
+ in virt_db). Target profiles are directly and indrectly given as part
+ of the <literal>torus</literal> element in the configuration.
+ </para>
+
+ </refsect1>
+
+ <refsect1><title>CONFIGURATION</title>
+ <para>
+ The configuration consists of four parts: <literal>torus</literal>,
+ <literal>fieldmap</literal>, <literal>cclmap</literal>
+ and <literal>log</literal>.
+ </para>
+ <refsect2><title>torus</title>
+ <para>
+ The <literal>torus</literal> element specifies target profiles
+ and takes the following content:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>attribute <literal>url</literal></term>
+ <listitem>
+ <para>
+ URL of Web service to be used to fetch target profile
+ for a given database (udb). The special sequence
+ <literal>%db</literal> of the URL is replaced by the
+ actual database specified as part of Search.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>attribute <literal>proxy</literal></term>
+ <listitem>
+ <para>
+ HTTP proxy to bse used for fetching target profiles.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>attribute <literal>xsldir</literal></term>
+ <listitem>
+ <para>
+ Directory that is searched for XSL stylesheets. Stylesheets
+ are specified in the target profile by the
+ <literal>transform</literal> element.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>attribute <literal>element_transform</literal></term>
+ <listitem>
+ <para>
+ Specifies the element that triggers retrieval and transform using
+ the parameters elementSet, recordEncoding, requestSyntax, transform
+ from the target profile. Default value
+ is "pz2", due to the fact that for historical reasons the
+ common format is that used in Pazpar2.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>attribute <literal>element_raw</literal></term>
+ <listitem>
+ <para>
+ Specifies an element that triggers retrieval using the
+ parameters elementSet, recordEncoding, requestSyntax from the
+ target profile. Same actions as for element_transform, but without
+ the XSL transform. Useful for debugging.
+ The default value is "raw".
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>element <literal>records</literal></term>
+ <listitem>
+ <para>
+ Local target profiles. This element may includes zero or
+ more <literal>record</literal> elements (one per target
+ profile). See section TARGET PROFILE.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+ <refsect2><title>fieldmap</title>
+ <para>
+ The <literal>fieldmap</literal> may be specified zero or more times and
+ specifies the map from CQL fields to CCL fields and takes the
+ following content:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>attribute <literal>cql</literal></term>
+ <listitem>
+ <para>
+ CQL field that we are mapping "from".
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>attribute <literal>ccl</literal></term>
+ <listitem>
+ <para>
+ CCL field that we are mapping "to".
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+ <refsect2><title>cclmap</title>
+ <para>
+ The third part of the configuration consists of zero or more
+ <literal>cclmap</literal> elements that specifies
+ <emphasis>base</emphasis> CCL profile to be used for all targets.
+ This configuration, thus, will be combined with cclmap-definitions
+ from the target profile.
+ </para>
+ </refsect2>
+ <refsect2><title>log</title>
+ <para>
+ The <literal>log</literal> element controls logging for the
+ ZOOM filter.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>attribute <literal>apdu</literal></term>
+ <listitem>
+ <para>
+ If the value of apdu is "true", then protocol packages
+ (APDUs and HTTP packages) from the ZOOM filter will be
+ logged to the yaz_log system. A value of "false" will
+ not perform logging of protocol packages (the default
+ behavior).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+ </refsect1>
+ <refsect1><title>QUERY HANDLING</title>
+ <para>
+ The ZOOM filter accepts three query types: RPN(Type-1), CCL and
+ CQL.
+ </para>
+ <para>
+ Queries are converted in two separate steps. In the first step
+ the input query is converted to RPN/Type-1. This is always
+ the common internal format between step 1 and step 2.
+ In step 2 the query is converted to the native query type of the target.
+ </para>
+ <para>
+ Step 1: for RPN, the query is passed unmodified to the target.
+ </para>
+ <para>
+ Step 1: for CCL, the query is converted to RPN via
+ <literal>cclmap</literal> elements part of the target profile.
+ </para>
+ <para>
+ Step 1: For CQL, the query is converted to CCL. The mappings of
+ CQL fields to CCL fields are handled by <literal>fieldmap</literal>
+ elements as part of the target profile. The resulting query, CCL,
+ is the converted to RPN using the schema mentioned earlier (via
+ <literal>cclmap</literal>).
+ </para>
+ <para>
+ Step 2: If the target is Z39.50-based, it is passed verbatim (RPN).
+ If the target is SRU-based, the RPN will be converted to CQL.
+ If the target is SOLR-based, the RPN will be converted to SOLR's query
+ type.
+ </para>
+ </refsect1>
+
+ <refsect1><title>SORTING</title>
+ <para>
+
+ </para>