Forum und email

YAZ 関数

導入

この拡張モジュールは、情報取得用の Z39.50 プロトコルを実装する YAZ ツールキットへの PHP インターフェースを 提供するものです。この拡張モジュールにより、Z39.50 ターゲット(サーバ) を並列に検索またはスキャンする Z39.50 オリジン(クライアント)を 容易に実装することが可能になります。

このモジュールは Z39.50 の複雑さを隠蔽するため、使用法がかなり容易に なります。PHP で利用可能な様々な RDB の API により提供されているものに 非常によく似た、ステートレスな持続的接続がサポートされています。 これは、セッションはステートレスですが、ユーザ間で共有されるということを 意味します。これにより多くの場合に接続および初期化手順が保存されます。

YAZ は、» https://www.indexdata.dk/yaz/ で取得可能です。この拡張モジュールに 関する新しい情報、スクリプトの例等を » https://www.indexdata.dk/phpyaz/ にて 参照可能です。

注意: この拡張モジュールは » PECL レポジトリに移動 されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 5.0.0.

インストール手順

YAZ (ANSI/NISO Z39.50 サポート) を取得し、インストールしてください。 » YAZ archive から、ソース形式あるいは さまざまな形式のビルド済みパッケージで YAZ が取得可能です。 Debian GNU/Linux、Suse Linux、FreeBSD のようなシステムでは、 ディストリビューションの一部として YAZ が組み込まれています。

PHP 4 シリーズでは、YAZ 拡張モジュールがバンドルされています(しかし、 YAZ 自体はバンドルされていません)。 オプション --with-yaz[=DIR] を 指定し、他の任意のモジュールとあわせて PHP をコンパイルしてください。

Example#1 Unix 上の PHP 4 での YAZ のコンパイル

gunzip -c php-4.4.X.tar.gz|tar xf -
gunzip -c yaz-2.1.8.tar.gz|tar xf -
cd yaz-2.1.8
./configure --prefix=/usr
make
sudo make install
cd ../php-4.4.X.
./configure --with-yaz=/usr/bin
make
sudo make install

PHP 5 では YAZ 拡張モジュールは » PECL にあり、共有オブジェクト/dll としてインストールされます。 もし pear がインストールされている場合、YAZ 拡張モジュールを ダウンロードして設定・インストールをする最も簡単な方法は pecl コマンドを使用することです。

Linux 上での YAZ のインストール

この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 » https://pecl.php.net/package/yaz

Windows システム上でのインストール

この PECL 拡張モジュール用の DLL は、» PHP のダウンロード ページあるいは » https://pecl4win.php.net/ からダウンロードできます。 php_yaz.dllyaz.dll に依存しています。 yaz.dll は、PHP サイトにある Win32 zip アーカイブに 含まれています。また、» YAZ WIN32 area にある Windows 版の YAZ の中にも含まれています。

警告

PHP 5.0.5 の Win32 zip アーカイブに含まれている yaz.dll はバージョンが古すぎます (バージョン 1.9.1 < 要求されるバージョン 2.0.13)。 そのため、» YAZ WIN32 インストール から得られる新しいバージョンの yaz.dll を使用してください。

Windows では、システムが yaz.dll ファイルを 見つけられるよう、PHP のディレクトリを PATH に追加することを 忘れないでください。

YAZ を共有モジュールとして使用する場合、Unix では php.ini の以下の行を 追加(あるいはコメント解除)してください。

   extension=yaz.so
  
また、Windows では以下の行になります。
   extension=php_yaz.dll
  

警告

IMAPrecodeYAZ および Cyrus 拡張モジュールは、組み合わせて使用することはできません。 これは、これらすべてが同一の内部シンボルを使用しているためです。

注意: 上で挙げた問題については、YAZ のバージョン 2.0 で解消されています。

実行時設定

php.ini の設定により動作が変化します。

