Start · Sprachen · PHP · Referenz · yaz_record

yaz_record

Funktion

Gibt einen Datensatz aus einem YAZ-Suchergebnis an einer bestimmten Position zurück.

seit PHP 4.0.1 Kategorie: misc

Signatur

yaz_record(resource $id, int $pos, string $type): string

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

Typ
string
Beschreibung
Gibt den Datensatz als Zeichenkette im angeforderten Format zurück. Wenn an der angegebenen Position kein Datensatz vorhanden ist oder ein Fehler auftritt, wird eine leere Zeichenkette zurückgegeben.

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";
}
?>
Gefundene Datensätze: 12 --- Datensatz 1 --- ...(Datensatzinhalt)... --- Datensatz 2 --- ...(Datensatzinhalt)...

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";
    }
}
?>
Titel: PHP Programming Autor: Mustermann, Max

// 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.