Start · Sprachen · PHP · Referenz · yaz_search

yaz_search

Funktion

Bereitet eine Z39.50-Suche auf einer aktiven Verbindung vor, die beim nächsten Aufruf von <code>yaz_wait()</code> ausgeführt wird.

seit PHP 4.0.1 Kategorie: misc

Signatur

yaz_search(resource $id, string $type, string $query): bool

Beschreibung

yaz_search() ist Teil der PHP-YAZ-Erweiterung und dient der Kommunikation mit Z39.50-Servern, die typischerweise in Bibliothekssystemen und Informationsdatenbanken eingesetzt werden. Die Funktion registriert eine Suchanfrage für eine gegebene YAZ-Verbindung, führt sie jedoch nicht sofort aus — die tatsächliche Übermittlung an den Server erfolgt erst beim Aufruf von yaz_wait().

Der Parameter type legt die Abfragesprache fest. Unterstützt werden unter anderem rpn für RPN-Abfragen im PQF-Format (Prefix Query Format) sowie cql für CQL-Abfragen (Common Query Language). RPN/PQF ist das gebräuchlichste Format im Z39.50-Umfeld.

Diese nicht-blockierende Architektur ermöglicht es, mehrere YAZ-Verbindungen parallel zu verwalten und Suchanfragen an mehrere Server gleichzeitig abzusetzen, was für verteilte Bibliothekssysteme oder Metasuchen sehr nützlich ist.

Hinweis: Die YAZ-Erweiterung ist eine PECL-Erweiterung und muss separat installiert werden. Sie setzt die Installation der libyaz-Bibliothek voraus.

Parameter

Name Typ Default Beschreibung
$id Pflicht resource Eine YAZ-Verbindungsressource, die zuvor mit yaz_connect() erzeugt wurde.
$type Pflicht string Gibt die Abfragesprache an. Gebräuchliche Werte sind 'rpn' für RPN/PQF-Abfragen und 'cql' für CQL-Abfragen.
$query Pflicht string Die eigentliche Suchanfrage im gewählten Format, z. B. eine PQF-Zeichenkette wie @attr 1=4 "PHP" für eine Titelsuche.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Suche erfolgreich vorbereitet wurde, andernfalls false. Fehler können mit yaz_error() abgerufen werden.

Beispiele

Einfache Titelsuche mit RPN/PQF

<?php
// Verbindung zu einem Z39.50-Server herstellen
$conn = yaz_connect('z3950.loc.gov:7090/Voyager');

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// Syntax und Elemente konfigurieren
yaz_syntax($conn, 'usmarc');
yaz_element($conn, 'F');

// Titelsuche vorbereiten (Attribut 1=4 = Title)
$result = yaz_search($conn, 'rpn', '@attr 1=4 "PHP Programming"');

if (!$result) {
    die('Suche konnte nicht vorbereitet werden: ' . yaz_error($conn));
}

// Verbindungen abwarten und Abfragen ausführen
yaz_wait();

// Fehler prüfen
if (yaz_errno($conn) != 0) {
    echo 'Suchfehler: ' . yaz_error($conn);
} else {
    $hits = yaz_hits($conn);
    echo "Gefundene Treffer: $hits\n";
    // Ersten Treffer abrufen
    if ($hits > 0) {
        yaz_range($conn, 1, 1);
        yaz_wait();
        $record = yaz_record($conn, 1, 'string');
        echo $record;
    }
}
Gefundene Treffer: 42

Parallele Suche auf mehreren Z39.50-Servern

<?php
$servers = [
    'z3950.loc.gov:7090/Voyager',
    'bibsys.no:2100/BIBSYS',
];

$connections = [];
foreach ($servers as $server) {
    $conn = yaz_connect($server);
    if ($conn) {
        yaz_syntax($conn, 'usmarc');
        // CQL-Abfrage vorbereiten
        yaz_search($conn, 'rpn', '@attr 1=1003 "Knuth"');
        $connections[] = $conn;
    }
}

// Alle Verbindungen gleichzeitig abarbeiten
yaz_wait();

foreach ($connections as $conn) {
    if (yaz_errno($conn) == 0) {
        echo 'Treffer: ' . yaz_hits($conn) . "\n";
    } else {
        echo 'Fehler: ' . yaz_error($conn) . "\n";
    }
}
Treffer: 17 Treffer: 5

// Wichtig · Fallstricke

Deprecation-Hinweis: Die YAZ-PHP-Erweiterung wird nicht mehr aktiv gepflegt und ist für moderne PHP-Versionen (ab PHP 7+) möglicherweise nicht verfügbar oder muss manuell kompiliert werden. Für neue Projekte sollte eine alternative Bibliothek oder ein HTTP-basiertes SRU/SRW-Interface in Betracht gezogen werden.

Die Suche wird erst mit yaz_wait() tatsächlich an den Server übermittelt. Wird yaz_wait() nicht aufgerufen, findet keine Kommunikation statt und es werden keine Ergebnisse geliefert.

PQF-Attribute wie @attr 1=4 sind Z39.50-Bib-1-Attributsätze: 1=4 steht für Title, 1=1003 für Author, 1=7 für ISBN usw. Die genaue Unterstützung hängt vom jeweiligen Z39.50-Server ab.