PMB

De ClissXXI.

Présentation

PMB est un outil de gestion de bibliothèque très complet. Il est disponible à l'adresse suivante : PMB

Modélisation des données

(pour la description des tables, ne figurent que les champs 'nécessaires')

Les notices

Pour créer une notice, il faut dans un premier temps collecter les informations nécessaires telles que les auteurs, les éditeurs, ...

  • table des auteurs : authors(author_id, author_type, author_name, author_rejete)
    • author_rejete est en fait le prénom de l'auteur
  • table des éditeurs : publishers(ed_id, ed_name)
  • table des collections : collections(collection_id, collection_name, collection_parent, collection_issn)
    • collection_parent est l'indice de l'éditeur
  • pour les catégories, trois tables entre en jeu :
    • table qui gère les catégories et sous-catégories : noeuds(id_noeud, num_parent, num_renvoi_voir, visible, num_thesaurus)
      • visible spécifie si cette catégorie doit être affichée
    • table qui contient les noms des catégories : categories(num_noeud, langue, libelle_categorie)
      • langue est la langue de la catégorie (fr_FR pour français)
    • table qui fait le lien entre une notice et une catégorie : num_categories(notcateg_notices, num_noeud)
      • notcateg_notices est l'id de la catégorie
      • num_noeud est l'id du noeud


Pour ne pas perdre d'informations lors d'une migration, il peut être utile de créer des champs personnalisés pour les notices. Ces champs personnalisés sont définis à l'aide de trois tables :

  • table de définitions des nouveaux champs (nom, type, ...) : notices_custom(idchamp, name, titre, type, datatype, option, multiple, obligatoire, ordre)
    • type spécifie si c'est un champ texte (text) ou une liste de selection(list)
    • datatype est le type de donnée (par exemple small_text)
    • option est une liste spécifiant les options des champs (ex la taille)
    • multiple spécifie qu'une liste est multiple
    • ordre indique dans quel ordre doivent être affichés les champs
  • table contenant les options des listes déroulantes définies dans la table précédente : notices_custom_list(notices_custom_champ, notice_custom_list_value, notice_custom_list_lib,ordre)
  • table contenant les valeurs des nouveaux champs : notices_custom_values(notices_custom_champ, notices_custom_origine, notice_custom_small_text, ..[text,integer,float].)


Pour stocker les informations des notices, on utilise la table : notices(notice_id, typdoc, tit1, tit4, ed1_id, coll_id, year, code, npages, size, prix)

  • typdoc indique le type du document(document papier = 70)
  • tit1 indique le titre principal
  • tit4 indique le sous-titre
  • ed1_id est l'id de l'éditeur
  • coll_id est l'id de la collection
  • year est l'année de parution


En plus de cette table, on utilise :

  • table contenant des index des notices pour la recherche : notices_global_index(num_notice, no_index, infos_global, index_infos_global)
  • tables contenant la langue des notices : notices_langues(num_notice, type_langue, code_langue)


Les exemplaires

Une fois qu'une notice a été créée, il faut lui adjoindre les exemplaires correspondants. Pour cela, on a besoin d'informations telles que la localisation de l'exemplaire (ex: bibliothèque), la section (ex: adulte, enfant, archive), le statut (ex: empruntable, non-empruntable), le type de l'exemplaire (ex: livre). Pour stocker ces informations, on utilise les tables suivantes :

  • pour la localisation : docs_location(idlocation,location_libelle,locdoc_owner,location_visible_opac)
    • locdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)
    • location_visible_opac indique si la locationdoit apparaitre dans l'opac
  • pour la section : docs_section(idsection, section_libelle, sdoc_owner, section_visible_opac)
    • sdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)
    • section_visible_opac indique si la section doit être visible dans l'opac
  • pour effectuer la liaison entre la section et la localisation : docsloc_section(num_section, num_location)
  • pour le statut : docs_statut(idstatut, statut_libelle, pret_flag, statusdoc_owner)
    • pret_flag indique si le document est empruntable (1 ou 0)
    • statusdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)
  • pour le type : docs_type(idtyp_doc, tdoc_libelle, duree_pret, duree_resa, tdoc_owner, tarif_pret)


Pour stocker l'exemplaire lui-même, on utilise la table : exemplaires(expl_id, expl_cb, expl_notice, expl_typdoc, expl_section, expl_statut, expl_location, expl_date_depot, expl_date_retour, expl_prix, expl_owner)

  • expl_cb est le code de l'exemplaire (il doit être unique)
  • expl_notice est l'indice de la notice rattachée à l'exemplaire
  • expl_typdoc est l'indice du type de document
  • expl_section est l'indice de la section
  • expl_location est l'indice de la localisation
  • expl_owner est le propriétaire de l'exemplaire (mettre 0 pour pas de propriétaire)


Remarques

Lors d'une migration, mieux vaut entrer les localisations, sections, statuts, types directement dans le backoffice. Il faut faire de même avec les champs personnalisés. On évite ainsi les problème de gestion de type et de compatibilité.

Tous les index peuvent être créés autamatiquement après la migration en utilisant les outils de maintenance de la base de données disponibles dans le backoffice.

Il faut veiller que la table des catégories 'categories' contiennent (num_noeud=2,libelle='~termes non classés') et (num_noeud=3,libelle='~termes orphelins') et que la table noeuds contiennent (id_noeud=1, autorité='TOP', num_parent=0, num_renvoi_voir=0, visible=0 num_thesaurus=1(=> à modifier en fonction)), (id_noeud=2, autorite='NONCLASSES' num_parent=1, num_renvoi_voir=0, visible=0, num_thesaurus=1(=> à modifier en fonction)), et (id_noeud=3, autorite='ORPHELINS', num_parent=1, num_renvoi_voir=0, visible=0, num_thesaurus=1(=>à modifier en fonction)).

Si après une migration, les recherches ne fonctionnent plus, utilisez les outils de maintenance de la base de données pour regénérer les index.

Pour écrire des scripts de migration de notice, on peut s'inspirer du code de PMB lui-même :

  • pour les notices : pmb/notices/update_notice.inc.php
  • pour les exemplaires : fonction 'import' de pmb/classes/expl.class.php

Support Z39.50

La recherche inter-bibliothèque via le protocole Z39.50/SRU nécessite les liens Yaz pour PHP. Ils est disponibles de deux manières:

  • option --with-yaz au moment de (re)compiler PHP (ex: dans votre debian/rules); PHP4 uniquement (cf. doc/installation_debian.pdf dans PMB)
  • Version PECL (qui n'a pas fonctionné sous Debian Sarge) - paquets Debian sur le site des développeurs:
echo "deb http://ftp.indexdata.dk/debian etch main" >> /etc/apt/sources.list
wget -O- http://ftp.indexdata.dk/pub/debian/indexdata.asc | apt-key add -
aptitude update
aptitude install yaz php5-yaz
  • Correction du bug de la recherche Z39.50 et PHP5 :
    • Cause : PHP5 n'accepte pas qu'une variable soit définie deux fois.
    • Résolution : commenter la ligne var $categorie; et conserver la ligne var $categorie = array(); dans le fichier /pmb/classes/z3950_notice.class.php (vers la ligne 46)


Configuration de la liste des serveurs Z39.50

  • BN FRANCE
    • nom : BN France
    • utilisation : CATALOG
    • base : ABCDEFGHIJKLMNOPQRSTUVWXYZ1456
    • url : z3950.bnf.fr
    • port : 2211
    • format : UNIMARC
    • utilisateur : Z3950
    • mot de passe : Z3950_BNF
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • ENS Cachan
    • nom : ENS Cachan
    • utilisation : CATALOG
    • base : ADVANCE
    • url : 138.231.48.2
    • port : 21210
    • format : UNIMARC
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • ENS Paris
    • nom : ENS Paris
    • utilisation : CATALOG
    • base : INNOPAC
    • url : halley.ens.fr
    • port : 210
    • format : UNIMARC
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • Library of Congress
    • nom : Library of Congress
    • utilisation : CATALOG
    • base : Voyager
    • url : z3950.loc.gov
    • port : 7090
    • format : USMARC
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • Polytechnique Montréal
    • nom : Polytechnique Montréal
    • utilisation : CATALOG
    • base : ADVANCE
    • url : advance.biblio.polymtl.ca
    • port : 210
    • format : USMARC
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • SUDOC Référence
    • nom : SUDOC
    • utilisation : CATALOG
    • base : abes-z39-public
    • url : carmin.sudoc.abes.fr
    • port : 210
    • format : UNIMARC
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • Univ Laval (QC)
    • nom : Univ Laval (QC)
    • utilisation : CATALOG
    • base : UNICORN
    • url : ariane2.ulaval.ca
    • port : 2200
    • format : USMARC
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • Univ Lib Edinburgh
    • nom : Univ Lib Edinburgh
    • utilisation : CATALOG
    • base : voyager
    • url : catalogue.lib.ed.ac.uk
    • port : 7090
    • format : UNIMARC
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • Univ Lyon 2 SCD
    • nom : Univ Lyon 2 SCD
    • utilisation : CATALOG
    • base : ouvrages
    • url : scdinf.univ-lyon2.fr
    • port : 21210
    • format : unimarc
    • attributs : auteur=1004, isbn=7, sujet=21, titre=4
  • Univ Oxford
    • nom : Univ Oxford
    • utilisation : CATALOG
    • base : ADVANCE
    • url : library.ox.ac.uk
    • port : 210
    • format : usmarc
    • attributs : auteur=1003, isbn=7, sujet=21, titre=4
  • Univ Valenciennes
    • nom : Univ Valenciennes
    • utilisation : CATALOG
    • base : INNOPAC
    • url : 195.221.187.151
    • port : 210
    • format : UNIMARC
    • attributs : auteur=1, isbn=7, mots=1016, sujet=21, titre=4
Outils personnels