YAZ 設定オプション
名前 デフォルト 変更の可否 変更履歴
yaz.max_links "100" PHP_INI_ALL PHP 4.3.0 以降で使用可能です。PHP 5.0.0 で削除されました。
yaz.log_file NULL PHP_INI_ALL PHP 4.3.0 以降で使用可能です。PHP 5.0.0 で削除されました。
PHP_INI_* 定数の詳細および定義については php.ini ディレクティブ を参照してください。

リソース型

リソース型は定義されていません。

定義済み定数

定数は定義されていません。

PHP/YAZ はターゲット(Z-Associations)との接続を保持し続けます。 正の整数で特定の接続のIDを表します。

以下のスクリプトは、API の並列検索機能のデモです。引数を指定せずに コールした場合、この関数はクエリフォームを出力します。そうでない場合 (引数を指定した場合)は、配列 host にあるターゲットを 検索します。

Example#2 YAZ による並列検索

<?php
$host
=$_REQUEST[host];
$query=$_REQUEST[query];
$num_hosts count($host);
if (empty(
$query) || count($host) == 0) {
    echo 
'<form method="get">
    <input type="checkbox"
    name="host[]" value="bagel.indexdata.dk/gils" />
        GILS test
    <input type="checkbox"
    name="host[]" value="localhost:9999/Default" />
        local test
    <input type="checkbox" checked="checked"
    name="host[]" value="z3950.loc.gov:7090/voyager" />
        Library of Congress
    <br />
    RPN Query:
    <input type="text" size="30" name="query" />
    <input type="submit" name="action" value="Search" />
    </form>
    '
;        
} else {
    echo 
'You searched for ' htmlspecialchars($query) . '<br />';
    for (
$i 0$i $num_hosts$i++) {
        
$id[] = yaz_connect($host[$i]);
        
yaz_syntax($id[$i], "usmarc");
        
yaz_range($id[$i], 110);
        
yaz_search($id[$i], "rpn"$query);
    }
    
yaz_wait();
    for (
$i 0$i $num_hosts$i++) {
        echo 
'<hr />' $host[$i] . ':';
        
$error yaz_error($id[$i]);
        if (!empty(
$error)) {
            echo 
"Error: $error";
        } else {
            
$hits yaz_hits($id[$i]);
            echo 
"Result Count $hits";
        }
        echo 
'<dl>';
        for (
$p 1$p <= 10$p++) {
            
$rec yaz_record($id[$i], $p"string");
            if (empty(
$rec)) continue;
            echo 
"<dt><b>$p</b></dt><dd>";
            echo 
nl2br($rec);
            echo 
"</dd>";
        }
        echo 
'</dl>';
    }
}
?>

目次

  • yaz_addinfo — 詳細なエラー情報を返す
  • yaz_ccl_conf — CCL パーサを設定する
  • yaz_ccl_parse — CCL パーサを起動する
  • yaz_close — YAZ 接続をクローズする
  • yaz_connect — Z39.50 サーバへの接続を準備する
  • yaz_database — セッション内のデータベースを指定する
  • yaz_element — 取得時の要素集合の名前を指定する
  • yaz_errno — エラー番号を返す
  • yaz_error — エラーの内容を返す
  • yaz_es_result — 拡張サービスの結果を調査する
  • yaz_es — 拡張サービスのリクエストを準備する
  • yaz_get_option — 接続に関するオプションの値を返す
  • yaz_hits — 直近の検索に関するヒット数を返す
  • yaz_itemorder — ILLリクエストパッケージを関してZ39.50 Item Orderを準備する
  • yaz_present — (Z39.50による)取得の準備を行う
  • yaz_range — 取得するレコードの範囲を指定する
  • yaz_record — レコードを返す
  • yaz_scan_result — スキャンリクエストの結果を返す
  • yaz_scan — スキャンの準備をする
  • yaz_schema — 取得するスキーマを指定する
  • yaz_search — 検索を準備する
  • yaz_set_option — 接続に関するひとつあるいは複数のオプションを設定する
  • yaz_sort — ソート条件を設定する
  • yaz_syntax — 取得用に適当なレコード構文を指定する
  • yaz_wait — Z39.50 リクエストが完了するまで待つ