Signatur
Beschreibung
yaz_record ist Teil der YAZ-Erweiterung für PHP, die das Z39.50-Protokoll zur Abfrage von Bibliotheks- und Informationsdatenbanken implementiert. Die Funktion ermöglicht es, nach einer erfolgreichen Suche mit yaz_search einzelne Datensätze aus dem Ergebnis-Set abzurufen.
Der Parameter pos gibt die Position des gewünschten Datensatzes im Ergebnis-Set an (beginnend bei 1). Mit dem Parameter type wird das Ausgabeformat gesteuert – typische Werte sind "string" für lesbare Textausgabe, "xml" für XML-formatierte Daten oder "raw" für rohe MARC-Daten.
Die Funktion ist sinnvoll in Kombination mit yaz_hits, um die Gesamtanzahl der Treffer zu ermitteln, und dann in einer Schleife, um jeden Datensatz einzeln abzurufen und zu verarbeiten. Typische Anwendungsfälle sind Bibliothekskataloge, Literaturdatenbanken und andere Z39.50-kompatible Informationssysteme.
Hinweis: Die YAZ-Erweiterung ist eine PECL-Erweiterung und muss separat installiert werden. Sie ist in Standard-PHP-Installationen nicht enthalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $id Pflicht | resource | Die YAZ-Verbindungsressource, die von yaz_connect zurückgegeben wurde. |
|
| $pos Pflicht | int | Die Position des Datensatzes im Ergebnis-Set. Die Zählung beginnt bei 1. Der Wert darf die Gesamtanzahl der Treffer (ermittelbar mit yaz_hits) nicht überschreiten. |
|
| $type Pflicht | string | Das gewünschte Ausgabeformat des Datensatzes. Mögliche Werte sind z. B. "string" (lesbare Textdarstellung), "xml" (XML-Format), "raw" (rohe Binärdaten, z. B. MARC), "syntax" (Datensatzsyntax als OID-String) oder "database" (Datenbankname des Datensatzes). |
Rückgabewert
Beispiele
Datensätze aus einer Z39.50-Suche abrufen
<?php
// Verbindung zu einem Z39.50-Server aufbauen
$id = yaz_connect('z3950.loc.gov:7090/Voyager');
if (!$id) {
die('Verbindung fehlgeschlagen');
}
// Suche nach einem Begriff
yaz_syntax($id, 'usmarc');
yaz_search($id, 'rpn', '@attr 1=4 "PHP Programming"');
// Anfragen ausführen
yaz_wait();
// Fehlerkontrolle
$error = yaz_error($id);
if (!empty($error)) {
die('Fehler: ' . $error);
}
// Anzahl der Treffer ermitteln
$hits = yaz_hits($id);
echo "Gefundene Datensätze: $hits\n";
// Die ersten 5 Datensätze ausgeben
$limit = min($hits, 5);
for ($pos = 1; $pos <= $limit; $pos++) {
$record = yaz_record($id, $pos, 'string');
echo "--- Datensatz $pos ---\n";
echo $record . "\n";
}
?>
Datensatz im XML-Format abrufen
<?php
// Annahme: Verbindung wurde bereits aufgebaut und Suche durchgeführt
// $id = yaz_connect(...);
// yaz_search(...);
// yaz_wait();
$hits = yaz_hits($id);
if ($hits > 0) {
// Ersten Datensatz als XML abrufen
$xmlRecord = yaz_record($id, 1, 'xml');
if (!empty($xmlRecord)) {
// XML parsen und verarbeiten
$xml = simplexml_load_string($xmlRecord);
if ($xml !== false) {
echo "Titel: " . $xml->title . "\n";
echo "Autor: " . $xml->author . "\n";
} else {
echo "XML-Parsing fehlgeschlagen.\n";
echo $xmlRecord;
}
} else {
echo "Kein Datensatz an Position 1 gefunden.\n";
}
}
?>
// Wichtig · Fallstricke
Verfügbarkeit: Die YAZ-Erweiterung ist eine PECL-Erweiterung (pecl install yaz) und erfordert die Installation der libyaz-Bibliothek auf dem System. Sie ist seit PHP 8.0 nicht mehr in der Standard-PECL-Kollektion gelistet und gilt als weitgehend veraltet.
Positionsfehler: Wenn pos außerhalb des gültigen Bereichs liegt (kleiner als 1 oder größer als die Trefferzahl), gibt die Funktion eine leere Zeichenkette zurück. Es wird daher empfohlen, immer zuerst yaz_hits aufzurufen und die Position zu validieren.
Zeichenkodierung: Abhängig vom Zielserver können Datensätze in unterschiedlichen Zeichenkodierungen (z. B. MARC-8, ISO-8859-1) vorliegen. Bei Bedarf muss eine manuelle Konvertierung mit iconv oder mb_convert_encoding vorgenommen werden.