Added charmap facility to delete leading articles
[idzebra-moved-to-github.git] / doc / recordmodel.xml
index cdaf703..5846b4b 100644 (file)
@@ -1,5 +1,5 @@
  <chapter id="record-model">
-  <!-- $Id: recordmodel.xml,v 1.4 2002-08-22 14:58:22 adam Exp $ -->
+  <!-- $Id: recordmodel.xml,v 1.19 2004-09-14 14:38:07 quinn Exp $ -->
   <title>The Record Model</title>
   
   <para>
@@ -8,7 +8,7 @@
    kind of structured data. Each record in the system is associated with
    a <emphasis>record schema</emphasis> which lends context to the data
    elements of the record.
-   Any number of record schema can coexist in the system.
+   Any number of record schemas can coexist in the system.
    Although it may be wise to use only a single schema within
    one database, the system poses no such restrictions.
   </para>
   <para>
    The record model described in this chapter applies to the fundamental,
    structured
-   record type <literal>grs</literal> as introduced in
+   record type <literal>grs</literal>, introduced in
    <xref linkend="record-types"/>.
+   <!--
    FIXME - Need to describe the simple string-tag model, or at least 
    refer to it here. -H
+   -->
   </para>
 
   <para>
@@ -31,7 +33,7 @@
 
    <itemizedlist>
     <listitem>
-
+     
      <para>
       When records are accessed by the system, they are represented
       in their local, or native format. This might be SGML or HTML files,
@@ -40,7 +42,8 @@
       input filter by preparing conversion rules based on regular
       expressions and possibly augmented by a flexible scripting language
       (Tcl).
-      The input filter produces as output an internal representation:
+      The input filter produces as output an internal representation,
+      a tree structure.
 
      </para>
     </listitem>
@@ -92,7 +95,7 @@
     subsequent sections.
     Zebra can read structured records in many different formats.
     How this is done is governed by additional parameters after the
-    "grs" keyboard, separated by "." characters.
+    "grs" keyword, separated by "." characters.
    </para>
 
    <para>
 
      <screen>
       &#60;Distributor&#62;
-      &#60;Name&#62; USGS/WRD &#60;/Name&#62;
-      &#60;Organization&#62; USGS/WRD &#60;/Organization&#62;
-      &#60;Street-Address&#62;
-      U.S. GEOLOGICAL SURVEY, 505 MARQUETTE, NW
-      &#60;/Street-Address&#62;
-      &#60;City&#62; ALBUQUERQUE &#60;/City&#62;
-      &#60;State&#62; NM &#60;/State&#62;
-      &#60;Zip-Code&#62; 87102 &#60;/Zip-Code&#62;
-      &#60;Country&#62; USA &#60;/Country&#62;
-      &#60;Telephone&#62; (505) 766-5560 &#60;/Telephone&#62;
+        &#60;Name&#62; USGS/WRD &#60;/Name&#62;
+        &#60;Organization&#62; USGS/WRD &#60;/Organization&#62;
+        &#60;Street-Address&#62;
+          U.S. GEOLOGICAL SURVEY, 505 MARQUETTE, NW
+        &#60;/Street-Address&#62;
+        &#60;City&#62; ALBUQUERQUE &#60;/City&#62;
+        &#60;State&#62; NM &#60;/State&#62;
+        &#60;Zip-Code&#62; 87102 &#60;/Zip-Code&#62;
+        &#60;Country&#62; USA &#60;/Country&#62;
+        &#60;Telephone&#62; (505) 766-5560 &#60;/Telephone&#62;
       &#60;/Distributor&#62;
      </screen>
 
     </para>
 
-    <note>
-     <para>
+    <!-- There is no indentation in the example above!  -H
+    -note-
+     -para-
       The indentation used above is used to illustrate how Zebra
       interprets the mark-up. The indentation, in itself, has no
       significance to the parser for the canonical input format, which
       discards superfluous whitespace.
-     </para>
-    </note>
+     -/para-
+    -/note-
+    -->
+
     <para>
      The keywords surrounded by &lt;...&gt; are
      <emphasis>tags</emphasis>, while the sections of text
      Each element is terminated by a closing tag - beginning
      with <literal>&#60;</literal>/, and containing the same symbolic
      tag-name as the corresponding opening tag.
-     The general closing tag - <literal>&#60;</literal>&gt;/ -
+     The general closing tag - <literal>&lt;/&gt;</literal> -
      terminates the element started by the last opening tag. The
      structuring of elements is significant.
      The element <emphasis>Telephone</emphasis>,
 
       <screen>
        &#60;gils&#62;
-       &#60;title&#62;Zen and the Art of Motorcycle Maintenance&#60;/title&#62;
+          &#60;title&#62;Zen and the Art of Motorcycle Maintenance&#60;/title&#62;
        &#60;/gils&#62;
       </screen>
 
 
     </sect3>
 
-    <sect3>
+    <sect3><!-- ### we shouldn't make such a big deal about this -->
      <title>Variants</title>
 
      <para>
       tag with the same <emphasis>class</emphasis> and
       <emphasis>value</emphasis> settings, or by the
       appearance of another, normal tag. In other words, the end-tags for
