Signatur
Beschreibung
yaz_scan() initiiert einen Scan-Request auf einem Z39.50-Server. Der Scan-Vorgang ermöglicht es, einen Index (z. B. Titel-, Autor- oder Schlagwortindex) eines bibliografischen Servers schrittweise zu durchsuchen und die vorhandenen Indexterme aufzulisten, die einem bestimmten Startterm entsprechen oder darauf folgen.
Der Request wird nicht sofort ausgeführt, sondern erst, wenn yaz_wait() aufgerufen wird. Nach dem Abschluss können die Ergebnisse mit yaz_scan_result() abgerufen werden. Diese asynchrone Arbeitsweise erlaubt es, mehrere Verbindungen gleichzeitig zu bedienen.
Der Parameter type gibt den Typ des Abfrageausdrucks an. Derzeit wird hauptsächlich 'rpn' (Reverse Polish Notation, d. h. PQF-Format) unterstützt. Der startterm bestimmt, ab welchem Begriff der Scan beginnen soll. Über das optionale flags-Array lassen sich weitere Scan-Optionen wie number (Anzahl der gewünschten Terme), position und stepSize steuern.
Hinweis: Die YAZ-Extension ist eine PECL-Erweiterung für die Kommunikation mit Z39.50-Servern, wie sie in Bibliothekssystemen (OPAC) eingesetzt werden. Sie ist nicht standardmäßig in PHP enthalten und muss separat installiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $id Pflicht | resource | Die Verbindungsressource, die von yaz_connect() zurückgegeben wurde. |
|
| $type Pflicht | string | Der Typ des Abfrageausdrucks. Derzeit wird 'rpn' (PQF-Format) unterstützt. |
|
| $startterm Pflicht | string | Der Startterm des Scans. Im PQF-Format wird der Attributsatz und der eigentliche Suchterm angegeben, z. B. @attr 1=4 Goethe. |
|
| $flags | array | [] | Optionales Array mit Scan-Optionen. Mögliche Schlüssel sind: number (Anzahl der zurückzugebenden Terme, Standard: 10), position (Position des Startterminus im Ergebnis, Standard: 1) und stepSize (Schrittweite zwischen den Termen, Standard: 0). |
Rückgabewert
yaz_wait() tatsächlich ausgeführt.Beispiele
Titelindex eines Z39.50-Servers scannen
<?php
// Verbindung zu einem Z39.50-Server herstellen
$id = yaz_connect('z3950.loc.gov:7090/Voyager');
if (!$id) {
die('Verbindung fehlgeschlagen');
}
// Scan im Titelindex (Attribut 1=4 = Title) ab dem Term "PHP"
yaz_scan($id, 'rpn', '@attr 1=4 PHP', [
'number' => 20, // 20 Terme zurückgeben
'position' => 1, // Startterm an Position 1
]);
// Request ausführen
yaz_wait();
// Fehler prüfen
$error = yaz_error($id);
if ($error) {
echo 'Fehler: ' . $error;
} else {
// Scan-Ergebnisse abrufen
$result = yaz_scan_result($id, $info);
echo 'Gefundene Terme: ' . $info['number'] . PHP_EOL;
foreach ($result as $term) {
echo $term[1] . ' (' . $term[0] . ' Treffer)' . PHP_EOL;
}
}
Scan mit Schrittweite für entfernten Index
<?php
$id = yaz_connect('opac.example-library.org:210/INNOPAC');
yaz_syntax($id, 'usmarc');
// Autorindex scannen, jede zweite Position überspringen
yaz_scan($id, 'rpn', '@attr 1=1003 Müller', [
'number' => 10,
'position' => 5,
'stepSize' => 2,
]);
yaz_wait();
if (!yaz_error($id)) {
$terms = yaz_scan_result($id, $meta);
echo 'Scan-Status: ' . $meta['scanStatus'] . PHP_EOL;
foreach ($terms as [$count, $term]) {
printf("%-40s %d Treffer\n", $term, $count);
}
}
// Wichtig · Fallstricke
Veraltete Erweiterung: Die YAZ-PHP-Extension wird kaum noch aktiv weiterentwickelt und ist in modernen PHP-Umgebungen (PHP 8+) möglicherweise nicht verfügbar oder nicht offiziell unterstützt. Für neue Projekte sollte geprüft werden, ob eine alternative Z39.50-Bibliothek (z. B. über eine externe PHP-Bibliothek oder einen Proxy-Dienst) geeigneter ist.
Die Funktion gibt keinen Rückgabewert zurück und wirft keine Ausnahmen. Fehler müssen nach yaz_wait() explizit mit yaz_error() abgefragt werden.
Die YAZ-Extension muss als PECL-Paket installiert sein (pecl install yaz), und die C-Bibliothek libyaz muss auf dem System vorhanden sein.