# QDBM付属CGIスクリプト仕様書

Copyright (C) 2000-2003 Mikio Hirabayashi
Last Update: Thu, 20 Nov 2003 22:44:08 +0900
[English] [Home]

## 目次

1. 概要
2. ビルド
3. データベース管理用CGI
4. 全文検索用CGI
5. Webサーバの設定

## 概要

ユーティリティもしくはアプリケーションのサンプルとして、QDBMのパッケージには二つのCGIスクリプトが付属する。第一はDepotとCuriaとVillaのデータベースファイルを管理するものである。第二はOdeumのデータベースを用いて全文検索を行うものである。

## ビルド

Webサーバ上でCGIが利用でき、QDBMが `/usr/local' 以下にインストールされていることが必要である。

インストール作業は、サブディレクトリ `cgi' をカレントディレクトリにして行う。

    cd cgi

ビルド環境を設定する。

    ./configure

プログラムをビルドする。

    make

一連の作業が終ると、`qadm.cgi' および `fts.cgi' が生成されているはずである。

以下の各セクションの指示に従って、利用するCGIスクリプトとその設定ファイルをWWWに公開されたディレクトリにコピーする。

## データベース管理用CGI

`qadm.cgi' は、DepotとCuriaとVillaのデータベースを管理するためのCGIスクリプトである。これを使うと、WWWを介してデータベースの管理を行うことができる。レコードのキーと値は文字列であるものとする。Villaの比較関数は辞書順である。利用できる操作は、データベースの一覧、データベースの作成、データベースの削除、データベースのダウンロード、レコードの一覧、レコードの追加、およびレコードの削除である。

`qadm.cgi' のインストールは次の手順に従う。CGIが利用できるディレクトリに `qdbm.cgi' と `qadm.conf' をコピーする。また、同じディレクトリの直下に `qadmdb' という名前のディレクトリを作成する。例えば、CGIを置くディレクトリが /home/mikio/public_html の場合、以下のようにする。

    cp qadm.cgi qadm.conf /home/mikio/public_html
    mkdir /home/mikio/public_html/qadmdb

`qadmdb' ディレクトリは `qadm.cgi' のプロセスが読み書きおよび実行できるパーミッションである必要がある。最も簡単には、以下のようにする。他にも、CGIスクリプトにsetuidビットを立てたり、いわゆるsuExecのような機能を用いる方法もある。

    chmod 1777 /home/mikio/public_html/qadmdb

`qadm.conf' は設定ファイルである。デフォルトでは以下のような内容を持つが、ユーザが任意に修正することができる。

    encoding: UTF-8
    lang: en
    title: Administration CGI of QDBM
    dbdir: qadmdb
    keychop: true
    valchop: false

`encoding' はCGIスクリプトによって表示されるページおよびデータベースファイル内のレコードの文字コードを指定する。`lang' は表示されるページの言語を指定する。`title' は表示されるページのタイトルを指定する。`dbdir' はデータベースファイルが格納されるディレクトリのパスを指定する。`keychop' と `valchop' は、レコードのキーと値の内容を正規化するか否かを指定する。`true' の場合は、末尾の空白を取り除き、かつ改行コードが内容に含まれないようにする。

設置された `qadm.cgi' のURLにWebブラウザを用いてアクセスする。あとは、表示された案内にしたがってデータベースの管理を行えばよい。

自動化されたエージェントがデータベースに登録されたレコードを検索するために、URLで直接レコードを指定し、その値の内容そのものをプレーンテキストとして取得する機構もある。例えばCGIスクリプトのURLが `http://a.b.c/qadm.cgi' であり、`staff' という名前のデータベースに格納された `mikio' というキーのレコードの値を取り出すには、エージェントは `http://a.b.c/qadm.cgi/staff/mikio' を参照すればよい。すなわち、CGIスクリプトのURLの後ろに、`/' で区切ってデータベース名（接尾辞は不要）とキーを指定すればよい。

既存のデータベースファイルを管理対象にしたい場合は、`qadmdb' ディレクトリの中にそれを置けばよい。ただし、Depotによるデータベースファイルの名前には接尾辞として `.dp' をつけ、Curiaによるデータベースディレクトリの名前には接尾辞として `.cr' をつけ、Villaによるデータベースファイルの名前には接尾辞として `.vl' をつける必要がある。例えば `foo.dp'、`bar.cr'、`baz.vl' などとする。また、各データベースファイルまたはディレクトリはCGIスクリプトのプロセスによって読み書き可能である必要がある。

## 全文検索用CGI

`qfts.cgi' は、Odeumのデータベースを用いて全文検索を行うCGIスクリプトである。これを使うと、Webサイトの全文検索を行うことができる。インデックスの作成はコマンド `odidx' を用いて行い、`qfts.cgi' によってそのデータベースの検索を行う。検索方式には、指定した語を全て含む文書を検索する「AND検索」と、指定した語の少なくとも一つを含む「OR検索」がある。検索結果はスコアに応じて並べられる。

`qfts.cgi' のインストールは次の手順に従う。CGIが利用できるディレクトリに `qfts.cgi' と `qfts.conf' をコピーする。また、同じディレクトリの直下に `casket' という名前のインデックスを作成する。例えば、CGIを置くディレクトリが /home/mikio/public_html の場合、以下のようにする。

    cp qfts.cgi qfts.conf /home/mikio/public_html
    cd /home/mikio/public_html
    odidx register casket

`qfts.conf' は設定ファイルである。デフォルトでは以下のような内容を持つが、ユーザが任意に修正することができる。

    encoding: ISO-8859-1
    lang: en
    title: Full-text Search CGI with QDBM
    index: casket
    prefix: ./
    diridx: index.html
    help: <p>This is a sample application of the inverted API of QDBM.</p>

`encoding' はCGIスクリプトによって表示されるページおよびデータベースファイル内のレコードの文字コードを指定する。`lang' は表示されるページの言語を指定する。`title' は表示されるページのタイトルを指定する。`index' はインデックスのパスを指定する。`prefix' は各文書のURIにつける接頭辞を指定する。例えば `prefix' に `http://x.y.z/foo/' を指定すると、`./bar/baz.html' や `bar/baz.html' は `http://x.y.z/foo/bar/baz.html' として表示される。`diridx' はディレクトリの代表ファイルの名前を指定する。例えば `diridx' に `index.html' を指定すると、`./foo/index.html' は `./foo/' として表示される。`help' は最初のページで表示されるヘルプメッセージを指定する。

設置された `qfts.cgi' のURLにWebブラウザを用いてアクセスする。あとは、表示された案内にしたがって全文検索を行えばよい。

インデックスを生成するコマンド `odidx' の詳細についてはQDBMの基本仕様書を参照すること。

## Webサーバの設定

CGIスクリプトを利用するには、WWWサーバの設定でCGIの実行を許可する必要がある。通常のコンテンツと同じ場所にCGIスクリプトを設置する場合、Apacheの設定ファイルには以下のように記述する。

    Options ExecCGI
    AddHandler cgi-script .cgi

あるいはCGIスクリプト専用のディレクトリを設ける場合、Apacheの設定ファイルには以下のように記述する。

    ScriptAlias /~mikio/cgi-bin/ "/home/mikio/public_html/cgi-bin"

WWWサーバのライブラリ検索パスに `/usr/local/lib' が含まれていない場合、それを明示的に指定する必要があるかもしれない。Apacheの設定ファイルには以下のように記述する。

    SetEnv LD_LIBRARY_PATH "/lib:/usr/lib:/usr/local/lib"