<!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;
     <!ENTITY % entities SYSTEM "entities.ent">
     %entities;
     <!ENTITY % idcommon SYSTEM "common/common.ent">
     %idcommon;
]>
<refentry id="yaz-client">
 <refentryinfo>
  <productname>YAZ</productname>
  <productnumber>&version;</productnumber>
  <orgname>Index Data</orgname>
 </refentryinfo>

 <refmeta>
  <refentrytitle>yaz-client</refentrytitle>
  <manvolnum>1</manvolnum>
  <refmiscinfo class="manual">Commands</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>yaz-client</refname>
  <refpurpose>Z39.50/SRU client for implementors</refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <cmdsynopsis>
   <command>yaz-client</command>
   <arg choice="opt"><option>-a <replaceable>apdulog</replaceable></option></arg>
   <arg choice="opt"><option>-b <replaceable>berdump</replaceable></option></arg>
   <arg choice="opt"><option>-c <replaceable>cclfile</replaceable></option></arg>
   <arg choice="opt"><option>-d <replaceable>dump</replaceable></option></arg>
   <arg choice="opt"><option>-f <replaceable>cmdfile</replaceable></option></arg>
   <arg choice="opt"><option>-k <replaceable>size</replaceable></option></arg>
   <arg choice="opt"><option>-m <replaceable>marclog</replaceable></option></arg>
   <arg choice="opt"><option>-p <replaceable>proxy-addr</replaceable></option></arg>
   <arg choice="opt"><option>-q <replaceable>cqlfile</replaceable></option></arg>
   <arg choice="opt"><option>-t <replaceable>dispcharset</replaceable></option></arg>
   <arg choice="opt"><option>-u <replaceable>auth</replaceable></option></arg>
   <arg choice="opt"><option>-v <replaceable>loglevel</replaceable></option></arg>
   <arg choice="opt"><option>-V</option></arg>
   <arg choice="opt"><option>-x</option></arg>
   <arg choice="opt">server-addr</arg>
  </cmdsynopsis>

 </refsynopsisdiv>

 <refsect1><title>DESCRIPTION</title>
  <para>
   <command>yaz-client</command> is a
   <ulink url="&url.z39.50;">Z39.50</ulink>/<ulink url="&url.sru;">SRU</ulink>
   client (origin) with a simple command line interface that allows
   you to test behavior and performance of Z39.50 targets and SRU servers.
  </para>
  <para>
   From YAZ version 4.1.0 <command>yaz-client</command> may also operate as a
   <ulink url="&url.solr;">Solr</ulink> Web Service
   client.
  </para>
  <para>
   If the <replaceable>server-addr</replaceable> is specified, the client creates
   a connection to the Z39.50/SRU target at the address given.
  </para>
  <para>
   When <command>yaz-client</command> is started it tries to read
   commands from one of the following files:
   <itemizedlist>
    <listitem><para>
      Command file if it is given by option -f.
     </para></listitem>
    <listitem><para>
      <filename>.yazclientrc</filename> in current working directory.
     </para></listitem>
    <listitem><para>
      <filename>.yazclientrc</filename> in the user's home directory.
      The value of the <literal>$HOME</literal> environment variable is used to determine
      the home directory. Normally, <literal>$HOME</literal> is only set
      on POSIX systems such as Linux, FreeBSD, Solaris.
     </para></listitem>
   </itemizedlist>
  </para>
 </refsect1>
  <refsect1>
   <title>OPTIONS</title>
   <variablelist>
    <varlistentry>
     <term>-a <replaceable>filename</replaceable></term>
     <listitem><para>
       If specified, logging of protocol packages will be appended
       to the file given. If <replaceable>filename</replaceable> is
       specified as <literal>-</literal>, the output is written
       to <literal>stdout</literal>.
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-b <replaceable>filename</replaceable></term>
     <listitem><para>
       If specified, YAZ will dump BER data in readable notation
       to the file specified. If <replaceable>filename</replaceable>
       is specified as <literal>-</literal> the output is written
       to <literal>stdout</literal>.
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-c <replaceable>filename</replaceable></term>
     <listitem><para>
       If specified, CCL configuration will be read from
       the file given.
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-d <replaceable>dump</replaceable></term>
     <listitem><para>
       If specified, YAZ will dump BER data for all PDUs sent and received
       to individual files, named
       <replaceable>dump</replaceable>.DDD.<literal>raw</literal>,
       where DDD is 001, 002, 003, ...
      </para></listitem>
    </varlistentry>

    <varlistentry>
     <term>-f <replaceable>cmdfile</replaceable></term>
     <listitem><para>
      Reads commands from <replaceable>cmdfile</replaceable>. When
      this option is used, YAZ client does not read <filename>.yazclientrc</filename>
      from current directory or home directory.
      </para></listitem>
    </varlistentry>

    <varlistentry>
     <term>-k <replaceable>size</replaceable></term>
     <listitem><para>
      Sets preferred messages and maximum record size for Initialize
      Request in kilobytes. Default value is 65536 (64 MB).
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-m <replaceable>filename</replaceable></term>
     <listitem><para>
       If specified, retrieved records will be appended to the file given.
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-p <replaceable>proxy-addr</replaceable></term>
     <listitem><para>
       If specified, the client will use the proxy at the address
       given. YAZ client will
       connect to a proxy on the address and port given.
       The actual target will be specified as part of the InitRequest
       to inform the proxy about the actual target.
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-q <replaceable>filename</replaceable></term>
     <listitem><para>
       If specified, CQL configuration will be read from
       the file given.
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-t <replaceable>displaycharset</replaceable></term>
     <listitem><para>
       If displaycharset is given, it specifies name of the character set of the
       output (on the terminal on which YAZ client is running).
      </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-u <replaceable>auth</replaceable></term>
     <listitem><para>
       If specified, the <replaceable>auth</replaceable> string
       will be used for authentication.
      </para></listitem>
    </varlistentry>
    <varlistentry><term>
      <literal>-v</literal> <replaceable>level</replaceable>
     </term><listitem>
      <simpara>Sets the LOG level to <replaceable>level</replaceable>.
       Level is a sequence of tokens separated by comma. Each token
       is a integer or a named LOG item - one of
       <literal>fatal</literal>,
       <literal>debug</literal>,
       <literal>warn</literal>,
       <literal>log</literal>,
       <literal>malloc</literal>,
       <literal>all</literal>,
       <literal>none</literal>.
      </simpara></listitem>
    </varlistentry>
    <varlistentry>
     <term>-V</term>
     <listitem><para>
       Prints YAZ version.
     </para></listitem>
    </varlistentry>
    <varlistentry>
     <term>-x</term>
     <listitem><para>
       Makes the YAZ client print hex dumps of packages sent and received
       on standard output.
       </para></listitem>
    </varlistentry>
   </variablelist>
  </refsect1>
 <refsect1>
  <title>COMMANDS</title>
  <para>
   The YAZ client accepts the following commands.
  </para>
  <variablelist>
   <varlistentry id="command-open"><term>
     <literal>open </literal><replaceable>zurl</replaceable>
    </term>
    <listitem>
     <para>Opens a connection to a server. The syntax for
      <replaceable>zurl</replaceable> is the same as described
      above for connecting from the command line.
     </para>
     <para>
      Syntax:
     </para>
     <para>
      [<literal>(tcp|ssl|unix|http)':'</literal>]<replaceable>host</replaceable>
      [:<replaceable>port</replaceable>][/<replaceable>base</replaceable>]
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>quit</literal>
    </term>
    <listitem>
     <para>Quits YAZ client</para>
    </listitem>
   </varlistentry>
   <varlistentry id="command-find"><term>
     <literal>find </literal><replaceable>query</replaceable></term>
    <listitem>
     <para>Sends a Search Request using the <replaceable>query</replaceable>
      given. By default the query is assumed to be PQF. See command
      <link linkend="command-querytype">querytype</link> for more information.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>delete</literal> <replaceable>setname</replaceable></term>
    <listitem>
     <para>Deletes result set with name <replaceable>setname</replaceable>
      on the server.</para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>base </literal><replaceable>base1</replaceable>
     <replaceable>base2</replaceable> ...
    </term>
    <listitem>
     <para>Sets the name(s) of the database(s) to search. One or more
      databases may be specified, separated by blanks. This command overrides
      the database given in <replaceable>zurl</replaceable>.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>show </literal>
     [<replaceable>start</replaceable>[+<replaceable>number</replaceable>
     [+<replaceable>resultset</replaceable>]]]
    </term>
    <listitem>
     <para>Fetches records by sending a Present Request from the start
      position given by
      <replaceable>start</replaceable>
      and a number of records given by <replaceable>number</replaceable>,
      from the result set <replaceable>resultset</replaceable>.  If
      <replaceable>start</replaceable> is not given, then the client
      will fetch from the position of the last retrieved record plus 1. If
      <replaceable>number</replaceable> is not given, then one record will
      be fetched at a time. If <replaceable>resultset</replaceable> is not
      given, the most recently retrieved result set is used.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>scan</literal> <replaceable>term</replaceable>
    </term>
    <listitem>
     <simpara>Scans
      database index for a term. The syntax resembles the syntax
      for <link linkend="command-find"><literal>find</literal></link>.
      If you want to scan for the word <literal>water</literal> you could
      write
     </simpara>
     <screen>
      scan water
     </screen>
     <simpara>
      but if you want to scan only in, say the title field, you would write
     </simpara>
     <screen>
      scan @attr 1=4 water
     </screen>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>setscan</literal> <replaceable>set</replaceable> <replaceable>term</replaceable>
    </term>
    <listitem>
     <simpara>Scans database index for a term within a result set. This
      is similar to the scan command but has a result set as its first argument.
     </simpara>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>scanpos</literal> <replaceable>pos</replaceable>
    </term>
    <listitem>
     <simpara>
      Sets preferred position for scan. This value
      is used in the next scan. By default, position is 1.
     </simpara>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>scansize</literal> <replaceable>size</replaceable>
    </term>
    <listitem>
     <simpara>
      Sets number of entries to be returned by scan. Default
      number of entries is 20.
     </simpara>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>scanstep</literal> <replaceable>step</replaceable>
    </term>
    <listitem>
     <simpara>
      Set step-size for scan. This value is used in the next scan
      sent to the target. By default step-size is 0.
     </simpara>
    </listitem>
   </varlistentry>
   <varlistentry id="sortspec"><term>
     <literal>sort</literal> <replaceable>sortspecs</replaceable>
    </term>
    <listitem>
     <para>Sorts a result set. The sort command takes a
      sequence of space-separated sort specifications, with each sort
      specification consisting of two space-separated words (so that the
      whole specification list is made up of an even number of words).
      The first word of each specification
      holds a field (sort criterion) and the second holds flags.
      If the sort criterion includes <literal>=</literal> it is assumed
      that the <literal>SortKey</literal> is of type
      <literal>sortAttributes</literal> using Bib-1: in this case
      the integer before <literal>=</literal> is
      the attribute type and the integer following <literal>=</literal>
      is the attribute value.
      If no <literal>=</literal> character is in the criterion, it is treated
      as a sortfield of type InternationalString.
      The flags word of each sort specification must consist of
      <literal>s</literal>
      for case sensitive or <literal>i</literal> for case insensitive, and
      <literal>&lt;</literal> for ascending order or <literal>&gt;</literal>
      for descending order.
     </para>
     <para>
      Example using sort criterion with attributes use=local-number
      and structure=numeric and ascending flag:
      <literal>1=12,4=109 &lt;</literal>
     </para>
     <para>
      Another example with "Title" sort field and descending flag:
      <literal>Title &gt;</literal>
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>sort+</literal>
    </term>
    <listitem>
     <para>Same as <literal>sort</literal> but stores the sorted
      result set in a new result set.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>authentication</literal> [<replaceable>auth1</replaceable> [<replaceable>auth2</replaceable> [<replaceable>auth3</replaceable>]]]
    </term>
    <listitem>
     <para>Configures authentication strings to be sent to server. Zero, 1, 2 or 3 arguments may follow the
     auth command.
     </para>
     <para>If no (0) arguments are given, no authentication string is sent.</para>
     <para>If one argument is given, the Z39.50 v2 OpenStyle authentication is used.
      A common convention for the <replaceable>auth1</replaceable> string
      is that the username and password is separated by a slash, e.g.
      <literal>myusername/mysecret</literal>.
     </para>
     <para>
      If two or more arguments is given Z39.50 v3 authentication is used, in which cased the
      first argument is used, second argument is group and third argument is password. If only two arguments are given
      the group is assumed to be empty.
     </para>
     <para>
      As for other commands in yaz-client, the arguments are separated by whitespace. A backslash character can be used to include
      a character verbatim. For example, <literal>auth myuser a\ b</literal> is a two argument auth command where user is
      <literal>myuser</literal> and password is <literal>a b</literal>.
     </para>
     <para>
     The authentication string is first
      sent to the server when the
      <link linkend="command-open"><literal>open</literal></link> command is
      issued and the Z39.50 Initialize Request is sent, so this command
      must be used before <literal>open</literal> in order to be effective.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>sru</literal> <replaceable>method</replaceable> <replaceable>version</replaceable>
    </term>
    <listitem>
     <para>Selects Web Service method and version.
      Must be one of <literal>post</literal>,
      <literal>get</literal>, <literal>soap</literal> (default)
      or <literal>solr</literal>. Version
      should be either 1.1, 1.2 or 2.0 for SRU.
      Other versions are allowed - for testing
      purposes (version negotiation with SRU server).
      The version is currently not used for Solr Web Services
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>list_all</literal>
    </term>
    <listitem>
     <para>This command displays status and values for many settings.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>lslb</literal> <replaceable>n</replaceable>
    </term>
    <listitem>
     <para>Sets the limit for when no records should be returned
      together with the search result.
      See the
      <ulink
       url="https://loc.gov/standards/z3950/agency/markup/04.html#3.2.2.1.6">
       Z39.50 standard on set bounds
      </ulink>
      for more details.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>ssub</literal> <replaceable>n</replaceable>
    </term>
    <listitem>
     <para>Sets the limit for when all records should be returned with
      the search result.
      See the
      <ulink
       url="https://loc.gov/standards/z3950/agency/markup/04.html#3.2.2.1.6">
       Z39.50 standard on set bounds
      </ulink> for more details.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>mspn</literal> <replaceable>n</replaceable>
    </term>
    <listitem>
     <para>Sets the number of records that should be returned if the
      number of records in the result set is between the values of
      <literal>lslb</literal> and <literal>ssub</literal>.
      See the
      <ulink
       url="https://loc.gov/standards/z3950/agency/markup/04.html#3.2.2.1.6">
       Z39.50 standard on set bounds
      </ulink>
      for more details.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>status</literal>
    </term>
    <listitem>
     <para>Displays the values of <literal>lslb</literal>,
      <literal>ssub</literal> and <literal>mspn</literal>.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>setname</literal>
    </term>
    <listitem>
     <para>Switches named result sets on and off. Default is on.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>cancel</literal>
    </term>
    <listitem>
     <para>Sends a Trigger Resource Control Request to the target.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>facets</literal> <replaceable>spec</replaceable>
    </term>
    <listitem>
     <para>
       Specifies requested facets to be used in search. The notation
       is specified in <xref linkend="facets"/>.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>format</literal> <replaceable>oid</replaceable>
    </term>
    <listitem>
     <para>Sets the preferred transfer syntax for retrieved records.
      yaz-client supports all the record syntaxes that currently
      are registered. See
      <ulink
       url="https://loc.gov/standards/z3950/agency/defns/oids.html#5">
       Z39.50 Record Syntax Identifiers
      </ulink>
      for more details. Commonly used records syntaxes include usmarc,
      sutrs and xml.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>elements</literal> <replaceable>e</replaceable>
    </term>
    <listitem>
     <para>Sets the element set name for the records. Many targets support
      element sets B (for brief) and F (for full).
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>close</literal>
    </term>
    <listitem>
     <para>Sends a Z39.50 Close APDU and closes connection with the peer
     </para>
    </listitem>
   </varlistentry>
   <varlistentry id="command-querytype"><term>
     <literal>querytype</literal> <replaceable>type</replaceable>
    </term>
    <listitem>
     <para>Sets the query type as used by command
      <link linkend="command-find"><literal>find</literal></link>.
      The following is supported:
      <literal>prefix</literal> for
      <link linkend="PQF">Prefix Query Notation</link> (Type-1 Query);
      <literal>ccl</literal> for CCL search (Type-2 Query),
      <literal>cql</literal> for CQL (Type-104 search with CQL OID),
      <literal>ccl2rpn</literal> for
      <link linkend="CCL">CCL</link> to RPN conversion (Type-1 Query),
      <literal>cql2rpn</literal> for
      CQL to RPN conversion (Type-1 Query).
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>attributeset</literal> <replaceable>set</replaceable>
    </term>
    <listitem>
     <para>
      Sets attribute set OID for prefix queries (RPN, Type-1).
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>refid</literal> <replaceable>id</replaceable>
    </term>
    <listitem>
     <para>Sets reference ID for Z39.50 Request(s).
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>itemorder</literal>
     <replaceable>type</replaceable> <replaceable>no</replaceable>
    </term>
    <listitem>
     <para>Sends an Item Order Request using the ILL External.
      <replaceable>type</replaceable> is either 1 or 2 which corresponds to
      ILL-Profile 1 and 2 respectively. The <replaceable>no</replaceable>
      is the Result Set position of the record to be ordered.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry><term>
     <literal>update</literal>
     <replaceable>action</replaceable>
     <replaceable>recid</replaceable>
     <replaceable>doc</replaceable>
    </term>
    <listitem>
     <para>Sends Item Update Request. The <replaceable>action</replaceable>
      argument must be the action type: one of <literal>insert</literal>,
      <literal>replace</literal>, <literal>delete</literal> and
      <literal>update</literal>. The second argument,
      <replaceable>recid</replaceable>, is the
      record identifier (any string). Third argument which is optional is
      the record document for the request. If doc is preceded with
      "&lt;", then the following characters are treated as a filename
      with the records to be updated. Otherwise doc is treated as
      a document itself. The doc may also be quoted in double quotes.
      If doc is omitted, the last received record (as part of present
      response or piggybacked search response) is used for the update.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>source</literal>
     <replaceable>filename</replaceable>
    </term>
    <listitem>
     <para>Executes list of commands from
      file <replaceable>filename</replaceable>, just like 'source' on
      most UNIX shells. A single dot (<literal>.</literal>) can be used
      as an alternative.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>!</literal>
     <replaceable>args</replaceable>
    </term>
    <listitem>
     <para>Executes command <replaceable>args</replaceable> in subshell
      using the <literal>system</literal> call.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>push_command</literal>
     <replaceable>command</replaceable>
    </term>
    <listitem>
     <para>The push_command takes another command as its argument.
      That command is then added to the history information (so
      you can retrieve it later). The command itself is not
      executed. This command only works if you have GNU readline/history
      enabled.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>set_apdufile</literal>
     <replaceable>filename</replaceable>
    </term>
    <listitem>
     <para>Sets that APDU should be logged to file
      <replaceable>filename</replaceable>. Another way to achieve
      APDU log is by using command-line option <literal>-a</literal>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>set_auto_reconnect</literal>
     <replaceable>flag</replaceable>
    </term>
    <listitem>
     <para>Specifies whether YAZ client automatically reconnects if the
      target closes connection (Z39.50 only).
     </para>
     <para>
      <replaceable>flag</replaceable> must be either
      <literal>on</literal> or <literal>off</literal>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="command-set-auto-wait"><term>
     <literal>set_auto_wait</literal>
     <replaceable>flag</replaceable>
    </term>
    <listitem>
     <para>Specifies whether YAZ client should wait for
      response protocol packages after a request.
      By default YAZ client waits (<literal>on</literal>) for response packages immediately
      after a command (find, show) has been issued. If <literal>off</literal>
      is used, YAZ client does not attempt to receive packages automatically.
      These will have to be manually received when command
      <link linkend="command-wait-response">
       <literal>wait_response</literal>
      </link> is used.
     </para>
     <para>
      <replaceable>flag</replaceable> must be either
      <literal>on</literal> or <literal>off</literal>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>set_marcdump</literal>
     <replaceable>filename</replaceable>
    </term>
    <listitem>
     <para>Specifies that all retrieved records should be appended to
      file <replaceable>filename</replaceable>. This command does the
      same thing as option <literal>-m</literal>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>schema</literal>
     <replaceable>schemaid</replaceable>
    </term>
    <listitem>
     <para>Specifies schema for retrieval.
      Schema may be specified as an OID for Z39.50.
      For SRU, schema is a simple string URI.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="command-charset"><term>
     <literal>charset</literal>
     <replaceable>negotiationcharset</replaceable>
     [<replaceable>displaycharset</replaceable>]
     [[<replaceable>marccharset</replaceable>]]
    </term>
    <listitem>
     <para>Specifies character set (encoding) for Z39.50
      negotiation / SRU encoding and/or character set for output (terminal).
     </para>
     <para>
      <replaceable>negotiationcharset</replaceable> is the name
      of the character set to be negotiated by the server. The special name
      <literal>-</literal> for <replaceable>negotiationcharset</replaceable>
      specifies <emphasis>no</emphasis> character set to be negotiated.
     </para>
     <para>
      If <replaceable>displaycharset</replaceable> is given, it specifies name
      of the character set of the output (on the terminal on which
      YAZ client is running). To disable conversion of characters
      to the output encoding, the special name <literal>-</literal> (dash)
      can be used.
      If the special name <literal>auto</literal> is given, YAZ client will
      convert strings to the encoding of the
      terminal as returned by <function>nl_langinfo</function> call.
     </para>
     <para>
      If <replaceable>marccharset</replaceable> is given, it specifies name
      of the character set of retrieved MARC records from server. See
      also <literal>marccharset</literal> command.
     </para>
     <note>
      <para>
       Since character set negotiation takes effect in the Z39.50
       Initialize Request you should issue this command before
       command <link linkend="command-open"><literal>open</literal></link>
       is used.
      </para>
     </note>
     <note>
      <para>
       MARC records are not covered by Z39.50 character set negotiation,
       so that's why there is a separate character that must be known
       in order to do meaningful conversion(s).
      </para>
     </note>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>negcharset</literal>
     <replaceable>charset</replaceable>
    </term>
    <listitem>
     <para>Specifies character set for negotiation (Z39.50). The
      argument is the same as second argument for command
      <link linkend="command-charset"><literal>charset</literal></link>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>displaycharset</literal>
     <replaceable>charset</replaceable>
    </term>
    <listitem>
     <para>Specifies character set for output (display). The
      argument is the same as second argument for command
      <link linkend="command-charset"><literal>charset</literal></link>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>marccharset</literal>
     <replaceable>charset</replaceable>
    </term>
    <listitem>
     <para>Specifies character set for retrieved MARC records so
      that YAZ client can display them in a character suitable
      for your display. See <literal>charset</literal> command.
      If <literal>auto</literal> is given, YAZ will assume
      that MARC21/USMARC is using MARC8/UTF8 and ISO-8859-1
      for all other MARC variants. The charset argument is the
      same as third argument for command
      <link linkend="command-charset"><literal>charset</literal></link>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>querycharset</literal>
     <replaceable>charset</replaceable>
    </term>
    <listitem>
     <para>Specifies character set for query terms for Z39.50 RPN
      queries and Z39.50 Scan Requests (termListAndStartPoint).
      This is a pure client-side conversion which converts from
      displayCharset to queryCharset.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>set_cclfile</literal>
     <replaceable>filename</replaceable>
    </term>
    <listitem>
     <para>Specifies that CCL fields should be read from file
      file <replaceable>filename</replaceable>. This command does the
      same thing as option <literal>-c</literal>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>set_cqlfile</literal>
     <replaceable>filename</replaceable>
    </term>
    <listitem>
     <para>Specifies that CQL fields should be read from file
      file <replaceable>filename</replaceable>. This command does the
      same thing as option <literal>-q</literal>.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>register_oid</literal>
     <replaceable>name</replaceable>
     <replaceable>class</replaceable>
     <replaceable>OID</replaceable>
    </term>
    <listitem>
     <para>This command allows you to register your own object
      identifier - so that instead of entering a long dot-notation
      you can use a short name instead.
      The <replaceable>name</replaceable> is your
      name for the OID, <replaceable>class</replaceable> is the
      class, and <replaceable>OID</replaceable> is the raw OID in
      dot notation. Class is one of: <literal>appctx</literal>,
      <literal>absyn</literal>, <literal>attet</literal>,
      <literal>transyn</literal>, <literal>diagset</literal>,
      <literal>recsyn</literal>, <literal>resform</literal>,
      <literal>accform</literal>, <literal>extserv</literal>,
      <literal>userinfo</literal>, <literal>elemspec</literal>,
      <literal>varset</literal>, <literal>schema</literal>,
      <literal>tagset</literal>, <literal>general</literal>.
      If you're in doubt use the <literal>general</literal>
      class.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>register_tab</literal>
     <replaceable>command</replaceable>
     <replaceable>string</replaceable>
    </term>
    <listitem>
     <para>This command registers a TAB completion string for
      the command given.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>sleep</literal>
     <replaceable>seconds</replaceable>
    </term>
    <listitem>
     <para>This command makes YAZ client sleep (be idle) for
      the number of seconds given.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="command-wait-response"><term>
     <literal>wait_response</literal>
     [ <replaceable>number</replaceable>]
    </term>
    <listitem>
     <para>This command makes YAZ client wait for a number of
      response packages from target. If <replaceable>number</replaceable> is
      omitted, 1 is assumed.
     </para>
     <para>This command is rarely used and is only useful if command
      <link linkend="command-set-auto-wait">
       <literal>set_auto_wait</literal>
      </link> is set to off.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="command-xmles"><term>
     <literal>xmles</literal>
     <replaceable>OID</replaceable>
     <replaceable>doc</replaceable>
    </term>
    <listitem>
     <para>Sends XML Extended Services request using the OID and doc given.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>zversion</literal>
     <replaceable>ver</replaceable>
    </term>
    <listitem>
     <para>This command sets Z39.50 version for negotiation.
      Should be used before
      <link linkend="command-open"><literal>open</literal></link>.
      By default 3 (version 3) is used.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry><term>
     <literal>options</literal>
     <replaceable>op1 op2..</replaceable>
    </term>
    <listitem>
     <para>This command sets Z39.50 options for negotiation.
      Should be used before
      <link linkend="command-open"><literal>open</literal></link>.
     </para>
     <para>
      The following options are supported:
      <literal>search</literal>,
      <literal>present</literal>,
      <literal>delSet</literal>,
      <literal>resourceReport</literal>,
      <literal>triggerResourceCtrl</literal>,
      <literal>resourceCtrl</literal>,
      <literal>accessCtrl</literal>,
      <literal>scan</literal>,
      <literal>sort</literal>,
      <literal>extendedServices</literal>,
      <literal>level_1Segmentation</literal>,
      <literal>level_2Segmentation</literal>,
      <literal>concurrentOperations</literal>,
      <literal>namedResultSets</literal>,
      <literal>encapsulation</literal>,
      <literal>resultCount</literal>,
      <literal>negotiationModel</literal>,
      <literal>duplicationDetection</literal>,
      <literal>queryType104</literal>,
      <literal>pQESCorrection</literal>,
      <literal>stringSchema</literal>.
     </para>
    </listitem>
   </varlistentry>

  </variablelist>
 </refsect1>
 <refsect1><title>EXAMPLE</title>
  <para>
   The simplest example of a Prefix Query would be something like
   <screen>
    f knuth
   </screen>
   or
   <screen>
    f "donald knuth"
   </screen>
   In those queries, no attributes were specified.
   This leaves it up to the server what fields to search but
   most servers will search in all fields. Some servers do not
   support this feature though, and require that some attributes
   are defined. To add one attribute you could do:
   <screen>
    f @attr 1=4 computer
   </screen>
   where we search in the title field, since the use(1) is title(4).
   If we want to search in the author field <emphasis>and</emphasis>
   in the title field, and in the title field using right truncation
   it could look something like this:
   <screen>
    f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer
   </screen>
   Finally using a mix of Bib-1 and GILS attributes could look
   something like this:
   <screen>
    f @attrset Bib-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather
   </screen>
  </para>
 </refsect1>
 <refsect1><title>FILES</title>
  <para>
   <filename>yaz-&lt;version&gt;/client/client.c</filename>
  </para>
  <para>
   <filename>$HOME/.yazclientrc</filename>
  </para>
  <para>
   <filename>$HOME/.yazclient.history</filename>
  </para>
 </refsect1>
 <refsect1><title>SEE ALSO</title>
  <para>
   <citerefentry>
    <refentrytitle>yaz</refentrytitle>
    <manvolnum>7</manvolnum>
   </citerefentry>
   <citerefentry>
    <refentrytitle>bib1-attr</refentrytitle>
    <manvolnum>7</manvolnum>
   </citerefentry>
  </para>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: nxml
nxml-child-indent: 1
End:
-->
