Brief description of xelm
[idzebra-moved-to-github.git] / doc / recordmodel.xml
index fc16fc8..b438f33 100644 (file)
@@ -1,5 +1,5 @@
  <chapter id="record-model">
  <chapter id="record-model">
-  <!-- $Id: recordmodel.xml,v 1.9 2002-10-17 21:54:22 mike Exp $ -->
+  <!-- $Id: recordmodel.xml,v 1.13 2002-10-31 10:11:39 adam Exp $ -->
   <title>The Record Model</title>
   
   <para>
   <title>The Record Model</title>
   
   <para>
@@ -33,7 +33,7 @@
 
    <itemizedlist>
     <listitem>
 
    <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,
      <para>
       When records are accessed by the system, they are represented
       in their local, or native format. This might be SGML or HTML files,
@@ -42,7 +42,8 @@
       input filter by preparing conversion rules based on regular
       expressions and possibly augmented by a flexible scripting language
       (Tcl).
       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>
 
      </para>
     </listitem>
@@ -94,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
     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>
    </para>
 
    <para>
      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.
      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>&lt;</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>,
      terminates the element started by the last opening tag. The
      structuring of elements is significant.
      The element <emphasis>Telephone</emphasis>,
 
     </sect3>
 
 
     </sect3>
 
-    <sect3>
+    <sect3><!-- ### we shouldn't make such a big deal about this -->
      <title>Variants</title>
 
      <para>
      <title>Variants</title>
 
      <para>
     </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
      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>
     </para>
 
     <para>
      <variablelist>
 
       <varlistentry>
      <variablelist>
 
       <varlistentry>
-       <term>begin <emphasis>type &lsqb;parameter ... &rsqb;</emphasis></term>
+       <term>begin <emphasis>type [parameter ... ]</emphasis></term>
        <listitem>
         <para>
          Begin a new
          data element. The type is one of the following:
          <variablelist>
        <listitem>
         <para>
          Begin a new
          data element. The type is one of the following:
          <variablelist>
-
+          
           <varlistentry>
            <term>record</term>
            <listitem>
           <varlistentry>
            <term>record</term>
            <listitem>
        </listitem>
       </varlistentry>
       <varlistentry>
        </listitem>
       </varlistentry>
       <varlistentry>
-       <term>end <emphasis>&lsqb;type&rsqb;</emphasis></term>
+       <term>end <emphasis>[type]</emphasis></term>
        <listitem>
         <para>
          Close a tagged element. If no parameter is given,
        <listitem>
         <para>
          Close a tagged element. If no parameter is given,
      Which of the two elements are transmitted to the client by the server
      depends on the specifications provided by the client, if any.
     </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>
     <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>
-
+   
    <sect2>
     <title>Data Elements</title>
    <sect2>
     <title>Data Elements</title>
-
+    
     <para>
      Data nodes have no children (they are always leaf nodes in the record
      tree).
     </para>
     <para>
      Data nodes have no children (they are always leaf nodes in the record
      tree).
     </para>
-
+    
     <!--
     <!--
-      FIXME! Documentation needs extension here about types of nodes - numerical,
-      textual, etc., plus the various types of inclusion notes.
-     </para>
+    FIXME! Documentation needs extension here about types of nodes - numerical,
+    textual, etc., plus the various types of inclusion notes.
+   </para>
     -->
     
    </sect2>
     -->
     
    </sect2>
-
+   
   </sect1>
   </sect1>
-
+  
   <sect1 id="data-model">
    <title>Configuring Your Data Model</title>
   <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
    <para>
     The following sections describe the configuration files that govern
     the internal management of data records. The system searches for the files
 
       <listitem>
        <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>
         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
       <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
 
     <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
      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>
+   <sect2 id="abs-file">
     <title>The Abstract Syntax (.abs) Files</title>
     
     <para>
     <title>The Abstract Syntax (.abs) Files</title>
     
     <para>
     <para>
      The file may contain the following directives:
     </para>
     <para>
      The file may contain the following directives:
     </para>
-
+    
     <para>
      <variablelist>
     <para>
      <variablelist>
-
+      
       <varlistentry>
       <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>
         <para>
          (m) This provides a shorthand name or
        </listitem>
       </varlistentry>
       <varlistentry>
        </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>
        <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>
         </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>
         <para>
          (m) The attribute set that is used for
        </listitem>
       </varlistentry>
       <varlistentry>
        </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>
         <para>
          (o) The tag set (if any) that describe
        </listitem>
       </varlistentry>
       <varlistentry>
        </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>
         <para>
          (o) The variant set used in the profile.
        </listitem>
       </varlistentry>
       <varlistentry>
        </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>
         <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>
       <varlistentry>
-       <term>marc <emphasis>filename</emphasis></term>
+       <term>marc <replaceable>filename</replaceable></term>
        <listitem>
         <para>
          (o) Points to a file containing parameters
        <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>
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
       <varlistentry>
       <varlistentry>
-       <term>esetname <emphasis>name filename</emphasis></term>
+       <term>esetname <replaceable>name filename</replaceable></term>
        <listitem>
         <para>
          (o,r) Associates the
        <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>
          given in place of the filename, this corresponds to a null mapping for
          the given element set name.
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
       <varlistentry>
       <varlistentry>
-       <term>any <emphasis>tags</emphasis></term>
+       <term>any <replaceable>tags</replaceable></term>
        <listitem>
         <para>
          (o) This directive specifies a list of attributes
        <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
          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>
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
       <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.
        <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
          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.
          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.
          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"/>.
          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>
         </para>
-       </listitem></varlistentry>
+       </listitem>
+      </varlistentry>
+      
       <varlistentry>
       <varlistentry>
-       <term>encoding <emphasis>encodingname</emphasis></term>
+       <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 !
+         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 <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
        <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>
          </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>,
        <listitem>
         <para>
          If this directive is followed by <literal>enable</literal>,
     <title>The Attribute Set (.att) Files</title>
 
     <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>
      an attribute set. 
      It contains the following directives. 
     </para>
     <para>
      <variablelist>
       <varlistentry>
     <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>
         <para>
          (m) This provides a shorthand name or
         </para>
        </listitem></varlistentry>
       <varlistentry>
         </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.
        <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>
         </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
        <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
          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
        </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
        <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
          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>
         </para>
        </listitem></varlistentry>
      </variablelist>
        </listitem></varlistentry>
       <varlistentry>
        <term>simpleElement
        </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
        <listitem>
         <para>
          (o,r) This corresponds to a simple element request
 
           <listitem>
            <para>
 
           <listitem>
            <para>
-            Curly braces &lcub;&rcub; may be used to enclose ranges of single
+            Curly braces {} may be used to enclose ranges of single
             characters (possibly using the escape convention described in the
             characters (possibly using the escape convention described in the
-            preceding point), eg. &lcub;a-z&rcub; to introduce 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.
             standard range of ASCII characters.
             Note that the interpretation of such a range depends on
             the concrete representation in your local, physical character set.