Skip to content

Petite bidouille Aleph : améliorer le rapport sur la recherche d'exemplaires

05/10/2011

Mise à jour du 24/02/2012 : Je me suis qu’il y avait une aberration dans le code initial, les résultats affichés contenaient de grosses erreurs (pour un bug évident dans les modifications de la feuille de style. J’ai corrigé les infos ci-dessous.

Je reprends une activité (normale ?) sur ce blog avec un petit truc sympa sur Aleph.

Énoncé du problème

Dans Aleph, un service « Formulaire général de recherche des exemplaires » permet d’obtenir une liste d’exemplaires correspondant à certains critères (bibliothèque, localisation, statut d’exemplaire, etc.).

Le rapport produit un tableau fournissant une série d’infos pour chaque exemplaire. Certaines de ces infos proviennent de la notice bibliographique, les autres de la notice d’exemplaire lui-même.

Il y a un hic.

Quand on a plusieurs exemplaires, les infos bibliographiques ne sont affichées que pour le premier des exemplaires. Pour les autres la case est laissée vide et ça ressemble à ça :

Pour peu qu’on ait envie de retrier les exemplaires dans un tableur, on perd vite des informations bien pratiques.

Explication technique du problème (XML-XSL)

Les administrateurs Aleph savent (les autres s’en foutent) que ce tableau est une page HTML, résultat d’un fichier XML (contenant la liste des exemplaires) transformé par une feuille XSL appelée -retrieval-form.xsl (ou general-retrieval-form-00.xsl, ou -01.xsl, etc).

Pour simplifier, le fichier XML qui liste les exemplaires est ainsi conçu (les balises sont fictives) :

<file>
  <document>
    <no>000275321</no>
    <titre>20 clés pour la compétitivité</titre>
    <auteur>Galambert, Patrice</auteur>
    <cb>0960126298</cb>
    <bib>BU Droit</bib>
    <st_ex>Prêt long</st_ex>
  </document>
  <document>
    ...
  </document>
</file>

Pour chaque exemplaire (ici, balise <document>), sont listées les infos bib et les infos d’exemplaire. Or quand l’exemplaire est le deuxième pour la même notice bib, les infos bibliographiques ne sont pas répétées dans le fichier XML.

La feuille XSL génère une ligne du tableau par exemplaire (une ligne pour chaque balise <document>), et met dans chaque cellule la valeur d’un élément. Si l’élément est absent, la cellule reste vide…

Solution

Pour les infos bibliographique de chaque exemplaire, avant que la feuille XSL ne mette l’information « Titre » dans la cellule Titre, il faut tester si ce titre est mentionné. S’il n’y a pas de titre, la feuille XSL doit remonter au premier exemplaire précédent contenant un titre, et le récupérer pour l’afficher dans l’exemplaire qui n’en a pas.

C’est ce que fait le code ci-dessous : pour une notice dont le champ Titre (z-13-title) est vide, il récupère l’information Titre dans la balise précédente la plus proche ayant un titre.

Plus exactement, le code ci-dessous récupère l’ensemble de la notice « complète » de référence

   <xsl:variable name="notice_ref">
    <xsl:choose>
        <xsl:when test="string-length(./z13-title)=0">
            <xsl:copy-of select="preceding::section-02[string-length(./z13-title) !=0 ][1]"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy-of select="."/>
        </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

Il faut ensuite, pour chaque information bibliographique souhaitée, définir une variable dont le contenu sera la valeur de cette notice de référence, et non la valeur de la notice en cours (champ vide)

Pour chaque exemplaire, on génère une variable title. Sa valeur est la suivante :

<xsl:variable name="title">
        <xsl:value-of select="$notice_ref//z13-title"/>
</xsl:variable>
  • si la balise z13-title a une valeur vide, on remonte l’exemplaire précédent qui contient un titre (si l’exemplaire immédiatement précédent, on remonte encore jusqu’à trouver un titre)
  • sinon, on prend la valeur de la balise z13-title

Qu’en faire ?

Si vous souhaitez modifier vos fichiers general-retrieval-form.xsl (stockés dans le répertoire XXX01/form_fre), il faut :

  1. dans la section <xsl:template name="section-02"> (ligne 49 ou environ), coller le code indiqué ci-dessus (variable $notice_ref et variable title)
  2. là où la feuille XSL indiquait qu’il fallait, pour chaque section-02 (càd chaque exemplaire), mettre la valeur de la balise z13-title, il faut désormais mettre la valeur de la variable $title
    donc remplacer
    <xsl:with-param name="value" select="./z13-title"/>
    par
    <xsl:with-param name="value" select="$title"/>
  3. Si vous voulez faire la même chose pour l’auteur, il faut reprendre dupliquer le code fourni pour générer une variable auteur récupérant la valeur du z13-author
    <xsl:variable name="author">
    <xsl:value-of select="$notice_ref//z13-author"/>
    </xsl:variable>

    et remplacer
    <xsl:with-param name="value" select="./z13-author"/>
    par
    <xsl:with-param name="value" select="$author"/>
  4. idem pour l’ISBN, etc.

Sinon, vous pouvez aussi m’envoyer vos fichiers par mail.

Publicités

Les commentaires sont fermés.

%d blogueurs aiment cette page :