-      the variants used in the example above could have been saved.
+      the variants used in the example above could have been omitted.
      </para>
 
      <para>
     </para>
 
     <para>
-     An action is surrounded by curly braces (&lcub;...&rcub;), and
+     An action is surrounded by curly braces ({...}), and
      consists of a sequence of statements. Statements may be separated
      by newlines or semicolons (;).
      Within actions, the strings that matched the expressions
      immediately preceding the action can be referred to as
-     &dollar;0, &dollar;1, &dollar;2, etc.
+     $0, $1, $2, etc.
     </para>
 
     <para>
      <variablelist>
 
       <varlistentry>
-       <term>begin <emphasis>type &lsqb;parameter ... &rsqb;</emphasis></term>
+       <term>begin <replaceable>type [parameter ... ]</replaceable></term>
        <listitem>
         <para>
          Begin a new
-         data element. The type is one of the following:
+         data element. The <replaceable>type</replaceable> is one of
+         the following:
          <variablelist>
-
+          
           <varlistentry>
            <term>record</term>
            <listitem>
              name of the schema that describes the structure of the record, eg.
              <literal>gils</literal> or <literal>wais</literal> (see below).
              The <literal>begin record</literal> call should precede
-             any other use of the <emphasis>begin</emphasis> statement.
+             any other use of the <replaceable>begin</replaceable> statement.
             </para>
            </listitem>
           </varlistentry>
            <listitem>
             <para>
              Begin a new node in a variant tree. The parameters are
-             <emphasis>class type value</emphasis>.
+             <replaceable>class type value</replaceable>.
             </para>
            </listitem>
           </varlistentry>
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>data</term>
+       <term>data <replaceable>parameter</replaceable></term>
        <listitem>
         <para>
          Create a data element. The concatenated arguments make
          the layout (whitespace) of the data should be retained for
          transmission.
          The option <literal>-element</literal>
-         <emphasis>tag</emphasis> wraps the data up in
-         the <emphasis>tag</emphasis>.
+         <replaceable>tag</replaceable> wraps the data up in
+         the <replaceable>tag</replaceable>.
          The use of the <literal>-element</literal> option is equivalent to
-         preceding the command with a <emphasis>begin
-          element</emphasis> command, and following
-         it with the <emphasis>end</emphasis> command.
+         preceding the command with a <replaceable>begin
+          element</replaceable> command, and following
+         it with the <replaceable>end</replaceable> command.
         </para>
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>end <emphasis>&lsqb;type&rsqb;</emphasis></term>
+       <term>end <replaceable>[type]</replaceable></term>
        <listitem>
         <para>
          Close a tagged element. If no parameter is given,
          the last element on the stack is terminated.
          The first parameter, if any, is a type name, similar
-         to the <emphasis>begin</emphasis> statement.
-         For the <emphasis>element</emphasis> type, a tag
+         to the <replaceable>begin</replaceable> statement.
+         For the <replaceable>element</replaceable> type, a tag
          name can be provided to terminate a specific tag.
         </para>
        </listitem>
       </varlistentry>
+
+      <varlistentry>
+       <term>unread <replaceable>no</replaceable></term>
+       <listitem>
+        <para>
+         Move the input pointer to the offset of first character that
+         match rule given by <replaceable>no</replaceable>.
+         The first rule from left-to-right is numbered zero,
+         the second rule is named 1 and so on.
+        </para>
+       </listitem>
+      </varlistentry>
+
      </variablelist>
     </para>
 
       /^Subject:/ BODY /$/ { data -element title $1 }
       /^Date:/ BODY /$/    { data -element lastModified $1 }
       /\n\n/ BODY END      {
-      begin element bodyOfDisplay
-      begin variant body iana "text/plain"
-      data -text $1
-      end record
+         begin element bodyOfDisplay
+         begin variant body iana "text/plain"
+         data -text $1
+         end record
       }
      </screen>
 
     </para>
 
     <para>
-     If Zebra is compiled with support for Tcl (Tool Command Language)
-     enabled, the statements described above are supplemented with a complete
+     If Zebra is compiled with support for Tcl enabled, the statements
+     described above are supplemented with a complete
      scripting environment, including control structures (conditional
      expressions and loop constructs), and powerful string manipulation
-     mechanisms for modifying the elements of a record. Tcl is a popular
-     scripting environment, with several tutorials available both online
-     and in hardcopy.
+     mechanisms for modifying the elements of a record.
     </para>
 
    </sect2>
    <para>
 
     <screen>
-     TITLE     "Zen and the Art of Motorcycle Maintenance"
      ROOT 
-     AUTHOR    "Robert Pirsig"
+        TITLE     "Zen and the Art of Motorcycle Maintenance"
+        AUTHOR    "Robert Pirsig"
     </screen>
 
    </para>
    <para>
 
     <screen>
-     TITLE     "Zen and the Art of Motorcycle Maintenance"
      ROOT  
-     FIRST-NAME "Robert"
-     AUTHOR
-     SURNAME    "Pirsig"
+        TITLE  "Zen and the Art of Motorcycle Maintenance"
+        AUTHOR
+           FIRST-NAME "Robert"
+           SURNAME    "Pirsig"
     </screen>
 
    </para>
      Which of the two elements are transmitted to the client by the server
      depends on the specifications provided by the client, if any.
     </para>
