Signatur
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
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);
?>
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);
?>
// 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.