Start · Sprachen · PHP · Referenz · yaz_scan_result

yaz_scan_result

Funktion

Gibt nach einem YAZ-Scan-Vorgang die gefundenen Terme und deren Trefferanzahlen aus dem Z39.50-Server zurück.

seit PHP 4.0.1 Kategorie: misc

Signatur

yaz_scan_result(resource $id, array &$result = null): array

Beschreibung

yaz_scan_result() liest die Ergebnisse eines zuvor mit yaz_scan() angestoßenen Scan-Vorgangs aus. Ein Z39.50-Scan ermöglicht das Durchsuchen eines Index-Bereichs eines Datenbankservers, um z. B. alphabetisch benachbarte Terme zu einem Suchbegriff zu ermitteln.

Die Funktion gibt ein zweidimensionales Array zurück, dessen Elemente jeweils einen gefundenen Term sowie dessen Häufigkeit (Anzahl der Treffer im Index) enthalten. Außerdem können über den optionalen Parameter $result zusätzliche Metadaten zum Scan-Ergebnis, wie die Gesamtzahl der Terme, abgerufen werden.

Typischer Einsatz ist die Implementierung einer Autovervollständigungs- oder Browse-Funktion für bibliografische Datenbanksysteme, die das Z39.50-Protokoll unterstützen, etwa in Bibliothekskatalogen oder Archivsystemen.

Wichtig: Die Funktion gehört zur PECL-Erweiterung yaz und setzt eine aktive, synchronisierte Verbindung voraus. Sie sollte erst nach dem Aufruf von yaz_wait() verwendet werden, da die Ergebnisse erst dann vollständig vorliegen.

Parameter

Name Typ Default Beschreibung
$id Pflicht resource Eine YAZ-Verbindungsressource, die zuvor mit yaz_connect() erzeugt wurde.
$result array null Optionaler Ausgabe-Parameter (per Referenz). Nach dem Aufruf enthält dieses Array zusätzliche Metadaten zum Scan-Ergebnis, z. B. den Schlüssel number (Anzahl der zurückgelieferten Terme) und stepSize.

Rückgabewert

Typ
array
Beschreibung
Gibt ein Array zurück, das die gefundenen Terme enthält. Jedes Element ist ein Array mit den Schlüsseln term (der gefundene Index-Term als String) und occurrences (Anzahl der Datensätze, in denen der Term vorkommt). Im Fehlerfall oder bei leerem Ergebnis wird ein leeres Array zurückgegeben.

Beispiele

Scan nach alphabetisch benachbarten Termen

<?php
// Verbindung zu einem Z39.50-Server herstellen
$id = yaz_connect('z3950.example.org/MYDB');

// Scan im Titel-Index ab dem Begriff "Goethe" starten
yaz_scan($id, 'rpn', '@attr 1=4 "Goethe"');

// Auf Ergebnis warten
yaz_wait();

// Fehler prüfen
$error = yaz_error($id);
if ($error) {
    echo "Fehler: " . $error;
} else {
    $result = [];
    $terms = yaz_scan_result($id, $result);

    echo "Gefundene Terme: " . $result['number'] . "\n";
    foreach ($terms as $entry) {
        echo $entry['term'] . ' (' . $entry['occurrences'] . ' Treffer)' . "\n";
    }
}
?>
Gefundene Terme: 10 Goethe (42 Treffer) Goethe, Johann Wolfgang von (130 Treffer) Goethe-Institut (15 Treffer) ...

Metadaten des Scan-Ergebnisses auswerten

<?php
$id = yaz_connect('z3950.example.org/MYDB');
yaz_scan($id, 'rpn', '@attr 1=1003 "Schiller"');
yaz_wait();

$meta = [];
$terms = yaz_scan_result($id, $meta);

if (!empty($meta)) {
    echo "Schrittgröße: " . ($meta['stepSize'] ?? 'n/a') . "\n";
    echo "Anzahl Terme: " . ($meta['number'] ?? 0) . "\n";
}

foreach ($terms as $t) {
    printf("%-40s %5d\n", $t['term'], $t['occurrences']);
}
?>
Schrittgröße: 1 Anzahl Terme: 7 Schiller 88 Schiller, Friedrich 210 ...

// Wichtig · Fallstricke

Veraltete Erweiterung: Die yaz-Erweiterung (PECL) wird aktiv kaum noch weiterentwickelt und ist in modernen PHP-Umgebungen selten verfügbar. Prüfe, ob sie mit extension_loaded('yaz') vorhanden ist.

Die Funktion liefert nur dann sinnvolle Ergebnisse, wenn zuvor yaz_wait() erfolgreich abgeschlossen wurde. Ein Aufruf ohne vorheriges Warten kann zu leeren oder inkonsistenten Daten führen.

Die Verfügbarkeit und Struktur der Metadaten im $result-Parameter hängt vom jeweiligen Z39.50-Server ab und ist nicht standardisiert.