Bib-1 man entry is now called bib1-attr (7)
[yaz-moved-to-github.git] / doc / tools.xml
index b8ff153..5b09ab3 100644 (file)
@@ -1,4 +1,3 @@
-<!-- $Id: tools.xml,v 1.61 2007-05-07 13:18:32 adam Exp $ -->
  <chapter id="tools"><title>Supporting Tools</title>
   
   <para>
      symbolic language for expressing boolean query structures.
     </para>
 
-    <para>
-     The EUROPAGATE research project working under the Libraries programme
-     of the European Commission's DG XIII has, amongst other useful tools,
-     implemented a general-purpose CCL parser which produces an output
-     structure that can be trivially converted to the internal RPN
-     representation of &yaz; (The <literal>Z_RPNQuery</literal> structure).
-     Since the CCL utility - along with the rest of the software
-     produced by EUROPAGATE - is made freely available on a liberal
-     license, it is included as a supplement to &yaz;.
-    </para>
-
     <sect3 id="ccl.syntax">
      <title>CCL Syntax</title>
 
        </table>
       </para>
       <para>
-       Refer to the complete
+       Refer to <xref linkend="bib1"/> or the complete
        <ulink url="&url.z39.50.attset.bib1;">list of Bib-1 attributes</ulink>
       </para>
       <para>
@@ -1541,27 +1529,30 @@ void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
 
    <para>
     The basic YAZ representation of an OID is an array of integers,
-    terminated with the value -1. There is a <literal>typedef</literal>
-    of this integer to <literal>Odr_oid</literal> but this is not consistenly
-    used everywhere.
+    terminated with the value -1. This integer is of type 
+    <literal>Odr_oid</literal>.
    </para>
    <para>
-    An OID can either be declared as a automatic variable or we can
-    allocated using the ODR/NMEM memory utilities. It's
+    Fundamental OID operations and the type <literal>Odr_oid</literal>
+    are defined in <filename>yaz/oid_util.h</filename>.
+   </para>
+   <para>
+    An OID can either be declared as a automatic variable or it can
+    allocated using the memory utilities or ODR/NMEM. It's
     guaranteed that an OID can fit in <literal>OID_SIZE</literal> integers.
    </para>
    <example id="tools.oid.bib1.1"><title>Create OID on stack</title>
     <para>
      We can create an OID for the Bib-1 attribute set with:
      <screen>
-      int bib1[OID_SIZE];
-      myoid[0] = 1;
-      myoid[1] = 2;
-      myoid[2] = 840;
-      myoid[3] = 10003;
-      myoid[4] = 3;
-      myoid[5] = 1;
-      myoid[6] = -1;
+      Odr_oid bib1[OID_SIZE];
+      bib1[0] = 1;
+      bib1[1] = 2;
+      bib1[2] = 840;
+      bib1[3] = 10003;
+      bib1[4] = 3;
+      bib1[5] = 1;
+      bib1[6] = -1;
      </screen>
     </para>
    </example>
@@ -1569,14 +1560,15 @@ void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
     And OID may also be filled from a string-based representation using
     dots (.). This is achieved by function
     <screen>
-     int oid_dotstring_to_oid(const char *name, int *oid);
+     int oid_dotstring_to_oid(const char *name, Odr_oid *oid);
     </screen>
+    This functions returns 0 if name could be converted; -1 otherwise.
    </para>
    <example id="tools.oid.bib1.2"><title>Using oid_oiddotstring_to_oid</title>
     <para>
-     We can create the Bib-1 attribute set OID easier with:
+     We can fill the Bib-1 attribute set OID easier with:
      <screen>
-      int bib1[OID_SIZE];
+      Odr_oid bib1[OID_SIZE];
       oid_oiddotstring_to_oid("1.2.840.10003.3.1", bib1);
      </screen>
    </para>
@@ -1604,7 +1596,7 @@ void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
    <para>
     The function
     <screen>
-     char *oid_oid_to_dotstring(const int *oid, char *oidbuf)
+     char *oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf)
     </screen>
     does the reverse of <function>oid_oiddotstring_to_oid</function>. It
     converts an OID to the string-based representation using dots.
@@ -1630,7 +1622,7 @@ void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
     <para>
      From YAZ version 3 and later, the oident system has been replaced
      by an OID database. OID database is a misnomer .. the old odient
-     was a database system too.
+     system was also a database.
     </para>
     <para>
      The OID database is really just a map between named Object Identifiers
@@ -1708,265 +1700,6 @@ void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
      </para>
     </example>
    </sect2>