-
+    
     <para>
      In practice, each variant node is associated with a triple of class,
      type, value, corresponding to the variant mechanism of Z39.50.
     </para>
-
+    
    </sect2>
-
+   
    <sect2>
     <title>Data Elements</title>
-
+    
     <para>
      Data nodes have no children (they are always leaf nodes in the record
      tree).
     </para>
-
-    <note>
-     <para>
-      FIXME! Documentation needs extension here about types of nodes - numerical,
-      textual, etc., plus the various types of inclusion notes.
-     </para>
-    </note>
+    
+    <!--
+    FIXME! Documentation needs extension here about types of nodes - numerical,
+    textual, etc., plus the various types of inclusion notes.
+   </para>
+    -->
     
    </sect2>
-
+   
   </sect1>
-
+  
   <sect1 id="data-model">
    <title>Configuring Your Data Model</title>
-
+   
    <para>
     The following sections describe the configuration files that govern
     the internal management of data records. The system searches for the files
      or all of the following:
     </para>
 
-    <para>
+    <!--
      FIXME - Need a diagram here, or a simple explanation how it all hangs together -H
-    </para>
+    -->
 
     <para>
 
 
       <listitem>
        <para>
-        The Tag set (again, this can consist of several different sets).
+        The tag set (again, this can consist of several different sets).
         This is used when reading the records from a file, to recognize the
         different tags, and when transmitting the record to the client -
         mapping the tags to their numerical representation, if they are
         known.
        </para>
       </listitem>
-
+      
       <listitem>
        <para>
         The variant set which is used in the profile. This provides a
 
     <para>
      Generally, the files are simple ASCII files, which can be maintained
