The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Koha-Contrib-Mirabel

Synopsys

koha-mirabel sync
koha-mirabel sync --doit
koha-mirabel sync --doit --noverbose
koha-mirabel clean

Description

Ce programme synchronise la base d'information Mir@bel avec un Catalogue Koha. Il agit comme un client des services web de Mir@bel. Les informations sont retrouvées dans Mir@bel et reportées dans les notices bibliographiques Koha de périodique.

Le programme accède à une instance de Koha au moyen des variables d'environnement habituelles : KOHA_CONF et PERL5LIB. Deux préférences systèmes sont nécessaires :

Synchronisation

La synchronisation consiste à interroger Mir@bel afin d'obtenir la liste des info relatives aux revues du partenaire. À chaque revue est associée une liste de services. Un service Mir@bel est une collection d'informations décrivant des ressources en-ligne, dont leur URL. Les services Mir@bel sont reportés dans des répétitions de la zone dont le tag est spécifié par la préférence système MirabelTag. Les sous-champs de la zone MARC contiennent les info du service :

La synchronisation est effectuée en lançant la commande : koha-mirabel sync. Le paramètre --doit est nécessaire pour que la synchronisation soit effective. Par défaut, le script affiche une description du travail qu'il effectue. Par exemple, en traitant une notice dont le biblionumner est 82146, il peut afficher ceci :

________________________________________ #82146
00564    a2200157   4500
022    $a 1144-5645
041    $a fre
044    $a FRA
245    $a Alliage
260    $a Nice : $b Association ANAIS
362    $a n˚3, 1990
500    $a moins de 10 fascicules
942    $c PER
999    $c 82146 $d 82146

Mirabel #6951
   nom: Revues électroniques de l'université de Nice
   urlservice: http://revel.unice.fr/
   acces: Libre
   debut: 1999
   urldirecte: http://revel.unice.fr/alliage/index.html?id=4041
   fin: 2012
   type: Intégral
Mirabel #6952
   nom: Revues électroniques de l'université de Nice
   urlservice: http://revel.unice.fr/
   acces: Libre
   debut: 1999
   urldirecte: http://revel.unice.fr/alliage/index.html?id=33
   fin: 2012
   type: Indexation
 
APRÈS:
00564    a2200157   4500
022    $a 1144-5645
041    $a fre
044    $a FRA
245    $a Alliage
260    $a Nice : $b Association ANAIS
362    $a n˚3, 1990
500    $a moins de 10 fascicules
901    $3 6951 $4 Intégral $a http://revel.unice.fr/alliage/index.html?id=4041 $b Revues électroniques de l'université de Nice $c Libre $d 1999-2012
901    $3 6952 $4 Indexation $a http://revel.unice.fr/alliage/index.html?id=33 $b Revues électroniques de l'université de Nice $c Libre $d 1999-2012
942    $c PER
999    $c 82146 $d 82146

Nettoyage

La tâche de nettoyage interroge Mir@bel pour obtenir la liste des identifiants des services qui ont été supprimés depuis un an. Ces identifiants sont recherchés dans le Catalogue Koha (sous-champ $4 de la zone spécifiée par la préférence MirabelTag) et les zones MARC correspondantes sont supprimées des notices.

On lance la commande : koha-mirabel clean. Le paramêtre --doit est nécessaire pour que les notices concernées soient effectivement modifiées. Par défaut, sans le paramètre --noverbose, le détail du travail effectué est affiché. Par exemple, si parmi les services supprimés de Mir@bel, il y a le service 2540 et qu'il se trouve dans la zone 901 de la notice Koha 81935, les info suivantes seront affichées :

Suppression dans Koha des services retirés de Mir@bel depuis un an
Services supprimées : 977, 979, 981, 982, 1459, 1460, 1461, 1513, 1518, 1628, 1631, 1638, 1639, 1640, 1689, 1727, 1728, 1729, 1777, 1784, 1869, 1870, 1871, 2108, 2111, 2303, 2537, 2540, 2540, 2603, 2759, 2786, 2794, 2808, 2809, 2890, 2891, 2892, 2938, 2939, 3096, 3207, 3258, 3260, 3295, 3322, 3323, 3324, 3338, 3382, 3420, 3452, 3463, 3496, 3545, 3627, 4113, 4133, 4219, 4475, 4497, 4904, 4905, 4981, 4996, 5041, 5102, 5138, 5157, 5186, 5279, 5296, 5310, 5314, 5370, 5390, 5474, 5517, 5632, 5936, 5978, 6015, 6019, 6316, 6341, 6393, 6395, 6403, 6417, 6434, 6442, 6459, 6560, 6575, 6576, 6584, 6637, 6820, 6822, 6865, 6909, 6987, 6999, 7000, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7029, 7031, 7032, 7033, 7034, 7068, 7088, 7089, 7139, 7141, 7143, 7162, 7259, 7262, 7428, 7477, 7552, 7632

