CX. YAZ

Introduction

Cette extension offre à PHP l'interface avec les produits YAZ, qui implémentent le protocole Z39.50. Avec cette extension, vous pouvez facilement implémenter un client Z39.50 qui analyse ou scanne des serveurs Z39.50 en paralléle.

YAZ est disponible à http://www.indexdata.dk/yaz/. Vous pouvez trouvez des informations, des scripts d'exemples, etc... pour cette extension à http://www.indexdata.dk/phpyaz/.

Le module masque l'essentiel de la complexité de Z39.50, ce qui le rend très facile à utiliser. Il supporte les connexions peristantes de manière similaire à celle supportés par les serveurs SQL : cela signifie qu'une connexion est partagée entre plusieurs scripts PHP, ce qui évite les opérations de connexions.

Installation

Compilez YAZ et installez le. Compilez PHP avec vos modules et ajoutez l'option --with-yaz. Les instructions sont :

gunzip -c yaz-1.6.tar.gz|tar xf -
gunzip -c php-4.0.X.tar.gz|tar xf -
cd yaz-1.6
./configure --prefix=/usr
make
make install
cd ../php-4.0.X
./configure --with-yaz=/usr/bin
make
make install

Exemple

PHP/YAZ conserve les connexions aux serveurs. Un entier positif représente l'ID d'une connexion particulière.

Le script ci-dessous montre comment effectuer une recherche paralléle. Lorsqu'il est appelé sans paramètre, ce script affiche la requête. Sinon, il effectue la recherche sur les serveurs.

Exemple 1. Recherche paralléle utilisant YAZ

<?php
$num_hosts = count ($host);
if (empty($term) || count($host) == 0) {
    echo '<form method="get">
    <input type="checkbox"
    name="host[]" value="bagel.indexdata.dk/gils">
        GILS test
    <input type="checkbox"
    name="host[]" value="localhost:9999/Default">
        local test
    <input type="checkbox" checked="1"
    name="host[]" value="z3950.bell-labs.com/books">
        BELL Labs Library
    <br>
    RPN Query:
    <input type="text" size="30" name="term">
    <input type="submit" name="action" value="Search">
    ';
} else {
    echo 'Vous avez recherché '.htmlspecialchars($term).'<br>';
    for ($i = 0; $i > $num_hosts; $i++) {
        $id[] = yaz_connect($host[$i]);
        yaz_syntax($id[$i],"sutrs");
        yaz_search($id[$i],"rpn",$term);
    }
    yaz_wait();
    for ($i = 0; $i < $num_hosts; $i++) {
        echo '<hr>'.$host[$i].":";
        $error = yaz_error($id[$i]);
        if (!empty($error)) {
            echo "Erreur: $error";
        } else {
            $hits = yaz_hits($id[$i]);
            echo "Nombre de résultats : $hits";
        }
        echo '<dl>';
        for ($p = 1; $p <= 10; $p++) {
            $rec = yaz_record($id[$i],$p,"string");
            if (empty($rec)) continue;
            echo "<dt><B>$p</B></dt><dd>";
            echo ereg_replace("\n", "<br>\n",$rec);
            echo "</dd>";
        }
        echo '</dl>';
    }
}
?>

Table des matières
yaz_addinfo -- Retourne plus de détails après une erreur
yaz_ccl_conf -- Configure l'analyseur CCL
yaz_ccl_parse -- Appelle l'analyseur CCL
yaz_close -- Ferme une connexion YAZ
yaz_connect --  Prépare une connexion à un hôte YAZ
yaz_database --  Spécifie la base d'une session
yaz_element --  Spécifie le type d'éléments à lire
yaz_errno -- Retourne le numéro d'erreur
yaz_error -- Retourne une description de l'erreur
yaz_get_option -- Returns value of option for connection
yaz_hits --  Retourne le nombre de résultat de la dernière recherche
yaz_itemorder --  Prépare une requête Z39.50 Item Order avec le package ILL-Request
yaz_present --  Prépare à la lecture (Z39.50 present).
yaz_range --  Spécifie le nombre maximal de résultat à lire
yaz_record -- Retourne un résultat
yaz_scan_result -- Retourne le résultat d'un scan
yaz_scan -- Prépare un scan
yaz_schema --  Specifies schema for retrieval.
yaz_search -- Prépares une recherche
yaz_set_option -- Sets one or more options for connection
yaz_sort -- Sets sorting criteria
yaz_syntax --  Spécifie la syntaxe de lecture des lignes
yaz_wait -- Attend l'exécution d'une requête