-     using any text editor. Blank lines, and lines beginning with a (&num;) are
-     ignored. Any characters on a line followed by a (&num;) are also ignored.
+     using any text editor. Blank lines, and lines beginning with a (#) are
+     ignored. Any characters on a line followed by a (#) are also ignored.
      All other lines contain <emphasis>directives</emphasis>, which provide
      some setting or value to the system.
      Generally, settings are characterized by a single
     
    </sect2>
    
-   <sect2>
+   <sect2 id="abs-file">
     <title>The Abstract Syntax (.abs) Files</title>
     
     <para>
     <para>
      The file may contain the following directives:
     </para>
-
+    
     <para>
      <variablelist>
-
+      
       <varlistentry>
-       <term>name <emphasis>symbolic-name</emphasis></term>
+       <term>name <replaceable>symbolic-name</replaceable></term>
        <listitem>
         <para>
          (m) This provides a shorthand name or
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>reference <emphasis>OID-name</emphasis></term>
+       <term>reference <replaceable>OID-name</replaceable></term>
        <listitem>
         <para>
          (m) The reference name of the OID for the profile.
          The reference names can be found in the <emphasis>util</emphasis>
-         module of <emphasis>YAZ</emphasis>.
+         module of YAZ.
         </para>
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>attset <emphasis>filename</emphasis></term>
+       <term>attset <replaceable>filename</replaceable></term>
        <listitem>
         <para>
          (m) The attribute set that is used for
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>tagset <emphasis>filename</emphasis></term>
+       <term>tagset <replaceable>filename</replaceable></term>
        <listitem>
         <para>
          (o) The tag set (if any) that describe
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>varset <emphasis>filename</emphasis></term>
+       <term>varset <replaceable>filename</replaceable></term>
        <listitem>
         <para>
          (o) The variant set used in the profile.
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>maptab <emphasis>filename</emphasis></term>
+       <term>maptab <replaceable>filename</replaceable></term>
        <listitem>
         <para>
          (o,r) This points to a
          conversion table that might be used if the client asks for the record
          in a different schema from the native one.
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
       <varlistentry>
-       <term>marc <emphasis>filename</emphasis></term>
+       <term>marc <replaceable>filename</replaceable></term>
        <listitem>
         <para>
          (o) Points to a file containing parameters
-         for representing the record contents in the ISO2709 syntax. Read the
-         description of the MARC representation facility below.
+         for representing the record contents in the ISO2709 syntax.
+         Read the description of the MARC representation facility below.
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
       <varlistentry>
-       <term>esetname <emphasis>name filename</emphasis></term>
+       <term>esetname <replaceable>name filename</replaceable></term>
        <listitem>
         <para>
          (o,r) Associates the
          given in place of the filename, this corresponds to a null mapping for
          the given element set name.
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
       <varlistentry>
-       <term>any <emphasis>tags</emphasis></term>
+       <term>any <replaceable>tags</replaceable></term>
        <listitem>
         <para>
          (o) This directive specifies a list of attributes
          provides an efficient way of supporting free-text searching across all
          elements. However, it does increase the size of the index
          significantly. The attributes can be qualified with a structure, as in
-         the <emphasis>elm</emphasis> directive below.
+         the <replaceable>elm</replaceable> directive below.
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
       <varlistentry>
-       <term>elm <emphasis>path name attributes</emphasis></term>
+       <term>elm <replaceable>path name attributes</replaceable></term>
        <listitem>
         <para>
          (o,r) Adds an element to the abstract record syntax of the schema.
-         The <emphasis>path</emphasis> follows the
+         The <replaceable>path</replaceable> follows the
          syntax which is suggested by the Z39.50 document - that is, a sequence
-         of tags separated by slashes (/). Each tag is given as a
+         of tags separated by slashes (&#x2f;). Each tag is given as a
          comma-separated pair of tag type and -value surrounded by parenthesis.
-         The <emphasis>name</emphasis> is the name of the element, and
-         the <emphasis>attributes</emphasis>
+         The <replaceable>name</replaceable> is the name of the element, and
+         the <replaceable>attributes</replaceable>
          specifies which attributes to use when indexing the element in a
          comma-separated list.
          A ! in place of the attribute name is equivalent to
          specifying an attribute name identical to the element name.
          A - in place of the attribute name
          specifies that no indexing is to take place for the given element.
-         The attributes can be qualified with <emphasis>field
-          types</emphasis> to specify which
+         The attributes can be qualified with <replaceable>field
+          types</replaceable> to specify which
          character set should govern the indexing procedure for that field.
          The same data element may be indexed into several different
          fields, using different character set definitions.
          See the <xref linkend="field-structure-and-character-sets"/>.
-         The default field type is "w" for <emphasis>word</emphasis>.
+         The default field type is <literal>w</literal> for
+         <emphasis>word</emphasis>.
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
+      
+      <varlistentry>
+       <term>xelm <replaceable>xpath attributes</replaceable></term>
+       <listitem>
+        <para>
+         Specifies indexing for record nodes given by
+         <replaceable>xpath</replaceable>. Unlike directive
+         elm, this directive allows you to index attribute
+         contents. The <replaceable>xpath</replaceable> uses
+         a syntax similar to XPath. The <replaceable>attributes</replaceable>
+         have same syntax and meaning as directive elm, except that operator
+         ! refers to the nodes selected by <replaceable>xpath</replaceable>.
+         <!--
+         xelm   /         !:w                 default index
+         xelm   //        !:w                 additional index
+         xelm   /gils/title/@att    myatt:w   index attribute @att in myatt
+         xelm   title/@att          myatt:w   same meaning.
+         -->
+        </para>
+       </listitem>
+      </varlistentry>
+      
       <varlistentry>
-       <term>encoding <emphasis>encodingname</emphasis></term>
+       <term>encoding <replaceable>encodingname</replaceable></term>
        <listitem>
         <para>
          This directive specifies character encoding for external records.
          For records such as XML that specifies encoding within the
          file via a header this directive is ignored.
          If neither this directive is given, nor an encoding is set
-         within external records, ISO-8859-1 encoding is assmed.
+         within external records, ISO-8859-1 encoding is assumed.
          </para>
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>xpath <emphasis>enable/disable</emphasis></term>
+       <term>xpath <literal>enable</literal>/<literal>disable</literal></term>
        <listitem>
         <para>
          If this directive is followed by <literal>enable</literal>,
-         then extra indexing is performed to allow for XPATH-like queries.
+         then extra indexing is performed to allow for XPath-like queries.
          If this directive is not specified - equivalent to 
-         <literal>disable</literal> - no extra XPATH-indexing is performed.
+         <literal>disable</literal> - no extra XPath-indexing is performed.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <!-- Adam's version 
+      <varlistentry>
+       <term>systag <replaceable>systemtag</replaceable> <replaceable>element</replaceable></term>
+       <listitem>
+        <para>
+         This directive maps system information to an element during
+         retrieval. This information is dynamically created. The
+         following system tags are defined
+         <variablelist>
+          <varlistentry>
+           <term>size</term>
+           <listitem>
+            <para>
+             Size of record in bytes. By default this
+             is mapped to element <literal>size</literal>.
+            </para>
+           </listitem>
+          </varlistentry>
+
+          <varlistentry>
+           <term>rank</term>
+           <listitem>
+            <para>
+             Score/rank of record. By default this
+             is mapped to element <literal>rank</literal>.
+             If no score was calculated for the record (non-ranked
+             searched) search this directive is ignored.
+            </para>
+           </listitem>
+          </varlistentry>
+          
+          <varlistentry>
+           <term>sysno</term>
+           <listitem> 
+            <para>
+             Zebra's system number (record ID) for the
+             record. By default this is mapped to element
+             <literal>localControlNumber</literal>.
+            </para>
+           </listitem>
+          </varlistentry>
+         </variablelist>
+         If you do not want a particular system tag to be applied,
+         then set the resulting element to something undefined in the
+         abs file (such as <literal>none</literal>).
         </para>
        </listitem>
       </varlistentry>
+      -->
+
+      <!-- Mike's version -->
+      <varlistentry>
+       <term>
+        systag
+        <replaceable>systemTag</replaceable>
+        <replaceable>actualTag</replaceable>
+       </term>
+       <listitem>
+       <para>
+        Specifies what information, if any, Zebra should
+        automatically include in retrieval records for the 
+        ``system fields'' that it supports.
+        <replaceable>systemTag</replaceable> may
+        be any of the following:
+        <variablelist>
+         <varlistentry>
+          <term><literal>rank</literal></term>
+          <listitem><para>
+           An integer indicating the relevance-ranking score
+           assigned to the record.
+          </para></listitem>
+         </varlistentry>
+         <varlistentry>
+          <term><literal>sysno</literal></term>
+          <listitem><para>
+           An automatically generated identifier for the record,
+           unique within this database.  It is represented by the
+           <literal>&lt;localControlNumber&gt;</literal> element in
+           XML and the <literal>(1,14)</literal> tag in GRS-1.
+          </para></listitem>
+         </varlistentry>
+         <varlistentry>
+          <term><literal>size</literal></term>
+          <listitem><para>
+           The size, in bytes, of the retrieved record.
+          </para></listitem>
+         </varlistentry>
+        </variablelist>
+       </para>
+       <para>
+        The <replaceable>actualTag</replaceable> parameter may be
+        <literal>none</literal> to indicate that the named element
+        should be omitted from retrieval records.
+       </para>
+       </listitem>
+      </varlistentry>
      </variablelist>
     </para>
     
       esetname G gils-g.est
       esetname F @
 
-      elm (1,10)              rank                        -
-      elm (1,12)              url                         -
-      elm (1,14)              localControlNumber     Local-number
-      elm (1,16)              dateOfLastModification Date/time-last-modified
-      elm (2,1)               title                       w:!,p:!
-      elm (4,1)               controlIdentifier      Identifier-standard
-      elm (2,6)               abstract               Abstract
-      elm (4,51)              purpose                     !
-      elm (4,52)              originator                  - 
-      elm (4,53)              accessConstraints           !
-      elm (4,54)              useConstraints              !
-      elm (4,70)              availability                -
-      elm (4,70)/(4,90)       distributor                 -
-      elm (4,70)/(4,90)/(2,7) distributorName             !
-      elm (4,70)/(4,90)/(2,10 distributorOrganization     !
-      elm (4,70)/(4,90)/(4,2) distributorStreetAddress    !
-      elm (4,70)/(4,90)/(4,3) distributorCity             !
+      elm (1,10)               rank                        -
+      elm (1,12)               url                         -
+      elm (1,14)               localControlNumber     Local-number
+      elm (1,16)               dateOfLastModification Date/time-last-modified
+      elm (2,1)                title                       w:!,p:!
+      elm (4,1)                controlIdentifier      Identifier-standard
+      elm (2,6)                abstract               Abstract
+      elm (4,51)               purpose                     !
+      elm (4,52)               originator                  - 
+      elm (4,53)               accessConstraints           !
+      elm (4,54)               useConstraints              !
+      elm (4,70)               availability                -
+      elm (4,70)/(4,90)        distributor                 -
+      elm (4,70)/(4,90)/(2,7)  distributorName             !
+      elm (4,70)/(4,90)/(2,10) distributorOrganization     !
+      elm (4,70)/(4,90)/(4,2)  distributorStreetAddress    !
+      elm (4,70)/(4,90)/(4,3)  distributorCity             !
      </screen>
 
     </para>
     <title>The Attribute Set (.att) Files</title>
 
     <para>
-     This file type describes the <emphasis>Use</emphasis> elements of
+     This file type describes the <replaceable>Use</replaceable> elements of
      an attribute set. 
      It contains the following directives. 
     </para>
     <para>
      <variablelist>
       <varlistentry>
-       <term>name <emphasis>symbolic-name</emphasis></term>
+       <term>name <replaceable>symbolic-name</replaceable></term>
        <listitem>
         <para>
          (m) This provides a shorthand name or
         </para>
        </listitem></varlistentry>
       <varlistentry>
-       <term>reference <emphasis>OID-name</emphasis></term>
+       <term>reference <replaceable>OID-name</replaceable></term>
        <listitem>
         <para>
          (m) The reference name of the OID for
          the attribute set.
-         The reference names can be found in the <emphasis>util</emphasis>
-         module of <emphasis>YAZ</emphasis>.
+         The reference names can be found in the <replaceable>util</replaceable>
+         module of <replaceable>YAZ</replaceable>.
         </para>
        </listitem></varlistentry>
       <varlistentry>
-       <term>include <emphasis>filename</emphasis></term>
+       <term>include <replaceable>filename</replaceable></term>
        <listitem>
         <para>
          (o,r) This directive is used to
          include another attribute set as a part of the current one. This is
          used when a new attribute set is defined as an extension to another
          set. For instance, many new attribute sets are defined as extensions
-         to the <emphasis>bib-1</emphasis> set.
+         to the <replaceable>bib-1</replaceable> set.
          This is an important feature of the retrieval
          system of Z39.50, as it ensures the highest possible level of
          interoperability, as those access points of your database which are
        </listitem></varlistentry>
       <varlistentry>
        <term>att
-        <emphasis>att-value att-name &lsqb;local-value&rsqb;</emphasis></term>
+        <replaceable>att-value att-name [local-value]</replaceable></term>
        <listitem>
         <para>
          (o,r) This
          repeatable directive introduces a new attribute to the set. The
          attribute value is stored in the index (unless a
-         <emphasis>local-value</emphasis> is
+         <replaceable>local-value</replaceable> is
          given, in which case this is stored). The name is used to refer to the
-         attribute from the <emphasis>abstract syntax</emphasis>. 
+         attribute from the <replaceable>abstract syntax</replaceable>. 
         </para>
        </listitem></varlistentry>
      </variablelist>
        </listitem></varlistentry>
       <varlistentry>
        <term>simpleElement
-        <emphasis>path &lsqb;'variant' variant-request&rsqb;</emphasis></term>
+        <emphasis>path ['variant' variant-request]</emphasis></term>
        <listitem>
         <para>
          (o,r) This corresponds to a simple element request
      is assumed by the MARC family in Z39.50.
     </para>
 
-    <para>
+    <!--
      <emphasis>NOTE: FIXME! The schema-mapping functions are so far limited to a
       straightforward mapping of elements. This should be extended with
       mechanisms for conversions of the element contents, and conditional
       mappings of elements based on the record contents.</emphasis>
-    </para>
+    -->
 
     <para>
      These are the directives of the schema mapping file format:
      header of the record.
     </para>
 
-    <para>
-     <emphasis>NOTE: FIXME! This will be described better. We're in the process of
+    <!--
+     NOTE: FIXME! This will be described better. We're in the process of
       re-evaluating and most likely changing the way that MARC records are
       handled by the system.</emphasis>
-    </para>
+    -->
 
    </sect2>
 
      special-purpose fields such as WWW-style linkages (URx).
     </para>
 
-    <para>
-     The field types, and hence character sets, are associated with data
-     elements by the .abs files (see above).
-     The file <literal>default.idx</literal>
-     provides the association between field type codes (as used in the .abs
-     files) and the character map files (with the .chr suffix). The format
-     of the .idx file is as follows
-    </para>
-
-    <para>
-     <variablelist>
-
-      <varlistentry>
-       <term>index <emphasis>field type code</emphasis></term>
-       <listitem>
-        <para>
-         This directive introduces a new search index code.
-         The argument is a one-character code to be used in the
-         .abs files to select this particular index type. An index, roughly,
-         corresponds to a particular structure attribute during search. Refer
-         to <xref linkend="search"/>.
-        </para>
-       </listitem></varlistentry>
-      <varlistentry>
-       <term>sort <emphasis>field code type</emphasis></term>
-       <listitem>
-        <para>
-         This directive introduces a 
-         sort index. The argument is a one-character code to be used in the
-         .abs fie to select this particular index type. The corresponding
-         use attribute must be used in the sort request to refer to this
-         particular sort index. The corresponding character map (see below)
-         is used in the sort process.
-        </para>
-       </listitem></varlistentry>
-      <varlistentry>
-       <term>completeness <emphasis>boolean</emphasis></term>
-       <listitem>
-        <para>
-         This directive enables or disables complete field indexing.
-         The value of the <emphasis>boolean</emphasis> should be 0
-         (disable) or 1. If completeness is enabled, the index entry will
-         contain the complete contents of the field (up to a limit), with words
-         (non-space characters) separated by single space characters
-         (normalized to " " on display). When completeness is
-         disabled, each word is indexed as a separate entry. Complete subfield
-         indexing is most useful for fields which are typically browsed (eg.
-         titles, authors, or subjects), or instances where a match on a
-         complete subfield is essential (eg. exact title searching). For fields
-         where completeness is disabled, the search engine will interpret a
-         search containing space characters as a word proximity search.
-        </para>
-       </listitem></varlistentry>
-      <varlistentry>
-       <term>charmap <emphasis>filename</emphasis></term>
-       <listitem>
-        <para>
-         This is the filename of the character
-         map to be used for this index for field type.
-        </para>
-       </listitem></varlistentry>
-     </variablelist>
-    </para>
-
-    <para>
-     The contents of the character map files are structured as follows:
-    </para>
-
-    <para>
-     <variablelist>
-
-      <varlistentry>
-       <term>lowercase <emphasis>value-set</emphasis></term>
-       <listitem>
-        <para>
-         This directive introduces the basic value set of the field type.
-         The format is an ordered list (without spaces) of the
-         characters which may occur in "words" of the given type.
-         The order of the entries in the list determines the
-         sort order of the index. In addition to single characters, the
-         following combinations are legal:
-        </para>
-
-        <para>
-
-         <itemizedlist>
-          <listitem>
-           <para>
-            Backslashes may be used to introduce three-digit octal, or
-            two-digit hex representations of single characters
-            (preceded by <literal>x</literal>).
-            In addition, the combinations
-            \\, \\r, \\n, \\t, \\s (space &mdash; remember that real
-            space-characters may not occur in the value definition), and
-            \\ are recognized, with their usual interpretation.
-           </para>
-          </listitem>
-
-          <listitem>
-           <para>
-            Curly braces &lcub;&rcub; may be used to enclose ranges of single
-            characters (possibly using the escape convention described in the
-            preceding point), eg. &lcub;a-z&rcub; to introduce the
-            standard range of ASCII characters.
-            Note that the interpretation of such a range depends on
-            the concrete representation in your local, physical character set.
-           </para>
-          </listitem>
-
-          <listitem>
-           <para>
-            paranthesises () may be used to enclose multi-byte characters -
-            eg. diacritics or special national combinations (eg. Spanish
-            "ll"). When found in the input stream (or a search term),
-            these characters are viewed and sorted as a single character, with a
-            sorting value depending on the position of the group in the value
-            statement.
-           </para>
-          </listitem>
+    <sect3 id="default-idx-file">
+     <title>The default.idx file</title>
+     <para>
+      The field types, and hence character sets, are associated with data
+      elements by the .abs files (see above).
+      The file <literal>default.idx</literal>
+      provides the association between field type codes (as used in the .abs
+      files) and the character map files (with the .chr suffix). The format
+      of the .idx file is as follows
+     </para>
 
-         </itemizedlist>
+     <para>
+      <variablelist>
+
+       <varlistentry>
+       <term>index <emphasis>field type code</emphasis></term>
+       <listitem>
+        <para>
+         This directive introduces a new search index code.
+         The argument is a one-character code to be used in the
+         .abs files to select this particular index type. An index, roughly,
+         corresponds to a particular structure attribute during search. Refer
+         to <xref linkend="search"/>.
+        </para>
+       </listitem></varlistentry>
+       <varlistentry>
+       <term>sort <emphasis>field code type</emphasis></term>
+       <listitem>
+        <para>
+         This directive introduces a 
+         sort index. The argument is a one-character code to be used in the
+         .abs fie to select this particular index type. The corresponding
+         use attribute must be used in the sort request to refer to this
+         particular sort index. The corresponding character map (see below)
+         is used in the sort process.
+        </para>
+       </listitem></varlistentry>
+       <varlistentry>
+       <term>completeness <emphasis>boolean</emphasis></term>
+       <listitem>
+        <para>
+         This directive enables or disables complete field indexing.
+         The value of the <emphasis>boolean</emphasis> should be 0
+         (disable) or 1. If completeness is enabled, the index entry will
+         contain the complete contents of the field (up to a limit), with words
+         (non-space characters) separated by single space characters
+         (normalized to " " on display). When completeness is
+         disabled, each word is indexed as a separate entry. Complete subfield
+         indexing is most useful for fields which are typically browsed (eg.
+         titles, authors, or subjects), or instances where a match on a
+         complete subfield is essential (eg. exact title searching). For fields
+         where completeness is disabled, the search engine will interpret a
+         search containing space characters as a word proximity search.
+        </para>
+       </listitem></varlistentry>
+       <varlistentry>
+       <term>charmap <emphasis>filename</emphasis></term>
+       <listitem>
+        <para>
+         This is the filename of the character
+         map to be used for this index for field type.
+        </para>
+       </listitem></varlistentry>
+      </variablelist>
+     </para>
+    </sect3>
 
-        </para>
-       </listitem></varlistentry>
-      <varlistentry>
-       <term>uppercase <emphasis>value-set</emphasis></term>
-       <listitem>
-        <para>
-         This directive introduces the
-         upper-case equivalencis to the value set (if any). The number and
-         order of the entries in the list should be the same as in the
-         <literal>lowercase</literal> directive.
-        </para>
-       </listitem></varlistentry>
-      <varlistentry>
-       <term>space <emphasis>value-set</emphasis></term>
-       <listitem>
-        <para>
-         This directive introduces the character
-         which separate words in the input stream. Depending on the
-         completeness mode of the field in question, these characters either
-         terminate an index entry, or delimit individual "words" in
-         the input stream. The order of the elements is not significant &mdash;
-         otherwise the representation is the same as for the
-         <literal>uppercase</literal> and <literal>lowercase</literal>
-         directives.
-        </para>
-       </listitem></varlistentry>
-      <varlistentry>
-       <term>map <emphasis>value-set</emphasis>
-        <emphasis>target</emphasis></term>
-       <listitem>
-        <para>
-         This directive introduces a
-         mapping between each of the members of the value-set on the left to
-         the character on the right. The character on the right must occur in
-         the value set (the <literal>lowercase</literal> directive) of
-         the character set, but
-         it may be a paranthesis-enclosed multi-octet character. This directive
-         may be used to map diacritics to their base characters, or to map
-         HTML-style character-representations to their natural form, etc.
-        </para>
-       </listitem></varlistentry>
-     </variablelist>
-    </para>
+    <sect3 id="character-map-files">
+     <title>The character map file format</title>
+     <para>
+      The contents of the character map files are structured as follows:
+     </para>
 
+     <para>
+      <variablelist>
+
+       <varlistentry>
+       <term>lowercase <emphasis>value-set</emphasis></term>
+       <listitem>
+        <para>
+         This directive introduces the basic value set of the field type.
+         The format is an ordered list (without spaces) of the
+         characters which may occur in "words" of the given type.
+         The order of the entries in the list determines the
+         sort order of the index. In addition to single characters, the
+         following combinations are legal:
+        </para>
+
+        <para>
+
+         <itemizedlist>
+          <listitem>
+           <para>
+            Backslashes may be used to introduce three-digit octal, or
+            two-digit hex representations of single characters
+            (preceded by <literal>x</literal>).
+            In addition, the combinations
+            \\, \\r, \\n, \\t, \\s (space &mdash; remember that real
+            space-characters may not occur in the value definition), and
+            \\ are recognized, with their usual interpretation.
+           </para>
+          </listitem>
+
+          <listitem>
+           <para>
+            Curly braces {} may be used to enclose ranges of single
+            characters (possibly using the escape convention described in the
+            preceding point), eg. {a-z} to introduce the
+            standard range of ASCII characters.
+            Note that the interpretation of such a range depends on
+            the concrete representation in your local, physical character set.
+           </para>
+          </listitem>
+
+          <listitem>
+           <para>
+            paranthesises () may be used to enclose multi-byte characters -
+            eg. diacritics or special national combinations (eg. Spanish
+            "ll"). When found in the input stream (or a search term),
+            these characters are viewed and sorted as a single character, with a
+            sorting value depending on the position of the group in the value
+            statement.
+           </para>
+          </listitem>
+
+         </itemizedlist>
+
+        </para>
+       </listitem></varlistentry>
+       <varlistentry>
+       <term>uppercase <emphasis>value-set</emphasis></term>
+       <listitem>
+        <para>
+         This directive introduces the
+         upper-case equivalencis to the value set (if any). The number and
+         order of the entries in the list should be the same as in the
+         <literal>lowercase</literal> directive.
+        </para>
+       </listitem></varlistentry>
+       <varlistentry>
+       <term>space <emphasis>value-set</emphasis></term>
+       <listitem>
+        <para>
+         This directive introduces the character
+         which separate words in the input stream. Depending on the
+         completeness mode of the field in question, these characters either
+         terminate an index entry, or delimit individual "words" in
+         the input stream. The order of the elements is not significant &mdash;
+         otherwise the representation is the same as for the
+         <literal>uppercase</literal> and <literal>lowercase</literal>
+         directives.
+        </para>
+       </listitem></varlistentry>
+       <varlistentry>
+       <term>map <emphasis>value-set</emphasis>
+        <emphasis>target</emphasis></term>
+       <listitem>
+        <para>
+         This directive introduces a
+         mapping between each of the members of the value-set on the left to
+         the character on the right. The character on the right must occur in
+         the value set (the <literal>lowercase</literal> directive) of
+         the character set, but
+         it may be a paranthesis-enclosed multi-octet character. This directive
+         may be used to map diacritics to their base characters, or to map
+         HTML-style character-representations to their natural form, etc. The map directive
+         can also be used to ignore leading articles in searching and/or sorting, and to perform
+         other special transformations. See section <xref linkend="leading-articles"/>.
+        </para>
+       </listitem></varlistentry>
+      </variablelist>
+     </para>
+    </sect3>
+    <sect3 id="leading-articles">
+     <title>Ignoring leading articles</title>
+     <para>
+      In addition to specifying sort orders, space (blank) handling, and upper/lowercase folding,
+      you can also use the character map files to make Zebra ignore leading articles in sorting
+      records, or when doing complete field searching.
+     </para>
+     <para>
+      This is done using the <literal>map</literal> directive in the character map file. In a
+      nutshell, what you do is map certain sequences of characters, when they occur <emphasis>
+      in the beginning of a field</emphasis>, to a space. Assuming that the character "@" is
+      defined as a space character in your file, you can do:
+      <screen>
+       map (^The\s) @
+       map (^the\s) @
+      </screen>
+      The effect of these directives is to map either 'the' or 'The', followed by a space
+      character, to a space. The hat ^ character denotes beginning-of-field only when
+      complete-subfield indexing or sort indexing is taking place; otherwise, it is treated just
+      as any other character.
+     </para>
+     <para>
+      Because the <literal>default.idx</literal> file can be used to associate different
+      character maps with different indexing types -- and you can create additional indexing
+      types, should the need arise -- it is possible to specify that leading articles should be
+      ignored either in sorting, in complete-field searching, or both.
+     </para>
+     <para>
+      If you ignore certain prefixes in sorting, then these will be eliminated from the index,
+      and sorting will take place as if they weren't there. However, if you set the system up
+      to ignore certain prefixes in <emphasis>searching</emphasis>, then these are deleted both
+      from the indexes and from query terms, when the client specifies complete-field
+      searching. This has the effect that a search for 'the science journal' and 'science
+      journal' would both produce the same results.
+     </para>
+    </sect3>
    </sect2>
-
   </sect1>
 
   <sect1 id="formats">
        is used to show the hierarchical structure of the record. All
        "GRS" type records support both the GRS-1 and SUTRS
        representations.
-       FIXME - What is SUTRS - should be expanded here
+       <!-- FIXME - What is SUTRS - should be expanded here -->
       </para>
      </listitem>
 
        abstract syntaxes can be mapped to the SOIF format, although nested
        elements are represented by concatenation of the tag names at each
        level.
-       FIXME - Is this used anywhere ? -H
+       <!-- FIXME - Is this used anywhere ? -H -->
       </para>
      </listitem>