________________________________________ #81935
01504    a2200241   4500
022    $a 0458-726X
041    $a fre
044    $a FRA
245    $a Langages
260    $a Paris : $b Larousse : $b A. Colin, $c n°1, 1966 - ...
500    $a Collection en cours. Trimestriel
901    $3 959 $4 Intégral $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Libre $d 2002-03-2010-12
901    $3 2165 $4 Sommaire $a http://www.vjf.cnrs.fr/clt/v2/Page_revue.php?ValCodeRev=LANGA $b Cultures, Langues, Textes : la revue de sommaires $c Libre $d 1969- $e Lacunaire
901    $3 2539 $4 Intégral $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Libre $d 2001-2001 $e Lacunaire - Sélection d'articles
901    $3 2540 $4 Résumé $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Libre $d 2001-02- $e Lacunaire - Sélection d'articles
901    $3 2541 $4 Sommaire $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Libre $d 2002-03-
901    $3 3917 $4 Intégral $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Restreint $d 2011-03-
901    $3 4824 $4 Intégral $a http://www.persee.fr/web/revues/home/prescript/revue/lgge $b Persée $c Libre $d 1966-2006
901    $3 5145 $4 Intégral $a http://www.cairn.info/revue-langages.htm $b Cairn $c Libre $d 2004-2010
901    $3 5146 $4 Intégral $a http://www.cairn.info/revue-langages.htm $b Cairn $c Restreint $d 2011-2013
942    $c PER
362    $a n ̊4, 1966 - ... [lac. : n ̊10, 1968 ; n ̊20, 1970 ; n ̊25, 1972]
999    $c 81935 $d 81935

APRÈS
01504    a2200241   4500
022    $a 0458-726X
041    $a fre
044    $a FRA
245    $a Langages
260    $a Paris : $b Larousse : $b A. Colin, $c n°1, 1966 - ...
500    $a Collection en cours. Trimestriel
901    $3 959 $4 Intégral $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Libre $d 2002-03-2010-12
901    $3 2165 $4 Sommaire $a http://www.vjf.cnrs.fr/clt/v2/Page_revue.php?ValCodeRev=LANGA $b Cultures, Langues, Textes : la revue de sommaires $c Libre $d 1969- $e Lacunaire
901    $3 2539 $4 Intégral $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Libre $d 2001-2001 $e Lacunaire - Sélection d'articles
901    $3 2541 $4 Sommaire $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Libre $d 2002-03-
901    $3 3917 $4 Intégral $a http://www.armand-colin.com/revue/20/1/langages.php $b Armand Colin $c Restreint $d 2011-03-
901    $3 4824 $4 Intégral $a http://www.persee.fr/web/revues/home/prescript/revue/lgge $b Persée $c Libre $d 1966-2006
901    $3 5145 $4 Intégral $a http://www.cairn.info/revue-langages.htm $b Cairn $c Libre $d 2004-2010
901    $3 5146 $4 Intégral $a http://www.cairn.info/revue-langages.htm $b Cairn $c Restreint $d 2011-2013
942    $c PER
362    $a n ̊4, 1966 - ... [lac. : n ̊10, 1968 ; n ̊20, 1970 ; n ̊25, 1972]
999    $c 81935 $d 81935

Automatisation

Les opérations de synchronisation-nettoyage peuvent être programmées sur un serveur Linux au moyen d'entrées dans le crontab. Par exemple, pour une synchro quotidienne à 2h15 et un nettoyage hebdomadaire, on peut avoir ceci :

# Mir@bel
15 2 * * * koha-mirabel sync --doit --noverbose
@weekly koha-mirabel clean --doit --noverbose

Affichage

Une fois les info de Mir@bel remontées dans les notices d'un Catalogue Koha, il faut les afficher. A cet effet, il faut modifier la feuille de style de la page de détail de l'OPAC. Par exemple, pour afficher toutes les URL de Mir@bel, on peut avoir cela :

<xsl:if test="marc:datafield[@tag='901']">
  <div style="border: 1px solid #a0a0a0; padding: 5px; margin-bottom: 5px; background: #fafafa;">
    <p style="font-size: 11px; font-weight: bold; margin-bottom: 2px;">Accès en ligne:</p>
    <xsl:call-template name="mirabel">
      <xsl:with-param name="tag">901</xsl:with-param>
      <xsl:with-param name="type">Intégral</xsl:with-param>
      <xsl:with-param name="label">Texte intégral des articles</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="mirabel">
      <xsl:with-param name="tag">901</xsl:with-param>
      <xsl:with-param name="type">Sommaire</xsl:with-param>
      <xsl:with-param name="label">Sommaire de la revue</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="mirabel">
      <xsl:with-param name="tag">901</xsl:with-param>
      <xsl:with-param name="type">Résumé</xsl:with-param>
      <xsl:with-param name="label">Résumé des articles</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="mirabel">
      <xsl:with-param name="tag">901</xsl:with-param>
      <xsl:with-param name="type">Indexation</xsl:with-param>
      <xsl:with-param name="label">Indexation des articles</xsl:with-param>
    </xsl:call-template>
  </div>
</xsl:if>
 
 
<xsl:template name="mirabel">
  <xsl:param name="tag"/>
  <xsl:param name="type"/>
  <xsl:param name="label"/>
  <xsl:if test="marc:datafield[@tag=$tag]/marc:subfield[@code='4']=$type">
    <span class="results_summary">
      <span class="label">
        <xsl:value-of select="$label"/>
        <xsl:text> : </xsl:text>
      </span>
      <xsl:for-each select="marc:datafield[@tag=$tag]">
        <xsl:if test="marc:subfield[@code='4']=$type">
          <a>
            <xsl:attribute name="href">
              <xsl:value-of select="marc:subfield[@code='a']"/>
            </xsl:attribute>
            <xsl:value-of select="marc:subfield[@code='b']"/>
          </a>
          <xsl:for-each select="marc:subfield[contains('cde', @code)]">
            <xsl:text>, </xsl:text>
            <xsl:value-of select="."/>
          </xsl:for-each>
          <xsl:if test="not(position()=last())">
            <br/>
          </xsl:if>
        </xsl:if>
      </xsl:for-each>
    </span>
  </xsl:if>
</xsl:template>

Copyright 2014 by Tamil, s.a.r.l.

Lhttp://www.tamil.fr

This script is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself.