Z39.50 : une norme en mutation - 2001
[Note: ce texte date de 2001; pour des informations plus à jour voir, en français le site de Dominique Lahary, en anglais directement le site de la norme.]
Jadis, quand le SIGB de votre bibliothèque était moderne, il avait une " couche Z39.50 " : vos notices USMARC pouvaient être envoyées à un client qui les recevait, par exemple, en UKMARC. Hier, vous aviez persévéré dans la modernité, vous aviez ajouté une " passerelle Z39.50 " au SIGB de votre bibliothèque : vos notices USMARC pouvaient être envoyées à un client qui les recevait en UKMARC via le web. Aujourd'hui, " l'intégrateur " auquel vous faites appel vous propose d'être tout à fait moderne, et d'acquérir un "portail" qui permet d'interroger en même temps, grâce à Z39.50, votre SIGB et le système de Gestion Electronique de Documents (GED) que vous lui avez acheté.... Bref : la norme Z39.50, qu'on donne régulièrement pour morte, semble avoir des capacités étonnantes à se renouveler. Ce texte cherche donc d'une part à décrire la norme, qu'on voit partout sans trop savoir à quoi elle ressemble, et d'autre part à montrer ses évolutions récentes ou en cours, qui font qu'elle pourrait bien s'adapter à un paysage documentaire profondément modifié par l'Internet.
Présentation de la norme Z39.50
" Z39.50 " renvoie à la norme ANSI/NISO Z39.50, reprise dans la norme NF ISO 23950 : Information et documentation - Recherche d'information (Z39.50) : Définition du service de l'application et spécification du protocole.[1] Cette norme permet l'interrogation de bases de données hétérogènes : il s'agit d'une normalisation non pas des données elles-mêmes, mais des requêtes, c'est-à-dire du dialogue qui a lieu, dans le cadre d'une architecture client-serveur, entre un utilisateur et une ou plusieurs ressources (bibliographiques ou non). L'utilisateur dispose d'un Client Z39.50 (Origine) qui dialogue avec un Serveur Z39.50 (Cible).
Les services
La norme propose 11 " services " (facilities) possibles entre le client et le serveur. Une session élémentaire utilisera 4 services seulement, qui pourront être dits " services de base " (core services) : initialisation, search, retrieval, termination. Les 7 autres services (Result-set-delete, Browse, Sort, Access Control, Accounting/ Resource Control, Explain, Extended Services) pourront être dits " services étendus ".
Les " services de base "
· Initialisation. Il s'agit d'un dialogue préalable à l'interrogation elle-même, dans lequel le client et le serveur s'accordent sur ce qu'il est possible de faire entre eux. Deux éléments sont importants à ce stade. D'une part le client et le serveur se " présentent " : ils déclarent en particulier l'un et l'autre la version de Z39.50 qu'ils utilisent (un client version 3 (1995) et un serveur version 2 (1992) travailleront en version 2) et, plus généralement, le serveur annonce son profil.[2] D'autre part le serveur annonce, par une série de réponses oui/non, les services qu'il propose et les services qu'il ne propose pas.
· Search. Le client envoi une requête au serveur
en respectant le profil indiqué préalablement par le serveur,
c'est-à-dire en se limitant aux " champs " que le serveur
a déclaré pouvoir traiter. Par exemple, si le serveur Z39.50
utilise le profil bib-1, le client pourra faire une interrogation non
seulement sur l'auteur et le titre, mais sur les mots RAMEAU, sur l'ISBN,
etc. en utilisant les opérateurs booléens et un opérateur
de proximité. Sa requête peut éventuellement viser
non pas l'ensemble de la base mais un ensemble de résultats précédemment
obtenu. Le client décide aussi à ce stade de l'affichage
qu'il souhaite : par exemple, en UNIMARC ; et il défini la liste
des champs à afficher s'il y a un petit nombre de résultats
(small record format) ou s'il y a un nombre moyen de résultats
(medium record format), le client définissant lui-même
les notions de petit et de grand nombre de résultats.
Le service search comporte déjà une première
réponse du serveur, qui indique le résultat global de la
recherche et affiche les premiers résultats selon les paramètres
demandés par le client lors de la requête initiale.
· Retrieval. Ce service se décompose en deux parties
: le service Present et le service Segment.
Present permet au client de demander l'affichage des résultats
qui n'ont pas été envoyés par le serveur dans le
cadre de search, par tranches de résultats (par ex. les
résultats 15-20, 54, 65-67), en spécifiant le format d'affichage
attendu (par ex. UNIMARC, LCMARC, Simple Unstructured Text (SUTRS), etc.).
Le client peut donner un nom à cet ensemble de résultats
en vue d'une utilisation ultérieure. Le serveur peut répondre
en conséquence ou, si cela n'est pas possible, proposer un diagnostic
de réponse.
Segment permet au client de segmenter l'ensemble résultat
en un certain nombre d'unités plus petites. Ce service permet d'optimiser
les transmissions sur le réseau.
· Termination. Ce service permet simplement au client ou au serveur de clore la session.
Les " services étendus "
· Result-set-delete, qui est parfois considéré comme un service de base, permet simplement au client de supprimer un ensemble résultat.
· Access Control et Accounting-Resource Control vont de pair : il s'agit pour le serveur de contrôler l'accès à ses ressources (par exemple d'interdire le déchargement de notices) et de " tenir les comptes " (c'est-à-dire de dire au client qu'il a fait tant de requêtes, que son ensemble résultat comprend tant de résultat, éventuellement que cela lui coûte tant et qu'il lui reste tant de crédit )
· Sort est un service (rarement) offert par le serveur qui trie les résultats de la requête. La plupart du temps, cependant, il est possible de réaliser cette opération directement sur le client, ce qui économise des ressources réseau.
· Browse (Scan) permet d'obtenir l'affichage non plus de résultats correspondant à une requête mais d'une liste à partir d'un point de départ : le client doit pouvoir spécifier le point d'entrée dans la liste (par exemple : auteur personne physique = proust), le nombre d'entrées à afficher, éventuellement le nombre d'entrées à afficher avant le point de départ.
· Extented services permet au client (origine) de créer
et de gérer sur le serveur des " ensembles de travail "
(task packages). Il peut ainsi :
- sauvegarder un ensemble résultat lors d'une session normale,
le nommer et le réutiliser ultérieurement, éventuellement
pour ajouter des données à cet ensemble ou supprimer cet
ensemble ;
- sauvegarder une requête sur le serveur (i.e. créer un "
profil de recherche "). Ce service peut être combiné
avec la possibilité de définir une recherche périodique
pour construire dans le cadre d'un service de type " push ".
- commander un item (dans le cadre du prêt entre bibliothèques)
;
- mettre à jour la base de données. Ce service entre dans
le cadre des fonctions de catalogage : il rend possible la modification
des notices dans la base.
- définir des spécifications pour l'exportation de résultats
et " invoquer " ces spécifications : le client peut ainsi
paramétrer plusieurs modèles pour l'exportation des résultats
et les utiliser à volonté.
· Explain. Ce service existe dans la version 3 de Z39.50. Il s'agit pour le serveur de créer une base de données interrogeable par le client et indiquant tous les services qu'il propose et leurs caractéristiques, de préciser ce que contiennent les bases de données qu'il propose, de dire quels services sont payants, etc. Le client trouve ici plus facilement des informations plus complètes que ce qu'il peut obtenir lors du service Init.
Les profils
Un profil Z39.50 spécifie les options et les paramètres
d'utilisation du protocole quand ces choix sont laissés libres
par la norme. Un profil peut être conçu pour spécifier
l'utilisation de Z39.50 par une application (par exemple un SIGB) ; il
peut être conçu pour l'utilisation de Z39.50 par plusieurs
applications (par exemple un SIGB et un logiciel de prêt entre bibliothèques)
; il peut enfin être conçu pour l'utilisation de Z39.50 avec
un autre protocole (par exemple TCP).
Le profil restreint donc les choix offerts par la norme pour en optimiser
l'utilisation au profit d'une communauté ou d'un environnement.
Un élément obligatoire de la norme sera obligatoire dans
le profil ; un élément optionnel dans la norme pourra être
obligatoire, optionnel ou exclus dans le profil.
Dans son profil, le serveur annonce : son adresse (adresse IP, port),
la liste de la ou des base(s) de données qu'il propose, sa version
de Z39.50, le ou les jeu(x) de caractères qu'il connaît.
Surtout, le serveur annonce ses " ensembles d'attributs "
(attribute sets) et ses " formats de réponse
" (record syntaxes). La Z39.50 Maintenance Agency recense
actuellement près d'une trentaine de profils. Mais le profil le
plus courant est le profil bib-1 : c'est le premier en date, c'est le
plus riche, c'est celui qui a été développé
par la communauté des bibliothèques, principale utilisatrice
de la norme. Dans ce qui suit, nous parlerons des ensembles d'attributs
et des formats de réponse à partir du cas du profil bib-1.
Les ensembles d'attributs
Il y a 6 ensembles d'attributs :
- Les attributs d'usage (use attributes) définissent les points d'accès possibles pour effectuer une recherche. Au regard de l'objectif de la norme, qui est de permettre des recherches d'information, c'est sans aucun doute l'ensemble d'attribut le plus important. A cet égard, le profil Bib-1, développé à partir des formats MARC, est extrêmement riche : il peut proposer 99 attributs d'usage (cf. annexe), qui peuvent être combinés (booléens et opérateur de proximité). Dans les faits, il est rare que tous ces attributs soient utilisés : par exemple, le serveur Z39.50 du SCD Lyon 3 en propose 19 et précise que quelques uns d'entre eux seulement sont utilisés. [3]
- Les attributs de relation (relation attributes) définissent les relations possibles entre les valeurs des variables de la requête et les valeurs des variables contenus dans la base : plus petit que, plus grand que, etc...
- Les attributs de troncature (truncation attributes) : à droite, à gauche, etc.
- Les attributs de complétude (completeness attributes) indiquent si le terme de recherche doit être le seul élément d'un champ ou d'un sous-champ (le champ ou le sous-champ est dit complet ou incomplet).
- Les attributs de position (position attributes) qui précisent si un terme de recherche doit être recherché au début d'un champ, à la fin, ou n'importe où.
- Les attributs de structure (structure attributes) qui précisent la forme de ce qui est demandé (mot, phrase, date, chaîne numérique, etc.)
Les formats de réponse
Un client Z39.50 peut demander au serveur le format d'affichage qu'il
souhaite pour ses réponses. Il peut s'agir d'un format MARC
(Z39.50 autorise l'utilisation des formats Unimarc, Intermarc, CCF, Usmarc,
Ukmarc, Normarc, Librismarc, Danmarc, Finmarc, MAB, Canmarc, SBN, Picamarc,
Ausmarc, Ibermarc), mais aussi de SUTRS (Simple Unstructured Text,
c'est-à-dire du texte ASCII, présenté en lignes de
72 caractères), de GRS-1 (Generic Record Syntax : un langage
permettant la représentation d'entrées de bases de données),
de XML et de quelques autres formats secondaires comme OPAC
(un format qui simule, à l'affichage, une fiche ISBD) ou Summary
(utilisé pour l'affichage des premiers résultats par le
serveur dans la phase search de la session).[4]
La demande émane du client (origine) et le serveur (cible) si conforme
dans la mesure du possible : si cela n'est pas possible, le serveur
envoie la réponse dans un format qu'il connaît. Etant donné
le développement historique de Z39.50 dans le monde des bibliothèques,
presque tous les serveurs Z39.50 sont capables de fournir des données
dans un ou plusieurs formats MARC, mais ils sont plus rarement capables
d'utiliser d'autres formats que MARC.
Les spécificités d'un profil tiennent pour l'essentiel au paramétrage de deux éléments : les attributs d'usage et les formats de réponse. C'est ici le serveur qui a la main : un serveur doté d'un profil bib-1 sera donc très performant pour l'exploitation de bases de données bibliographiques traditionnelles en format MARC, mais ne permettra pas d'exploiter des documents XML. A l'inverse, un profil " généraliste " permettra d'exploiter un éventail plus vaste de ressources, mais sera beaucoup moins performant (par exemple, le bath profile ne permet pas, à l'inverse de bib-1, de faire une interrogation sur les mots MESH ou les mots RAMEAU). Dès lors, il devient nécessaire pour exploiter pleinement les ressources documentaires d'un établissement, de bâtir des architectures complexes comprenant plusieurs serveurs Z39.50. On peut imaginer, par exemple, d'utiliser d'une part un serveur Z39.50 utilisant le profil bib-1 pour exploiter les bases de données bibliographiques en format MARC, et d'autre part un serveur Z39.50 utilisant un profil permettant l'exploitation de bases de données en plein-texte. Les deux serveurs pouvant dialoguer simultanément avec un unique client (web) par l'intermédiaire d'une passerelle Z39.50.
Evolutions de la norme
La nouvelle architecture d'attributs
Le Z39.50 Implementors Group (ZIG) a constaté un certain
nombre de difficultés liées à la position tout à
fait particulière du profil bib-1, qui est tout à la fois
le profil général, c'est-à-dire le plus courant,
et le plus spécialisé, puisqu'il est très développé
pour tout ce qui concerne les formats MARC. Le ZIG a donc décidé
de regrouper ceux des ensembles d'attributs qui étaient communs
à plusieurs communautés d'utilisateurs dans une nouvelle
architecture d'attributs, et de laisser ensuite chaque communauté
développer les attributs spécifiques dont elle pourrait
avoir besoin. Dans cette nouvelle architecture, deux ensemble d'attributs
sont particulièrement importants : les " classes d'attributs
" (Utility attribute set) et les " attributs interdisciplinaires
" (Cross domain attribute set). La logique des classes d'attributs
est la suivante : au lieu d'avoir à choisir parmi la liste des
attributs d'usage de bib-1 entre " auteur personne physique "
et " auteur ", la nouvelle classe d'attributs propose un point
d'accès " nom ", qui est éventuellement précisé
par un choix sémantique (" nom de personne "), un choix
fonctionnel (" auteur "), etc. Quant aux attributs interdisciplinaires,
il s'agit de réduire les points d'accès à un plus
petit dénominateur commun qui garantira la " portabilité
" de la recherche d'un domaine à l'autre : en fait, les points
d'accès sont ici ramené à un ensemble de 11 attributs
tirés du Dublin Core.
La logique d'ensemble de cette nouvelle architecture d'attributs est donc
clairement de promouvoir l'interdisciplinarité et la généralité
(non-spécificité) de la norme. C'est aussi la logique du
Bath profile.
Le Bath profile
Le Bath profile est un profil Z39.50 officiel, créé en août 1999 et géré par la Bibliothèque Nationale du Canada.[5] C'est un profil modulable, qui identifie trois niveaux de " besoins fonctionnels " (functionnal requirements) :
- Le " domaine fonctionnel A " (functionnal area A) traite des principales fonctions de recherche et de récupération de données bibliographiques, en portant particulièrement l'accent sur les bibliothèques ;
- Le " domaine fonctionnel B " (functionnal area B) traite des fonctions de recherche et de récupération de données bibliographiques ;
- Le " domaine fonctionnel C " (functionnal area C) traite des fonctions de recherche et de récupération de données au-delà du seul domaine bibliographique pour promouvoir une recherche dite cross domain entre bibliothèques, musées et archives.
Pour chaque domaine, le Bath profile propose plusieurs niveaux
de conformité (conformance levels 0, 1 and 2), qui vont
du moins au plus complexe.
Ainsi par exemple le domaine A niveau 0 permettra des recherches sur auteur,
titre et sujet, tandis que le domaine A niveau 1 permettra en sus des
recherches sur les mots clé en utilisant des troncatures.
De même pour ce qui est de l'affichage des données :
- dans le domaine A, les serveurs Z39.50 devront pouvoir utiliser : (UNIMARC ou MARC21) et (SUTRS ou XML) ; les clients Z39.50 devront pouvoir utiliser au niveau 0 : (UNIMARC ou MARC21) et SUTRS et XML ; au niveau 1 : UNIMARC et MARC21 et SUTRS et XML.
- dans le domaine C, les serveurs devront pouvoir utiliser au niveau 0 : SUTRS ou XML ; au niveau 1 SUTRS et XML (selon une Document Type Definition (DTD) prescrite, utilisant les éléments du Dublin Core [6]) ; les clients devront pouvoir utiliser SUTRS et XML dès le niveau 0.
Il n'est pas possible d'entrer ici réellement dans le détail
du Bath profile, mais la logique en est claire : du domaine A au
domaine C ont s'éloigne de plus en plus des formats MARC et donc
des bibliothèques, tandis que du niveau 0 au niveau 2 (qui n'est
pas encore développé) ont enrichi les possibilités
de recherche et d'affiche.
Pour une bibliothèque qui souhaiterait se doter grâce à
Z39.50 d'une passerelle entre ses diverses ressources, un serveur Bath
profile paramétré selon le domaine A, niveau 1 serait
particulièrement intéressant puisqu'il permettrait de traiter
tant des formats MARC (rien n'est perdu par rapport au profil bib-1 à
ce niveau [7]) que du format
XML.
ZNG : Z39.50 Next Generation
Tout ce qui précède concerne la norme telle qu'elle existe
actuellement. ZNG, en revanche, n'a pas encore d'existence réelle
en dehors des spécifications proposées par le ZIG lors de
sa réunion de juin 2001.[8]
ZNG vise à rendre compatible Z39.50 et les technologies web (XML
et HTTP). C'est-à-dire qu'il s'agit de faciliter et simplifier
l'implémentation de la norme tout en préservant ses acquis.
Dit d'une autre façon encore : ZNG permet, tout en conservant la
richesse de la norme, de sortir du cadre étroit des formats MARC
dans lesquels elle a été essentiellement exploitée
jusqu'à présent, pour travailler dans un espace " orienté
web ", où les formats bibliographiques cohabiteront avec XML.
Bref, c'est le grand toilettage.
Sans entrer dans trop de détails techniques, signalons les principaux
changements apportés par ZNG.
L'innovation principale proposée par ZNG consiste peut-être
à abandonner la notion de session : il n'y a plus de connexion
permanente mais une série de séquences requête/réponse
utilisant les commandes HTTP GET ou POST. Cependant, pour permettre la
continuité du travail de recherche, le serveur conserve en mémoire
l'ensemble résultat issu d'une requête ; il spécifie
aussi dans sa réponse le nom qu'il attribue à cet ensemble
d'une part, et d'autre part le temps pendant lequel il le conservera en
mémoire. Si une nouvelle requête est effectuée sur
l'ensemble résultat, le serveur défini une nouvelle durée
de sauvegarde, et il n'efface l'ensemble résultat que si celui
ci est inactif pendant le temps établi.
Conséquence de l'abandon de la notion de session au profit d'un
fonctionnement requête/réponse de type web, les services
Search et Present de Z39.50 sont supprimés et fusionnés
dans un unique service Search/Retrieve. La requête comprendra
principalement les informations suivantes :
- Identification et mot de passe ;
- La requête proprement dite, sous forme d'une chaîne de caractère utilisant des points d'accès définis, par exemple les points d'accès " title-word " et " title-phrase ", qui sont deux points d'accès distincts et non pas, comme dans le Z39.50 " classique ", une combinaison des attributs " title ", " word " et " phrase " ;
- Les données à envoyer en réponse : par exemple le client peut déclarer qu'il souhaite obtenir 10 enregistrements à partir de l'enregistrement numéro 5 d'un ensemble résultat ;
- Le schéma d'enregistrement (Record Schema) souhaité qui, précise le Z39.50 Implementors Group, comprendra au minimum Dublin Core et Onix pour les enregistrements de base de données.
La réponse envoyée par le serveur sera toujours en XML, éventuellement incluant un autre format pour les enregistrement (embedded database records) : par exemple, une notice UNIMARC encapsulée dans une réponse en XML.
Comme on le voit, ZNG, comme la nouvelle architecture d'attributs du Z39.50 classique ou le Bath Profile cherche à favoriser l'interopérabilité de la norme et à assurer son adaptation à l'environnement web dans lequel évoluent les systèmes d'information actuels.
- La norme est gérée par le Z39.50 Implementors Group (ZIG), dont l'activité est hébergée par la Bibliothèque du Congrès : cf. Z39.50 Maintenance Agency Cf. également National Information Standards Organisation : Z39.50 resource page
- Le "profil" correspond au paramètrage du serveur. Par analogie entre la norme Z39.50 et les normes bibliographiques, on pourrait dire que Z39.50 correspond au format MARC, et que les différents profils correspondent aux différents formats UNIMARC, USMARC, etc. La notion est détaillée plus loin.
- Cf. SCD Lyon 3. Profil du serveur Z39.50. Ou encore: SCD de l'Université de Reims. Profil Z39.50
- La Z39.50 Maintenance agency recense les record syntaxes retenus dans le cadre de la norme : cf. la liste à l'adresse http://lcweb.loc.gov/z3950/agency/defns/oids.html#5
- cf http://www.nlc-bnc.ca/bath/
- Cf Bibliothèque nationale du Canada. [The Bath profile] Appendix D: eXtensible Markup Language Document Type Definition for Dublin Core Simple.
- Si ce n'est le degré de précision de la recherche en MARC : mais l'exemple de la configuration du serveur de Lyon 3 laisse à penser que le profil bib-1 est trop riche et n'est que très partiellement utilisé.
- Pour ZNG, cf. Z39.50 Implementors Group. The ZNG Initiative