CLXXXV. YAZ 関数

導入

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

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

YAZ は、http://www.indexdata.dk/yaz/ で取得可能です。この拡張モジュールに 関する新しい情報、スクリプトの例等を http://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 をコンパイルしてください。

例 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 といった関連する情報については、次の場所にあります。 http://pecl.php.net/package/yaz

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

この PECL 拡張モジュール用の DLL は、PHP のダウンロード ページあるいは http://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 の設定により動作が変化します。

表 1. YAZ 設定オプション

名前デフォルト変更の可否変更履歴
yaz.max_links"100"PHP_INI_ALLPHP 4.3.0 以降で使用可能です。
yaz.log_fileNULLPHP_INI_ALLPHP 4.3.0 以降で使用可能です。
PHP_INI_* 定数の詳細および定義については 付録I を参照してください。

リソース型

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

定義済み定数

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

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

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

例 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], 1, 10);
        
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 リクエストが完了するまで待つ


東京デリヘル 池袋デリヘル 新宿デリヘル 渋谷デリヘル 品川デリヘル

鶯谷デリヘル 大塚デリヘル 立川デリヘル 町田デリヘル 横浜デリヘル 埼玉デリヘル

千葉デリヘル 大阪デリヘル 神戸デリヘル 京都デリヘル 名古屋デリヘル デリヘル

アダルトレンタルサーバー アダルトレンタルサーバー 表札 断熱塗料 UGUISU

大阪 老人ホーム 京都 老人ホーム 兵庫 老人ホーム 和歌山 老人ホーム 滋賀 老人ホーム

奈良 老人ホーム 東京 老人ホーム 神奈川 老人ホーム 千葉 老人ホーム 埼玉 老人ホーム 老人ホーム