Start · Sprachen · PHP · Referenz · yaz_ccl_parse

yaz_ccl_parse

Funktion

Ruft den CCL-Parser auf und verarbeitet eine CCL-Abfrage zu einer RPN-Struktur für Z39.50-Suchanfragen.

seit PHP 4.0.1 Kategorie: misc

Signatur

yaz_ccl_parse(resource $id, string $query, array &$result): bool

Beschreibung

yaz_ccl_parse analysiert eine Abfrage in der Common Command Language (CCL) und wandelt sie in eine interne RPN-Struktur (Reverse Polish Notation) um, die anschließend für Z39.50-Suchanfragen verwendet werden kann. Die Funktion arbeitet zusammen mit yaz_ccl_conf, das zuvor die Qualifikator-Konfiguration für den Parser festlegen muss.

CCL ist eine standardisierte Abfragesprache, die es Endanwendern ermöglicht, bibliografische Datenbanken mit einer einfachen Syntax zu durchsuchen. Typische Ausdrücke sind z. B. ti=PHP AND au=Doe. Die geparste Struktur wird im Parameter $result als assoziatives Array zurückgegeben.

Im Erfolgsfall enthält $result den Schlüssel rpn mit der geparsten RPN-Struktur. Im Fehlerfall enthält $result die Schlüssel errorcode, errorstring und errorpos, die detaillierte Informationen über den aufgetretenen Fehler liefern.

Diese Funktion ist nur verfügbar, wenn PHP mit der YAZ-Extension kompiliert wurde, die den Zugriff auf Z39.50-Informationsserver ermöglicht – typischerweise in Bibliotheks- und Informationssystemen eingesetzt.

Parameter

Name Typ Default Beschreibung
$id Pflicht resource Die YAZ-Verbindungsressource, die von yaz_connect zurückgegeben wurde und die aktive Z39.50-Verbindung repräsentiert.
$query Pflicht string Die CCL-Abfragezeichenkette, die geparst werden soll, z. B. "ti=PHP AND au=Doe".
$result Pflicht array Wird als Referenz übergeben. Nach dem Aufruf enthält dieses Array entweder den Schlüssel rpn (bei Erfolg) oder die Schlüssel errorcode, errorstring und errorpos (bei einem Fehler).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die CCL-Abfrage erfolgreich geparst wurde, andernfalls false. Bei false enthält das $result-Array Fehlerinformationen.

Beispiele

Einfache CCL-Abfrage parsen und für Z39.50 verwenden

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

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

// CCL-Qualifikatoren konfigurieren
$conf = [
    'ti' => '1=4',  // Titelsuche
    'au' => '1=1',  // Autorensuche
];
yaz_ccl_conf($id, $conf);

// CCL-Abfrage parsen
$result = [];
if (yaz_ccl_parse($id, 'ti=PHP AND au=Doe', $result)) {
    echo 'Abfrage erfolgreich geparst.' . PHP_EOL;
    // RPN-Struktur für die Suche verwenden
    $rpn = $result['rpn'];
    yaz_search($id, 'rpn', $rpn);
    yaz_wait();
    $error = yaz_error($id);
    if (!$error) {
        $hits = yaz_hits($id);
        echo 'Treffer: ' . $hits . PHP_EOL;
    }
} else {
    echo 'Fehler beim Parsen: ' . $result['errorstring'] . PHP_EOL;
    echo 'Position: ' . $result['errorpos'] . PHP_EOL;
    echo 'Fehlercode: ' . $result['errorcode'] . PHP_EOL;
}

yaz_close($id);
?>
Abfrage erfolgreich geparst. Treffer: 42

Fehlerbehandlung bei ungültiger CCL-Abfrage

<?php
$id = yaz_connect('z3950.example.com/MYDB');

$conf = ['ti' => '1=4'];
yaz_ccl_conf($id, $conf);

$result = [];
// Ungültige Abfrage (unbekannter Qualifikator)
if (yaz_ccl_parse($id, 'unbekannt=PHP', $result)) {
    echo 'Geparst: OK';
} else {
    echo 'Fehler: '   . $result['errorstring'] . PHP_EOL;
    echo 'Code: '     . $result['errorcode']   . PHP_EOL;
    echo 'Position: ' . $result['errorpos']    . PHP_EOL;
}

yaz_close($id);
?>
Fehler: Qualifikator nicht gefunden Code: 114 Position: 0

// Wichtig · Fallstricke

Deprecation-Hinweis: Die YAZ-Extension und alle zugehörigen Funktionen (inklusive yaz_ccl_parse) sind seit PHP 7.0 nicht mehr in der offiziellen PHP-Distribution enthalten und gelten als veraltet. Für neue Projekte sollten alternative Z39.50-Bibliotheken oder moderne Suchschnittstellen verwendet werden.

Wichtig: Vor dem Aufruf von yaz_ccl_parse muss yaz_ccl_conf aufgerufen werden, um die Zuordnung zwischen CCL-Qualifikatoren und Bib-1-Attributen zu definieren. Ohne diese Konfiguration schlägt das Parsen aller Abfragen mit unbekannten Qualifikatoren fehl.

Die Extension erfordert die Installation der externen YAZ-Bibliothek (Index Data). Sie ist speziell für bibliografische Anwendungen konzipiert und in allgemeinen Webprojekten kaum relevant.