<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<article>
  <title>Paramétrer et migrer ses données vers Koha 2.2</title>

  <articleinfo>
    <pubdate>2005-01-06</pubdate>

    <author>
      <firstname>Paul</firstname>

      <surname>POULAIN</surname>

      <authorblurb>
        <para>Consultant indépendant en logiciels libres, Koha "Release
        Manager" pour la version 2.0 puis 2.2, membre du comité de pilotage
        international</para>
      </authorblurb>

      <email>paul AT koha-fr.org</email>
    </author>

    <revhistory>
      <revision>
        <revnumber>2.2.0</revnumber>

        <date>2005-01-06</date>

        <authorinitials>pp</authorinitials>

        <revdescription>
          <para>Version initiale</para>
        </revdescription>
      </revision>
    </revhistory>
  </articleinfo>

  <section>
    <title>Introduction</title>

    <section>
      <title>Utilisation de ce document</title>

      <section>
        <title id="copyright">Copyright and License</title>

        <para>Copyright 2004 Paul Poulain <email>paul.poulain AT
        free.fr</email></para>

        <para>This document is related to Koha and is licensed to you under
        the GNU General Public License version 2 or later (<ulink
        url="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</ulink>).</para>

        <para>Koha-related documents may be reproduced and distributed in
        whole or in part, in any medium physical or electronic, as long as
        this copyright notice is retained on all copies.</para>

        <para>You may create a derivative work and distribute it provided that
        you:</para>

        <orderedlist>
          <listitem>
            <para>License the derivative work with this same license, or the
            Linux Documentation Project License (<ulink
            url="http://www.tldp.org/COPYRIGHT.html">http://www.tldp.org/COPYRIGHT.html</ulink>).
            Include a copyright notice and at least a pointer to the license
            used.</para>
          </listitem>

          <listitem>
            <para>Give due credit to previous authors and major
            contributors.</para>
          </listitem>
        </orderedlist>

        <para>Commercial redistribution is allowed and encouraged; however,
        the author would like to be notified of any such distributions.</para>
      </section>

      <section id="disclaimer">
        <title>Disclaimer</title>

        <para>No liability for the contents of this document can be accepted.
        Use the concepts, examples and information at your own risk. There may
        be errors and inaccuracies, that could be damaging to your system.
        Proceed with caution, and although this is highly unlikely, the
        author(s) do not take any responsibility.</para>

        <para>All copyrights are held by their by their respective owners,
        unless specifically noted otherwise. Use of a term in this document
        should not be regarded as affecting the validity of any trademark or
        service mark. Naming of particular products or brands should not be
        seen as endorsements.</para>
      </section>
    </section>

    <section>
      <title>Généralités</title>

      <para>La migration de ses données se fait de manière itérative :</para>

      <itemizedlist>
        <listitem>
          <para>On examine les données à migrer (on suppose un fichier
          iso2709)</para>
        </listitem>

        <listitem>
          <para>On fait une partie du paramétrage</para>
        </listitem>

        <listitem>
          <para>On importe les notices et on regarde</para>
        </listitem>

        <listitem>
          <para>On affine le paramétrage des notices bibliographiques</para>
        </listitem>

        <listitem>
          <para>On réimporte les notices...</para>
        </listitem>

        <listitem>
          <para>Lorsque l'import des notices bibliographiques est terminé et
          validé, on peut passer à la migration des notices d'autorité, qui se
          fait également de manière itérative.</para>
        </listitem>
      </itemizedlist>
    </section>

    <section>
      <title>Pré-requis</title>

      <para>La migration des données suppose des compétences métiers ET
      informatiques. Ne tentez pas de vous lancer si vous n'avez pas ces deux
      compétences. Si vous êtes informaticien vous risqueriez de décevoir vos
      utilisateurs. Si vous êtes bibliothécaire, ce qui suit va vous paraître
      totalement obscur.</para>

      <para>Si vous ne pouvez pas réunir les deux compétences, il serait plus
      prudent d'envisager une aide externe...</para>

      <para>Pré-requis techniques :</para>

      <itemizedlist>
        <listitem>
          <para>Installation de Koha : on suppose que Koha est installé. $KOHA
          est le répertoire dans lequel se trouve l'interface
          bibliothécaire.</para>

          <programlisting>ls -l $KOHA</programlisting>

          <para>doit renvoyer : cgi-bin htdocs modules scripts</para>
        </listitem>

        <listitem>
          <para>Le fichier de configuration de Koha se trouve dans
          /etc/koha.conf</para>
        </listitem>

        <listitem>
          <para>Toutes les manipulations décrites ci-après sont effectuées sur
          une console (shell) sur le serveur.</para>
        </listitem>

        <listitem>
          <para>se placer dans un shell (ligne de commande) et vérifier que
          Perl peut trouver vos modules :</para>

          <programlisting>export PERL5LIB=$KOHA/modules</programlisting>
        </listitem>
      </itemizedlist>
    </section>
  </section>

  <section>
    <title>Première itération</title>

    <section>
      <title>dumpmarc.pl</title>

      <para>Se placer dans le répertoire ou le fichier des notices à migrer se
      trouve. Nous allons supposer qu'il s'appelle notices.iso.</para>

      <para>Pour examiner son contenu, le script dumpmarc.pl vous sera utile
      :</para>

      <programlisting>$KOHA/scripts/misc/dumpmarc.pl -f notices.iso</programlisting>

      <para>L'ensemble des notices est affiché sous une forme lisible par un
      humain normalement constitué, ce qui n'est pas le cas d'une notice
      "iso2709" brute.</para>

      <para>Vous pouvez stopper l'affichage par CTRL-C si vous avez beaucoup
      de notices !</para>

      <para>Examinez les notices à l'écran, et notez les champs qui sont
      fréquemment utilisés. Il y aura probablement (en UNIMARC) :</para>

      <itemizedlist>
        <listitem>
          <para>200, avec titre et auteurs</para>
        </listitem>

        <listitem>
          <para>205, pour les mentions d'édition</para>
        </listitem>

        <listitem>
          <para>210 pour l'adresse bibliographique</para>
        </listitem>

        <listitem>
          <para>215 pour la collation</para>
        </listitem>

        <listitem>
          <para>010 pour l'ISBN et 011 pour l'ISSN</para>
        </listitem>

        <listitem>
          <para>600 à 699 pour les autorités matières</para>
        </listitem>

        <listitem>
          <para>700 à 799 pour les autorités auteurs</para>
        </listitem>
      </itemizedlist>

      <para>Mais ce document n'est pas un cours UNIMARC !</para>

      <para>Vous devez également chercher les notices d'exemplaire. Ces
      dernières sont généralement dans le champ 995 si vos notices respectent
      bien la recommandation 995.</para>
    </section>

    <section>
      <title>Paramétrage UNIMARC</title>

      <para>Lorsque vous avez installé Koha, vous avez du choisir et donc
      importer tous les champs/sous-champs UNIMARC. Vous pouvez donc aller
      dans</para>

      <synopsis>Koha &gt;&gt; Paramètres &gt;&gt; Grilles de catalogage </synopsis>

      <para>Là, vous pouvez modifier la grille pour l'adapter à vos besoins et
      à ce que vous avez vu dans le paragraphe précédent.</para>

      <section>
        <title>Notion essentielle : base MARC / base non-MARC</title>

        <para>L'une des contraintes majeures de l'équipe de développement de
        Koha est de fournir une application qui puisse être
        "multi-MARC".</para>

        <para>Or, si toutes les déclinaisons MARC ont la même forme
        (l'iso2709), la signification de chaque champ/sous champ diffère
        totalement d'une déclinaison à une autre.</para>

        <para>Par exemple, en UNIMARC, le champ 200$a contient le
        titre.</para>

        <para>En MARC21, le titre est dans la zone 245$a.</para>

        <para>Le 245$a en UNIMARC contient ... rien (la zone n'existe pas
        !)</para>

        <para>Bref, il n'est pas possible de manière simple de gérer ces
        différences.</para>

        <para>L'équipe de développement de Koha a donc choisi une méthode pour
        contourner ce problème, sans gréver les performances : tout est stocké
        en double<note>
            <para>ceux que ce stockage en double gènerait pourront toujours se
            consoler en se disant que le coût du Mo de disque est ridicule en
            regard du gain de performance obtenu en recherche ! D'ailleurs,
            sans rentrer dans les détails, toujours pour des questions de
            performance, les données sont en fait stockées en triple !</para>
          </note> : sous la forme "MARC" (200$a, qui ignore le sens du champ)
        et sous la forme "décodée" (title qui ignore la position MARC).</para>

        <para>Une table de paramétrage est mise en place lors de
        l'installation. Cette table contient non seulement les libellés de
        tous les champs et sous-champs UNIMARC (ou MARC21), mais également les
        liens entre les deux bases.</para>

        <para>L'application, lors de l'ajout ou la modification des notices,
        se charge de stocker l'information deux fois.</para>

        <para>Cela augmente fortement la complexité des opérations
        d'ajout/modification des notices. Mais simplifie d'autant les
        opérations de recherche et de lecture. Comme dans un SIGB 90% des
        accès sont des recherches et moins de 10% des ajouts/modifications, la
        rapidité de l'application s'en trouve renforcée.</para>

        <para>Par exemple, lors de l'affichage d'une liste de résultats à une
        requète, on récupère le "title" directement. Si on devait passer par
        la notice unimarc, on devrait récupérer toute la notice pour en
        extraire le seul titre !</para>
      </section>

      <section>
        <title>Paramétrage de la grille de catalogage</title>

        <para>Notez que Koha sait gérer différentes grilles de catalogage. Je
        vous conseille de peaufiner la première grille avant de créer les
        autres.</para>

        <para>Pour l'instant, on ne s'occupe pas des autorités.</para>

        <para>Selectionnez la grille de catalogage par défaut, et modifiez les
        champs les uns après les autres.</para>

        <para>Pour chaque champ, vous pouvez préciser :</para>

        <itemizedlist>
          <listitem>
            <para>s'il est répétable ou non. S'il est noté répétable, le signe
            apparaitra devant le champ, vous permettant de le répéter lorsque
            vous en avez besoin.</para>
          </listitem>

          <listitem>
            <para>s'il est obligatoire ou non. Si le champ est obligatoire,
            vous ne pourrez valider la notice avant d'avoir saisi au moins un
            sous-champ dans le champ.</para>
          </listitem>

          <listitem>
            <para>Le libellé devant le champ est également défini dans les
            tables de paramétrage. Vous pouvez le modifier pour utiliser le
            libellé que vous souhaitez. Par défaut, le libellé est celui de la
            norme UNIMARC.</para>
          </listitem>
        </itemizedlist>

        <para>Pour chaque sous-champ, vous pouvez préciser :</para>

        <itemizedlist>
          <listitem>
            <para>Si le sous-champ est actif ou non. Choisissez un onglet
            différent de -1 (ignore) pour l'activer. Notez que tous les
            sous-champs d'un champ donné doivent impérativement être dans le
            même onglet. Sinon, et si le champ est répétable, Koha ne saura
            comment réagir lorsque vous demanderez à répeter le champ !</para>
          </listitem>

          <listitem>
            <para>Si le sous champ est obligatoire ou non. S'il est
            obligatoire, vous ne pourrez valider la notice avant de l'avoir
            rempli.</para>
          </listitem>

          <listitem>
            <para>Si le sous champ est répétable ou non. Si un sous-champ est
            répétable, vous pouvez simplement le répéter en séparant les
            différentes valeurs répétées par le signe |</para>
          </listitem>

          <listitem>
            <para>Le "champ Koha" relié au sous-champ MARC. Koha étant
            multi-MARC, il faut lui "apprendre" le sens de certains champs
            MARC spécifiques. Par exemple, lui expliquer que le sous champ
            200$a contient le titre de la notice. Que le sous-champ 200$f
            contient l'auteur... Dans la grille fournie par défaut, la plupart
            des "connexions" sont déjà actives. Vous pouvez éventuellement
            avoir à en modifier certaines comme le lien vers
            subject.bibliosubject, qui peut pointer vers un sous-champ 6xx, ou
            le lien vers additionalauthors.authors, qui contient le lien vers
            les co-auteurs, voire le lien vers bibliosubtitle.subtitle, qui
            contient les sous-titres.</para>

            <para>Les "champs Koha" peuvent provenir des tables biblio,
            biblioitems, items,
            additionalauthors,bibliosubtitle,bibliosubject.</para>
          </listitem>

          <listitem>
            <para>Les "champs connexes". Lorsque vous faites une recherche sur
            un champ donné, Koha fera automatiquement une recherche vers les
            "champs connexes" que vous aurez déclaré. Cela permet d'étendre
            une recherche sur l'auteur aux co-auteurs, aux autorités auteurs
            si vous en avez... Vous pouvez étendre une recherche sur le titre
            aux sous-titres, au titre de collection, aux titres
            uniformes...</para>
          </listitem>

          <listitem>
            <para>cocher ou non l'option "caché". Cette option est normalement
            à utiliser pour les champs $9 des autorités (voir chapitre sur les
            autorités). Si vous la cochez, le champ sera visible dans
            l'éditeur MARC, mais pas dans la visualisation de la notice. Vous
            pouvez aussi utiliser cette option pour faire disparaitre un
            sous-champ de l'OPAC.</para>
          </listitem>

          <listitem>
            <para>cocher ou non l'option "URL". Si vous la cochez, le champ
            sera un lien cliquable.</para>
          </listitem>
        </itemizedlist>

        <para>Il y a également 3 options qui permettent de préciser les
        contraintes de saisie sur les sous-champs :</para>

        <itemizedlist>
          <listitem>
            <para>Authorised values</para>
          </listitem>

          <listitem>
            <para>Thésaurus</para>
          </listitem>

          <listitem>
            <para>Plugin</para>
          </listitem>
        </itemizedlist>

        <para>Vous pouvez laisser ces éléments, nous y reviendrons
        ultérieurement.</para>

        <para>Vous pouvez ensuite aller dans le menu catalogage, et ajouter
        une nouvelle notice vierge. Vérifiez là que vous avez bien activé ce
        que vous souhaitiez.</para>
      </section>

      <section>
        <title>Vérification de la "connexion MARC &lt;=&gt; non MARC"</title>

        <para>Vous pouvez vérifier rapidement les connexions entre les bases
        MARC et non MARC à l'aide de</para>

        <synopsis>Koha &gt;&gt; Liens Koha &lt;=&gt; MARC-DB</synopsis>

        <para>Cet écran vous montre en un coup d'oeil les connexions entre
        tous les champs de la partie non-MARC et le champ/sous-champ
        MARC.</para>

        <para>Vous pouvez également modifier les liens depuis cette interface,
        mais attention : <emphasis role="bold">chaque modification est faite
        dans TOUTES les grilles de catalogage</emphasis>.</para>
      </section>
    </section>

    <section>
      <title>Premier import</title>

      <para>Retournez sur votre shell, et lancez le premier import :</para>

      <programlisting>$KOHA/scripts/misc/bulkmarcimport.pl -d -c UNIMARC --file notices.iso</programlisting>

      <para>le -d indique de supprimer les notices existantes. Il est inutile
      pour le 1er import, mais comme il va être utile ensuite, autant prendre
      de bonnes habitudes.</para>

      <para>le -c UNIMARC indique l'ENCODAGE des caractères dans lequel se
      trouve votre fichier. Attention, vous pouvez avoir des notices au format
      UNIMARC mais un encodage de caractères issu de la norme MARC21. Si
      lorsque vous regardez les notices dans Koha les accents apparaissent
      bizarrement, relancez l'import avec l'autre option (-c MARC21)</para>
    </section>

    <section>
      <title>Premiers résultats</title>

      <section>
        <title>Vérification visuelle</title>

        <para>Lorsque le script est terminé ou que vous l'avez interrompu,
        vous pouvez aller voir le résultat sur le catalogue.</para>

        <para>En général, ce ne sera pas terrible. Cherchez un terme utilisé
        très fréquemment, et regardez si vous trouvez des notices
        d'exemplaires (dans la grille simplifiée comme dans la grille complète
        les exemplaires sont bien en évidence dans un "bloc"
        spécifique.</para>

        <para>S'il n'y en n'a pas, vous devez reprendre le paramétrage de Koha
        pour les faire apparaitre.</para>

        <para>Vérifiez aussi que les grilles "simplifiées" (non-MARC) et
        "complètes" (MARC) sont bien remplies.</para>

        <para>S'il vous semble qu'il manque des sous-champs dans la grille
        MARC (en visualisation), deux cas sont possibles :</para>

        <itemizedlist>
          <listitem>
            <para>Le sous-champ est bien dans le catalogue, mais n'apparaît
            pas. Cela signifie que le sous-champ n'est pas "activé" mais dans
            l'onglet -1 (ignore). Vous pouvez aller modifier le paramétrage et
            retourner visualiser le résultat, sans avoir besoin de réimporter
            les données.</para>
          </listitem>

          <listitem>
            <para>Le sous-champ n'est effectivement pas dans la base, mais
            vous pensez qu'il devrait s'y trouver. Vérifiez à l'aide de
            l'outil dumpmarc.pl qu'il se trouve bien ou vous
            l'attendez.</para>
          </listitem>
        </itemizedlist>

        <para>Si vous voyez dans la notice "complète" (MARC) des données qui
        ne se trouvent pas dans la notice "simplifiée" (non-MARC), c'est
        peut-être normal, peut-être pas.</para>

        <para>En effet, le nombre de champs de la partie "non-MARC" est
        limité. On peut y trouver seulement :</para>

        <itemizedlist>
          <listitem>
            <para>author (l'auteur)</para>
          </listitem>

          <listitem>
            <para>title (le titre)</para>
          </listitem>

          <listitem>
            <para>unititle (le titre uniforme)</para>
          </listitem>

          <listitem>
            <para>notes (les notes biblio)</para>
          </listitem>

          <listitem>
            <para>abstract (le résumé)</para>
          </listitem>

          <listitem>
            <para>seriestitle (le titre de périodique/de collection)</para>
          </listitem>

          <listitem>
            <para>copyrightdate (la date de copyright)</para>
          </listitem>

          <listitem>
            <para>volume (le volume)</para>
          </listitem>

          <listitem>
            <para>number (le numéro de volume)</para>
          </listitem>

          <listitem>
            <para>classification (un code de classification local)</para>
          </listitem>

          <listitem>
            <para>itemtype (le type de document)</para>
          </listitem>

          <listitem>
            <para>url (l'URL)</para>
          </listitem>

          <listitem>
            <para>isbn et issn</para>
          </listitem>

          <listitem>
            <para>dewey</para>
          </listitem>

          <listitem>
            <para>publicationyear (la date de publication/d'édition)</para>
          </listitem>

          <listitem>
            <para>publishercode (le nom de l'éditeur)</para>
          </listitem>

          <listitem>
            <para>volumedate (la date du volume)</para>
          </listitem>

          <listitem>
            <para>volumeddesc (la description du volume)</para>
          </listitem>

          <listitem>
            <para>illus (l'illustrateur)</para>
          </listitem>

          <listitem>
            <para>pages (le nombre de pages)</para>
          </listitem>

          <listitem>
            <para>bnotes (une seconde zone de notes)</para>
          </listitem>

          <listitem>
            <para>size (la taille, c'est une zone de texte, donc 24x30 est une
            valeur possible)</para>
          </listitem>

          <listitem>
            <para>lccn (la classification LoC)</para>
          </listitem>
        </itemizedlist>

        <para>Toutes ces zones sont <emphasis role="bold">NON</emphasis>
        répétables dans la partie "non-MARC" de la base, partie qui apparaît
        dans la vue simplifiée. Si la zone est répétée, seule la première
        valeur sera affichée, ou, dans certains cas, les zones seront séparées
        par le caractère |</para>

        <para>Il y a également 3 zones supplémentaires, qui sont répétables
        :</para>

        <itemizedlist>
          <listitem>
            <para>les auteurs supplémentaires
            (additionalauthors.author)</para>
          </listitem>

          <listitem>
            <para>les sous-titres (bibliosubtitle.subtitle)</para>
          </listitem>

          <listitem>
            <para>l'indexation matières / sujet (bibliosubject.subject)</para>
          </listitem>
        </itemizedlist>
      </section>

      <section>
        <title>Requète de vérification.</title>

        <para>Vous pouvez aussi lancer des requètes SQL sur la base pour
        effectuer quelques vérifications.</para>

        <para>La requète suivante affiche tous les champs et sous champs avec
        leur usage. C'est utile pour détecter les erreurs de paramétrage de la
        grille de catalogage :</para>

        <programlisting>SELECT tab, tagfield, tagsubfield, count( * ) AS tot FROM marc_subfield_structure LEFT JOIN marc_subfield_table ON marc_subfield_table.tag = marc_subfield_structure.tagfield AND marc_subfield_table.subfieldcode = marc_subfield_structure.tagsubfield GROUP BY tab, tag, subfieldcode</programlisting>
      </section>

      <section>
        <title>Itérations</title>

        <para>Vous pouvez itérer les imports sur le catalogage jusqu'à avoir
        un résultat qui vous convienne.</para>

        <para>Notez que le script bulkmarcimport.pl ne modifie en rien les
        notices bibliographiques.</para>

        <para>Une migration est probablement une bonne raison de faire du
        nettoyage dans les notices, pour supprimer des choses inutiles ou en
        modifier d'autres pour être plus conformes à la norme.</para>

        <para>Modifier le script bulkmarcimport.pl demande des connaissances
        assez approfondies en matière de Perl, et notamment dans la
        manipulation des notices MARC.</para>

        <para>La manipulation des notices MARC passe par le package Perl
        MARC::Record.</para>

        <para>Vous en trouverez la description à l'aide de Perldoc :</para>

        <programlisting>perldoc /usr/lib/perl5/site_perl/5.8.3/MARC/Record.pm</programlisting>

        <para>(le chemin est celui de ma machine Mandrake 10.0, il peut être
        différent selon votre distribution linux/unix)</para>

        <para>Vous pouvez aussi trouver la même documentation sur le net
        :</para>

        <para>http://marcpm.sourceforge.net/MARC/Record.html</para>

        <para>et</para>

        <para>http://marcpm.sourceforge.net/MARC/Field.html</para>

        <para>MARC::Record permet de faire n'importe quelle manipulation sur
        la notice. Son seul défaut est la complexité de son interface. Mais
        cette complexité est imposée par la complexité de la norme
        iso2709.</para>
      </section>
    </section>

    <section>
      <title>Amélioration de la grille de saisie</title>

      <para>Jusqu'à maintenant, les sous-champs ont tous le même format de
      saisie : le sous-champ est libre, le catalogeur peut saisir n'importe
      quelle valeur.</para>

      <para>Dans Koha, il y a 3 autres possibilités pour la saisie d'un
      sous-champ :</para>

      <itemizedlist>
        <listitem>
          <para>Liste de valeurs autorisées</para>
        </listitem>

        <listitem>
          <para>Thésaurus/autorité</para>
        </listitem>

        <listitem>
          <para>Plugin</para>
        </listitem>
      </itemizedlist>

      <section>
        <title>Liste de valeurs autorisées</title>

        <para>Les listes de valeurs autorisées permettent de définir les
        valeurs possibles pour un sous-champ donné. C'est particulièrement
        utile pour les sous-champs qui ne peuvent contenir selon la norme
        qu'un nombre limité de valeurs.</para>

        <para>On peut citer par exemple :</para>

        <itemizedlist>
          <listitem>
            <para>Les langues</para>
          </listitem>

          <listitem>
            <para>Les pays</para>
          </listitem>

          <listitem>
            <para>Les codes de fonction pour les responsabilités
            secondaires</para>
          </listitem>
        </itemizedlist>

        <para>Nous allons voir comment activer les valeurs autorisées pour les
        langues.</para>

        <para>Lorsque ce sera fait, le sous-champ ne sera plus une zone de
        saisie libre, mais une liste déroulante.</para>

        <para><note>
            <para>du point de vue ergonomique, rechercher une valeur dans une
            liste déroulante n'est efficace que s'il y a un nombre limité de
            valeurs possibles. Une vingtaine est un maximum efficace. Ne
            multipliez donc pas inutilement les valeurs autorisées.</para>
          </note></para>

        <section>
          <title>Définition de la liste de valeurs autorisées</title>

          <para>Koha &gt;&gt; Valeurs autorisées &gt;&gt; Nouvelle
          catégorie</para>

          <para>Saisissez alors le code de la catégorie. Vous devriez mettre
          un code compréhensible (LANG par exemple).</para>

          <para>Après avoir saisi le code catégorie, vous devez également
          saisir la première valeur possible.</para>

          <para>Il y a deux éléments dans les valeurs autorisées : le code qui
          est mis dans la notice, et le libellé qui est affiché dans la grille
          de catalogage.</para>

          <para>Pour les langues, on peut saisir, par exemple
          <emphasis>eng</emphasis> comme code et <emphasis>anglais</emphasis>
          comme libellé. Le code eng sera entré dans la notice si vous
          choisissez "anglais" dans la liste.</para>
        </section>

        <section>
          <title>"Connexion"</title>

          <para>Une fois que votre liste est complète (ou dès que vous le
          souhaitez, vous pouvez toujours modifier la liste ensuite),
          retournez dans le paramétrage de la grille de catalogage, dans le
          champ que vous voulez "contraindre" (dans l'exemple des langues, le
          101 ($a pour la langue du document, ou autre -mais ce document n'est
          pas un cours UNIMARC ;-) )</para>

          <para>Dans les contraintes de saisie du champ, vous avez, dans la
          liste des "valeurs autorisées", la catégorie "LANG". Choisissez
          cette catégorie, et c'est tout, la grille de catalogage ne vous
          présentera plus maintenant une zone libre mais la liste des valeurs
          que vous aurez définies.</para>
        </section>

        <section>
          <title>Deux trucs complémentaires</title>

          <para>Il y a deux trucs complémentaires que vous devez connaitre
          :</para>

          <itemizedlist>
            <listitem>
              <para>Si le sous-champ est facultatif, la valeur vide est
              automatiquement rajoutée par l'éditeur MARC. S'il est
              obligatoire, elle n'est pas ajoutée, et vous ne devriez
              évidemment pas la saisir. Donc, dans un cas comme dans l'autre,
              la valeur vide est inutile !</para>
            </listitem>

            <listitem>
              <para>Vous devez savoir que les valeurs sont présentées dans
              l'ordre des libellés, et pas dans l'ordre des codes. Vous devez
              aussi savoir que l'espace est "plus petit" que la lettre A. Vous
              pouvez utiliser ces deux éléments pour définir la valeur par
              défaut pour un sous-champ : saisissez un espace devant le
              libellé, et la valeur apparaitra en premier. De plus, l'espace
              seul en début de chaine de caractère étant ignoré en HTML, le
              libellé apparaitra tout à fait correctement à l'écran, sans
              l'espace supplémentaire !</para>
            </listitem>
          </itemizedlist>
        </section>

        <section>
          <title>Conclusion</title>

          <para>Maintenant que vous savez définir les listes de valeurs
          autorisées, vous pouvez apprendre qu'il existe un script qui fait
          cela pour vous pour les listes de langues.</para>

          <para>Il s'agit du script :</para>

          <programlisting>$KOHA/misc/migration_tools/buildLANG.pl</programlisting>

          <para>Lancez le sans paramètre pour avoir les options (et n'oubliez
          pas le export PERL5LIB pour que le script sache retrouver certains
          modules spécifiques de Koha)</para>
        </section>

        <section>
          <title>Cas particulier : itemtypes et branches (IMPORTANT)</title>

          <para>La liste des valeurs autorisées lors de la "connexion" d'un
          sous-champ est automatiquement enrichie de deux types
          particuliers.</para>

          <para><emphasis role="bold">Ces deux valeurs autorisées doivent
          impérativement être connectées à des champs MARC</emphasis></para>

          <section>
            <title>itemtypes</title>

            <para>Il s'agit de la table des types de document qui sont gérés
            dans l'application. Cette table sert en plusieurs endroits</para>

            <itemizedlist>
              <listitem>
                <para>Les lecteurs peuvent limiter leurs recherches à un
                certain type de document</para>
              </listitem>

              <listitem>
                <para>les règles de prêt dépendent des types de
                document.</para>
              </listitem>
            </itemizedlist>

            <para>il est donc impératif que cette table soit connectée. En
            UNIMARC, elle devrait logiquement être connectée au champ
            200$b.</para>

            <para>Le champ auquel la table itemtypes est connectée doit aussi
            être relié au <emphasis>champ Koha</emphasis>
            biblioitems.itemtype.</para>
          </section>

          <section>
            <title>branches</title>

            <para>Il s'agit de la table des annexes de la bibliothèque. Il
            faut impérativement déclarer une annexe au moins (l'annexe
            principale).</para>

            <para>Cette annexe doit être connectée dans deux sous-champs du
            champ des exemplaires. Pour l'UNIMARC et la recommandation 995, ce
            devrait être</para>

            <para>Ces deux sous-champs doivent être reliés aux champs
            items.holdingbranch et items.homebranch.</para>
          </section>
        </section>
      </section>

      <section>
        <title>Thésaurus / listes d'autorités</title>

        <para>Je ne vous ferai pas l'affront de vous expliquer ce que sont les
        autorités selon la norme UNIMARC.</para>

        <para>Koha sait gérer les autorités au format MARC (UNIMARC ou une
        autre déclinaison). Le présent chapitre vous apprendra comment
        paramétrer les différentes catégories de thésaurus/autorités, et
        comment migrer un thésaurus.</para>

        <section>
          <title>Précision initiale</title>

          <para>Dans la norme UNIMARC, le sous-champ $3 de la notice
          bibliographique est utilisé pour stocker le numéro de la notice
          d'autorité, et faire ainsi le lien entre autorités (A) et
          bibliographies (B).</para>

          <para>Koha sait gérer ce champ, mais utilise le sous-champ $9 pour
          conserver en interne les liens entre notices (B et A). Le $9 étant
          réservé au système local, c'est donc conforme à la norme. Cela
          présente plusieurs autres avantages de manière interne.</para>

          <para>Notez également que la migration d'une version 2.0 vers une
          version 2.2 n'est pas abordée ici. Elle est assez complexe, faites
          moi signe si besoin, j'ai quelques scripts que je pourrais vous
          envoyer sans difficulté.</para>
        </section>

        <section>
          <title>Définition d'un thésaurus / liste d'autorité</title>

          <para>Lorsque vous avez installé Koha, vous avez eu la possibilité
          d'importer la définition des autorités UNIMARC (vers la fin de
          l'installation, lorsque vous avez la possibilité d'importer des
          fichiers SQL.</para>

          <para>Si vous ne l'avez pas fait, faites le manuellement en
          recherchant le fichier SQL dans le répertoire ou vous avez
          décompressé Koha.</para>

          <para>Ce fichier de paramètre n'est pas exploitable directement : il
          fournit tous les champs de base pour que vous puissiez définir vos
          propres structures d'autorité.</para>

          <para>Nous allons étudier comment mettre en place une liste
          d'autorité auteurs noms propres. Le principe est le même pour les
          autorités matière ou autres auteurs.</para>
        </section>

        <section>
          <title>Paramétrage de la grille d'autorité</title>

          <para>Allez dans Koha &gt;&gt; paramètres &gt;&gt; Structure
          thésaurus</para>

          <para>Cliquez sur <emphasis>Ajout d'un type
          d'autorité</emphasis>.</para>

          <para>Saisissez :</para>

          <itemizedlist>
            <listitem>
              <para>Un code pour ce type d'autorité. Pour les Noms Propres,
              vous pouvez saisir NP</para>
            </listitem>

            <listitem>
              <para>Description : il s'agit de la description du type
              d'autorité. Cette description est seulement informative.</para>
            </listitem>

            <listitem>
              <para>Résumé : saisissez ici les éléments qui permettront de
              définir l'affichage des notices dans les listes de résultats.
              Vous pouvez indiquer dans cette zone les différents sous-champs
              qui apparaitront, entourés par des crochet [], avec une chaine
              qui peut le précéder et une chaine qui peut le suivre. Par
              exemple, pour les autorités NP, vous pouvez indiquer par exemple
              :</para>

              <synopsis>[200a][200b][200c]
[400a][400z]
[100a]</synopsis>

              <para>L'affichage du résumé de la notice dans les listes de
              recherche comportera ainsi la forme retenue et la ou les formes
              rejetées. Si vous trouvez que cela fait des listes trop longue,
              ne mettez que la ligne avec les [200].</para>
            </listitem>

            <listitem>
              <para>Le numéro (000 - 999) du champ de la notice d'autorité qui
              est reporté dans la notice bibliographique. Pour les autorités
              NP, par exemple, c'est le champ 200 qui sera reporté dans la
              notice bibliographique (dans le champ 700,701 ou 702) Comme vous
              le constatez, vous n'indiquez qu'un champ, pas des sous-champs.
              En effet, Koha reportera automatiquement dans la notice
              bibliographique tous les sous-champs. Dans notre exemple, le
              200$a ira dans le 700$a, le 200$b ira dans le 700$b, ...</para>
            </listitem>
          </itemizedlist>

          <para>Lorsque vous avez terminé, validez la saisie. Le type
          d'autorité devrait apparaître dans la liste des autorités. Cliquez
          ensuite sur "structure MARC". La première fois, Koha détectera qu'il
          n'y a pas encore de grille pour ce type d'autorité et vous demandera
          quelle grille existante il doit recopier. Au début vous ne pourrez
          choisir que le type "default" bien évidemment.</para>

          <para>Vous pouvez alors mettre au point la grille de catalogage de
          l'autorité de la même manière que vous avez défini la grille de
          catalogage des bibliographies. Certaines options spécifiques aux
          notices bibliographiques ne sont pas disponibles, mais vous devriez
          retrouver des choses connues.</para>

          <para>Lorsque la grille d'autorité est bien définie, vous pouvez
          aller dans le menu autorités et créer une notice d'autorité. vous
          verrez ainsi à quoi ressemble votre grille de saisie
          d'autorité.</para>
        </section>

        <section>
          <title>Connexion B =&gt; A</title>

          <para>Maintenant que les notices d'autorités sont paramétrées, il
          faut retourner dans le paramétrage des notices bibliographiques pour
          relier les notices B (bibliographies) et A (autorités).</para>

          <para>Pour cela, il faut retourner dans</para>

          <para><synopsis>Koha &gt;&gt; Paramètres &gt;&gt; biblio structure</synopsis></para>

          <para>Allez sur le champ 700, qui contient la forme d'autorité de
          l'auteur principal (ou des auteurs principaux).</para>

          <section>
            <title>sous-champ $9</title>

            <para>Ainsi que nous l'avons déjà expliqué, Koha utilise le champ
            $9 pour faire le lien entre la notice B et la notice A.</para>

            <para>Vérifiez donc que le sous-champ $9 est créé, et s'il ne
            l'est pas, créez le, et activez le dans le même onglet que les
            autres sous-champs du champ 700. Vous devriez cocher la case
            "caché" pour qu'il n'apparaisse pas dans l'OPAC puisqu'il est
            inutile.</para>
          </section>

          <section>
            <title>Connexion</title>

            <para>Allez modifier les sous-champs du champ 700. Sur l'un
            d'entre eux (logiquement, le $a, mais ce n'est pas obligatoire),
            sélectionnez comme contrainte de saisie, dans la liste des
            autorités/thésaurus, la valeur NP.</para>

            <para>Vous venez de dire à Koha que le champ 700 contient des
            valeurs qui sont issues de la liste d'autorité NP.</para>

            <para>Vous pouvez aller ajouter une notice. Devant le 700$a, vous
            verrez qu'il y a maintenant trois points ...</para>

            <para>Ces ... sont un lien cliquable qui ouvre une fenêtre
            "popup", qui vous permet de faire une recherche d'autorité et
            reporter ce que vous aurez trouvé. Lorsque vous ferez un report,
            la "popup" se fermera, et les valeurs de la notice d'autorité que
            vous avez sélectionnée seront reportées automatiquement dans la
            notice bibliographique.</para>
          </section>
        </section>

        <section>
          <title>Reconstruction automatique</title>

          <para>Il n'est pas possible de proposer un script de reconstruction
          qui fonctionne à tous les coups. Surtout qu'il devra se comporter
          différemment pour les NP (Noms Propres), les NC (Noms Communs), les
          CO (Collectivités)...</para>

          <para>Vous trouverez néanmoins dans le répertoire
          misc/migration_tools un script pour reconstruire les autorités NC
          :</para>

          <programlisting>build6xx.pl, qui reconstruit le 606, avec la gestion des $x.</programlisting>

          <para>Vous pouvez l'utiliser comme base pour reconstruire les 700,
          les 500 ce dont vous avez besoin.</para>
        </section>
      </section>

      <section>
        <title>Plugins</title>

        <para>Les plugins sont des modules complémentaires qui permettent de
        réaliser toutes sortes de traitements pour aider à la saisie des
        notices bibliographiques (ou d'autorité)</para>

        <para>Par exemple, pour UNIMARC, vous trouverez des plugins qui vons
        vous simplifier la vie pour :</para>

        <itemizedlist>
          <listitem>
            <para>la saisie des éditeurs et des collections</para>
          </listitem>

          <listitem>
            <para>la saisie des champs codés (1xx)</para>
          </listitem>
        </itemizedlist>

        <section>
          <title>Principe général</title>

          <para>Un plugin s'active sur un sous-champ donné. Lorsqu'il est
          actif, le sous-champ a les propriétés suivantes :</para>

          <itemizedlist>
            <listitem>
              <para>Il peut être rempli manuellement comme un champ
              normal</para>
            </listitem>

            <listitem>
              <para>Il dispose de ... qui ouvrent une popup. Cette popup vous
              assistera dans le remplissage du champ</para>
            </listitem>

            <listitem>
              <para>Lorsque vous arrivez ou quittez le sous-champ, certains
              plugins vont automatiquement aller modifier des valeurs dans
              d'autres sous-champs de la grille de catalogage.</para>
            </listitem>
          </itemizedlist>
        </section>

        <section>
          <title>Champs codés</title>

          <para>Dans la version 2.2 de Koha, l'Ecole Nationale Supérieure des
          Mines de Paris a développé un plugin pour tous les champs 1xx, qui
          sont les champs codés.</para>

          <para>Les ... ouvrent une popup qui présente pour chaque élément
          codé du sous-champ des listes déroulantes, permettant de le saisir
          de manière complète assez aisément.</para>
        </section>

        <section>
          <title>Editeurs/collections</title>

          <para>Les plugins appelés unimarc_field_210c.pl et
          unimarc_field_225a.pl vont remplir automatiquement les champs
          d'éditeur et de collection à partir de l'ISBN (s'il existe).</para>

          <para>Ce plugin est assez délicat à configurer.</para>

          <para>Tout d'abord, il utilise... les fichiers d'autorité. La liste
          des éditeurs peut en effet être vue comme une liste d'autorité (=la
          forme sous laquelle est noté l'éditeur)</para>

          <para>Donc : Koha &gt;&gt; paramètres &gt;&gt; Structure des
          autorités</para>

          <programlisting>Ajoutez un type d'autorité appelé <emphasis>impérativement</emphasis> EDITORS.
Le résumé sera [200a ][ / 200b]
le champ de report sera 200</programlisting>

          <para>Définissez pour ces autorités éditeurs la structure suivante
          :</para>

          <programlisting>200$a =&gt; ISBN
200$b =&gt; Editeur
200$c (répétable) =&gt; collections</programlisting>

          <para>Allez ensuite "connecter" les sous champs UNIMARC 210$c et
          225$a.</para>

          <para>C'est terminé.</para>

          <para>Vous pouvez saisir les "notices d'éditeur" en prenant pour
          ISBN les 2 premières parties de celui-ci (1-22-333333-4, prenez
          122), mais SANS les tirets.</para>

          <para>Mettez ce que vous voulez dans l'éditeur, et les collections
          (en les séparant par | comme d'habitude pour répéter un
          sous-champ.</para>

          <para>Ces fonctionnalités sont très utiles pour les bibliothèques
          qui ont un nombre limité d'éditeurs (les bibliothèques
          spécialisées)</para>

          <para>Lorsque vous allez cataloguer une notice, après la saisie de
          l'ISBN, allez sur l'éditeur, il sera rempli automatiquement si vous
          avez tout rentré correctement.</para>

          <para>Cliquez ensuite sur les ... en face des collections, et vous
          pourrez choisir parmi les différentes collections qui existent pour
          cet éditeur.</para>

          <para>Notez qu'il n'est pas encore possible de créer une collection
          à la volée, ni de fabriquer automatiquement les tables d'autorités à
          partir des notices (lors d'une migration par exemple), mais
          quelqu'un le fera bien un jour.</para>
        </section>
      </section>
    </section>

    <section>
      <title>Cas de la migration d'un fichier non iso2709</title>

      <para>Ce cas est très simple à gérer : il faut construire une notice
      MARC::Record (donc iso2709) à la volée.</para>

      <para>C'est assez complexe. Et surtout tous les cas sont envisageables
      !</para>

      <section>
        <title>Migration d'un fichier Texto</title>

        <para>Je dispose de quelques routines pour migrer une base Texto. Je
        ne les mets pas ici parce que chaque installation de Texto A ses
        propres déclarations de champ.</para>

        <para>Mais l'exploitation d'un fichier d'ajout piloté Texto peut se
        résumer ainsi :</para>

        <programlisting>$/ = "";
while (&lt;AJOUT_PILOTE&gt;)
{
    my @fichier = split/\n/,$_; 
# print "taille fichier".$#fichier."\n";
    foreach my $ligne (@fichier) {
# on examine le contenu de la fichier
if ($ligne eq "") {# separateur de fichiers

}

my @mots = split(/\./, $ligne);
$mots[0] =~ s/ //g;
$last=$mots[0] if $mots[0];
$resul{$last}.=$mots[1]." ";
    }

# ok, on a l'enregistrement, on construit le MARC::Record.
my $newRecord = MARC::Record-&gt;new();</programlisting>

        <para>Ce bout de code va construire une table de hashage pour chaque
        notice. On peut ensuite en faire une notice iso2709, et l'importer
        normalement</para>

        <programlisting>$resul{ISBN} =~ s/-//g;
my $newField = MARC::Field-&gt;new(
  '010','','',
  'a' =&gt; $resul{ISBN},
);
$newRecord-&gt;insert_fields_ordered($newField);
$newField = MARC::Field-&gt;new(
  '011','','',
  'a' =&gt; $resul{ISSN},
);
newField = MARC::Field-&gt;new(
  '200','','',
  'a' =&gt; $resul{TIT},
  'b' =&gt; $resul{TYP},
  'e' =&gt; $resul{STI},
  'f' =&gt; $resul{AUT},
  'g' =&gt; $resul{NOT},
);
$newRecord-&gt;insert_fields_ordered($newField);
my ($bibid,$oldbibnum,$oldbibitemnum) = NEWnewbiblio($dbh,$newRecord,'') unless ($test_parameter);</programlisting>

        <para>Notez que le code qui précède ne traite pas des notices
        d'exemplaire (là, c'est vraiment trop spécifique)</para>
      </section>
    </section>
  </section>
</article>