-
-   <sect2 id="tools.oid.oident"><title>OID oident</title>
-
-   <note>
-    <para>
-     The oident utility has been removed from YAZ version 3. This
-     sub section only applies to YAZ version 2.
-    </para>
-   </note>
-
-   <para>
-    The OID module provides a higher-level representation of the
-    family of object identifiers which describe the Z39.50 protocol and its
-    related objects. The definition of the module interface is given in
-    the <filename>oid.h</filename> file.
-   </para>
-
-   <para>
-    The interface is mainly based on the <literal>oident</literal> structure.
-    The definition of this structure looks like this:
-   </para>
-
-   <screen>
-typedef struct oident
-{
-    oid_proto proto;
-    oid_class oclass;
-    oid_value value;
-    int oidsuffix[OID_SIZE];
-    char *desc;
-} oident;
-   </screen>
-
-   <para>
-    The proto field takes one of the values
-   </para>
-
-   <screen>
-    PROTO_Z3950
-    PROTO_GENERAL
-   </screen>
-
-   <para>
-    Use <literal>PROTO_Z3950</literal> for Z39.50 Object Identifers,
-    <literal>PROTO_GENERAL</literal> for other types (such as
-    those associated with ILL).
-   </para>
-   <para>
-
-    The oclass field takes one of the values
-   </para>
-
-   <screen>
-    CLASS_APPCTX
-    CLASS_ABSYN
-    CLASS_ATTSET
-    CLASS_TRANSYN
-    CLASS_DIAGSET
-    CLASS_RECSYN
-    CLASS_RESFORM
-    CLASS_ACCFORM
-    CLASS_EXTSERV
-    CLASS_USERINFO
-    CLASS_ELEMSPEC
-    CLASS_VARSET
-    CLASS_SCHEMA
-    CLASS_TAGSET
-    CLASS_GENERAL
-   </screen>
-
-   <para>
-    corresponding to the OID classes defined by the Z39.50 standard.
-
-    Finally, the value field takes one of the values
-   </para>
-
-   <screen>
-    VAL_APDU
-    VAL_BER
-    VAL_BASIC_CTX
-    VAL_BIB1
-    VAL_EXP1
-    VAL_EXT1
-    VAL_CCL1
-    VAL_GILS
-    VAL_WAIS
-    VAL_STAS
-    VAL_DIAG1
-    VAL_ISO2709
-    VAL_UNIMARC
-    VAL_INTERMARC
-    VAL_CCF
-    VAL_USMARC
-    VAL_UKMARC
-    VAL_NORMARC
-    VAL_LIBRISMARC
-    VAL_DANMARC
-    VAL_FINMARC
-    VAL_MAB
-    VAL_CANMARC
-    VAL_SBN
-    VAL_PICAMARC
-    VAL_AUSMARC
-    VAL_IBERMARC
-    VAL_EXPLAIN
-    VAL_SUTRS
-    VAL_OPAC
-    VAL_SUMMARY
-    VAL_GRS0
-    VAL_GRS1
-    VAL_EXTENDED
-    VAL_RESOURCE1
-    VAL_RESOURCE2
-    VAL_PROMPT1
-    VAL_DES1
-    VAL_KRB1
-    VAL_PRESSET
-    VAL_PQUERY
-    VAL_PCQUERY
-    VAL_ITEMORDER
-    VAL_DBUPDATE
-    VAL_EXPORTSPEC
-    VAL_EXPORTINV
-    VAL_NONE
-    VAL_SETM
-    VAL_SETG
-    VAL_VAR1
-    VAL_ESPEC1
-   </screen>
-
-   <para>
-    again, corresponding to the specific OIDs defined by the standard.
-    Refer to the
-    <ulink url="&url.z39.50.oids;">
-     Registry of Z39.50 Object Identifiers</ulink> for the
-     whole list.
-   </para>
-
-   <para>
-    The desc field contains a brief, mnemonic name for the OID in question.
-   </para>
-
-   <para>
-    The function
-   </para>
-
-   <screen>
-    struct oident *oid_getentbyoid(int *o);
-   </screen>
-
-   <para>
-    takes as argument an OID, and returns a pointer to a static area
-    containing an <literal>oident</literal> structure. You typically use
-    this function when you receive a PDU containing an OID, and you wish
-    to branch out depending on the specific OID value.
-   </para>
-
-   <para>
-    The function
-   </para>
-
-   <screen>
-    int *oid_ent_to_oid(struct oident *ent, int *dst);
-   </screen>
-
-   <para>
-    Takes as argument an <literal>oident</literal> structure - in which
-    the <literal>proto</literal>, <literal>oclass</literal>/, and
-    <literal>value</literal> fields are assumed to be set correctly -
-    and returns a pointer to a the buffer as given by <literal>dst</literal>
-    containing the base
-    representation of the corresponding OID. The function returns
-    NULL and the array dst is unchanged if a mapping couldn't place.
-    The array <literal>dst</literal> should be at least of size
-    <literal>OID_SIZE</literal>.
-   </para>
-   <para>
-
-    The <function>oid_ent_to_oid()</function> function can be used whenever
-    you need to prepare a PDU containing one or more OIDs. The separation of
-    the <literal>protocol</literal> element from the remainder of the
-    OID-description makes it simple to write applications that can
-    communicate with either Z39.50 or OSI SR-based applications.
-   </para>
-
-   <para>
-    The function
-   </para>
-
-   <screen>
-    oid_value oid_getvalbyname(const char *name);
-   </screen>
-
-   <para>
-    takes as argument a mnemonic OID name, and returns the
-    <literal>/value</literal> field of the first entry in the database that 
-    contains the given name in its <literal>desc</literal> field.
-   </para>
-
-   <para>
-    Three utility functions are provided for translating OIDs'
-    symbolic names (e.g. <literal>Usmarc</literal> into OID structures
-    (int arrays) and strings containing the OID in dotted notation
-    (e.g. <literal>1.2.840.10003.9.5.1</literal>).  They are:
-   </para>
-
-   <screen>
-    int *oid_name_to_oid(oid_class oclass, const char *name, int *oid);
-    char *oid_to_dotstring(const int *oid, char *oidbuf);
-    char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oidbuf);
-   </screen>
-
-   <para>
-    <literal>oid_name_to_oid()</literal>
-     translates the specified symbolic <literal>name</literal>,
-     interpreted as being of class <literal>oclass</literal>.  (The
-     class must be specified as many symbolic names exist within
-     multiple classes - for example, <literal>Zthes</literal> is the
-     symbolic name of an attribute set, a schema and a tag-set.)  The
-     sequence of integers representing the OID is written into the
-     area <literal>oid</literal> provided by the caller; it is the
-     caller's responsibility to ensure that this area is large enough
-     to contain the translated OID.  As a convenience, the address of
-     the buffer (i.e. the value of <literal>oid</literal>) is
-     returned.
-   </para>
-   <para>
-    <literal>oid_to_dotstring()</literal>
-    Translates the int-array <literal>oid</literal> into a dotted
-    string which is written into the area <literal>oidbuf</literal>
-    supplied by the caller; it is the caller's responsibility to
-    ensure that this area is large enough.  The address of the buffer
-    is returned.
-   </para>
-   <para>
-    <literal>oid_name_to_dotstring()</literal>
-    combines the previous two functions to derive a dotted string
-    representing the OID specified by <literal>oclass</literal> and
-    <literal>name</literal>, writing it into the buffer passed as
-    <literal>oidbuf</literal> and returning its address.
-   </para>
-
-   <note>
-    <para>
-     The OID module has been criticized - and perhaps rightly so
-     - for needlessly abstracting the
-     representation of OIDs. Other toolkits use a simple
-     string-representation of OIDs with good results. In practice, we have
-     found the interface comfortable and quick to work with, and it is a
-     simple matter (for what it's worth) to create applications compatible
-     with both ISO SR and Z39.50. Finally, the use of the
-     <literal>/oident</literal> database is by no means mandatory.
-     You can easily create your own system for representing OIDs, as long
-     as it is compatible with the low-level integer-array representation
-     of the ODR module.
-    </para>
-   </note>
-
-   </sect2>
   </sect1>
   <sect1 id="tools.nmem"><title>Nibble Memory</title>
 
@@ -2369,7 +2102,10 @@ typedef struct oident
         <para>
          Defines the name of the retrieval format. This can be
          any string. For SRU, the value, is equivalent to schema (short-hand);
-         for Z39.50 it's equivalent to simple element set name. 
+         for Z39.50 it's equivalent to simple element set name.
+         For YAZ 3.0.24 and later this name may be specified as a glob
+         expression with operators
+         <literal>*</literal> and <literal>?</literal>.
         </para>
        </listitem>
       </varlistentry>
@@ -2408,7 +2144,7 @@ typedef struct oident
         <para>
          The <literal>marc</literal> element specifies a conversion 
          to - and from ISO2709 encoded MARC and 
-         <ulink url="&url.marcxml;">&marcxml;</ulink>/MarcXchange.
+         <ulink url="&url.marcxml;">&acro.marcxml;</ulink>/MarcXchange.
          The following attributes may be specified:
 
          <variablelist>
@@ -2462,7 +2198,7 @@ typedef struct oident
        <listitem>
         <para>
          The <literal>xslt</literal> element specifies a conversion
-         via &xslt;. The following attributes may be specified:
+         via &acro.xslt;. The following attributes may be specified:
 
          <variablelist>
           <varlistentry><term><literal>stylesheet</literal> (REQUIRED)</term>