Kyoto Software Research, Inc. Kyoto Software Research, Inc.
HOME 会社案内 事業内容 技術情報 製品情報 採用情報 パートナ募集
簡易DB検索エンジン
WWW簡易データベースシステム
このシステムでは、手持ちのスプレッドシート、エディタで作成したデータリストのテキストファイルを、 WorldWide Web システムを介したデータベースとして利用できます。
  1. 検索の概要
  2. 1.1 文字検索
    1.2 条件式
    1.3 メタキャラクタ
    1.4 項目間の検索条件
  3. 検索結果の表示
  4. 2.1 リスト表示画面
    2.2 全文表示画面
  5. 検索ページのカスタマイズ
  6. 3.1 検索システムの構成
    3.2 項目指定と検索条件パラメータ
    3.3 テンプレートとマクロ

1.検索の概要
    この検索システムは、テキストファイルでサーバー上に保存されているデータベースファイル内の文字列を検索することで、 各種機能を実現しています。ここでは各データ共通の文字列検索機能の利用方法を説明します。
1.1 文字検索
    検索項目に対応したテキスト入力の項目に検索したい文字列を入力すると、 データベースファイルの該当する項目にその文字列が含まれているレコード を抽出します。

    この検索システムは、あくまでも文字列検索の機能のみを実現しています。日本語の語句を認識しません。 例えば「日新」を検索すると

      「毎日新聞」、「日新電機」、 「当日新規で…」

    などが全てマッチします。
1.2 条件式
    検索条件には簡単な論理演算が指定出来ます。
    指定可能な論理演算子は以下の三つです。

      演算子 意味
      ',' (半角カンマ) OR
      ' ' (半角空白) OR
      '&' (半角アンパサンド) AND

    あれ,これ」は「あれ」または「これ」を含む項目に一致します。
    同様に「あれ これ」は「あれ」または「これ」を含む項目に一致します。
    ただし演算子の前後、条件の先頭、末尾の半角空白は取り除かれます。

    一方「あれ&これ」は「あれ」かつ「これ」を含む項目に一致します。

    同一の項目に対して複数のテキスト入力から条件を指定することが出来ます。
    この場合にはそれぞれの項目の条件はすべて OR で結合されます。

    AND と OR の演算子が混在する場合には AND 条件が優先します。
    それぞれの演算子は左結合です。

      OR OR OR -> ((OR ) OR ) OR
      AND AND AND -> ((AND ) AND ) AND
      AND OR -> (AND ) OR
      OR AND OR -> (OR (AND )) OR
1.3 メタキャラクタ

    このシステムの検索機能は Perl のパターンマッチ機能を利用して実装しています。 条件中のにパターマッチのメタキャラクターが存在する場合には、事前に'\'でエスケープされます。 メタキャラクタとしての機能は抑制されます。

    つまり論理演算子以外の記号は単なる文字として扱われます。

1.4 項目間の検索条件

    検索実行ボタンを押すと検索が実施されます。

    まず各々の項目に対する検索条件がまとめられた後に、条件が設定されている項目ごとにのマッチングが調べられます。 項目間の条件は AND で結合されます。
    これに対し、同じ項目に対する検索条件は OR で結合されることに注意してください。

2.検索結果の表示

    検索した結果から各種の表示方法を選択出来ます。

2.1 リスト表示画面

    検索を実施すると、はじめに検索結果のリストが表示されます。
    リストは指定した件数分ずつに分割されて表示されます。
    検索結果が指定件数を越える場合には「前ページ」「次ページ」ボタン をつかってリストの続きを閲覧します。

    リスト中のリンクは、各項目の内容が表示される画面に結び付けられています。
    個別の内容を見たい場合にたどってください。

2.2 全文表示画面

    リスト表示画面で「全文表示」ボタンを押すと検索結果のリストにあげられている すべてのデータの内容をまとめて表示する画面に移行します。
    全文表示はリスト表示と同様に20件ごとにページに分けられます。
    「前20件」「次20件」ボタンで閲覧が可能です。

3.検索ページのカスタマイズ

    この検索システムでは、検索機能を実現するスクリプト群とは独立した形でHTML の画面を用意しています。
    HTML の FORM タグ内の項目指定や値を調整することで、検索システムの各種機能を利用することが出来ます。

    スクリプトファイルの変更をする事なく、検索機能、検索結果表示画面などをカスタマイズ出来ます。

3.1 検索システムの構成

    このシステムでは3つの要素で構成されています。

    1. 検索スクリプト
    2. データベースファイル
    3. HTML テンプレートファイル

3.1.1 検索スクリプト

    検索スクリプトは以下の3つです。

    • select12.cgi 条件検索スクリプト
    • 項目毎に与えられた検索条件をもとにデータベースファイルの検索を行います。 検索結果は、テンプレートファイルを使って内容を表示したり、データのID番号のリストにしてを返すことができます。

    • fetch11.cgi データ取得スクリプト
    • select12.cgi で返されたデータIDリストをもとに、データを取り出し、 テンプレートファイルにしたがって表示します。 ページ分割機能を実装するための機能をサポートします。

    • update11.cgi データ更新、登録スクリプト
    • 指定されたデータIDの内容を更新したり、新規追加することが出来ます。 データ省略可能の指定が可能です。 これらのスクリプトを必要に応じて使い分けます。

3.1.2 データベースファイル

    このシステムで使用するデータベースはテキストファイル形式で保存されています。
    テキストエディタなどを利用してデータを整理することも可能です。

    テキストファイルのフォーマットは以下の通りです。

    • 1行1レコード
    • データは全て文字列として扱う
    • 漢字コードは EUC
    • 改行文字は LF (0x0A)
    • レコード内の各項目は TAB (0x09) で区切る
    • データ中に LF, TAB を入れる場合は '\n', '\t' と記述する。
    • レコード内の先頭の項目をレコードキーとして扱うので、 この項目は恒にユニークな数値であること。
    • 先頭項目が空の場合は削除されたものとして扱う
    • 項目名は先頭から順番に 'F0', 'F1', 'F2',... とする。
      項目数に上限は設けない。

    WWW 上でデータの更新を行う場合には、ディレクトリ、ファイルが httpd から書込み可能である必要があります。

3.1.3 HTML テンプレートファイル

    selectXX.cgi, fetchXX.cgiのスクリプトの実行後に表示するページスタイルを指定するためのHTMLファイルです。 スクリプトの実行結果から、該当件数や検索結果を一覧表示したり、さらなる検索条件を指定したりすることができます。

    後述のように、FORM タグ中の INPUT アイテム名やその値をつかって、 検索スクリプトに検索条件と動作を指示します。

    また、テンプレートブロックに記述されたフォーマットにしたがって 検索結果のデータの内容が展開されます。

3.2 項目指定と検索条件パラメータ

    HTML ファイルから検索条件を指定するには FORM 中で以下の項目を設定します。

a) ACTION

    FORM タグの ACTION に必要なスクリプトを指定します。さらにスクリプト名の後にデータベースやテンプレートファイルがおかれている ディレクトリをURL パスで指定します。

    例:
    <FORM ACTION="/cgi-bin/select12.cgi/khdb/patent"
    検索スクリプトselect12.cgi を使用し、(URLでのルートディレクトリ)/khdb/patent をデフォルトディレクトリとする。
b)DBFILE

    FORM 中のアイテムでデータベースファイル名を指定します。

    例:
    <INPUT TYPE="hidden" NAME="DBFILE" VALUE="patentdb.txt" >

      patentdb.txt をデータベースファイルとして使用します。

c) TMPLHTML

    FORM 中のアイテムで検索結果を返すテンプレートファイルを指定します。

    例:
    <INPUT TYPE="hidden" NAME="TMPLHTML" VALUE="pat001.html">
d) FETCHNUM

    FORM 中のアイテムでページ分割する場合、1ページ辺りの表示項目数を 指定します。

例:
<INPUT TYPE="hidden" NAME="FETCHNUM" VALUE="20">
e) ID (select12.cgi では無効)

    FORM 中のアイテムで、取得したいデータの ID (レコードの先頭の項目の値)を指定します。

f) IDLIST (fetch11.cgi のみ有効)

    FORM 中のアイテムで、取得したいデータの ID のリストを指定します。

    例:
      <INPUT TYPE="hidden" NAME="IDLIST" VALUE="1,3,6,8">

g) Fn n は数字 (fetch11.cgi では無視)

    FORM 中のアイテムで、NAME で示される項目の検索条件または データの値を指定します。

    例:
    <INPUT TYPE="text" NAME="F3" VALUE="条件式or値">

    名前の前に # が付けられた項目は、データ登録時に値の省略が 可能であることを示します。名前の前に # の無い項目で値が空の 場合には、そのデータはデータベースファイルに登録されず警告 のメッセージが返されます。

    例:
    <INPUT TYPE="text" NAME="# F4" VALUE="">

3.3 テンプレートファイルとマクロ

    前述の DBFILE アイテムで指定されたファイル中には、 検索結果に置き換えられるためのマクロを記述出来ます。 テンプレートファイルにかかれるマクロは %%xxxx%%の形式で指定します。 (xxxxはマクロ名)
    検索スクリプトは、検索終了後にテンプレートファイル中のマクロを所定の値に置き換えて結果を出力します。
    テンプレートファイルは必ずしも HTML ファイルである必要はありません。

a) テンプレートブロック

    テンプレートブロックは、検索結果が複数存在する場合にそれぞれの レコードごとにマクロ展開される領域です。

    テンプレートブロックは、行頭から <!-- START_TMPLのみ書かれた行から END_TMPL -->とかかれた行で囲まれた領域です。

    例:
    <TABLE>
    テンプレートブロックの外
    <!-- START_TMPL
    テンプレートブロック内
    <TR><TH>%%F1%% </TH><TD>%%F2%% </TD><TR>
    -- END_TMPL -->
    </TABLE>
b) マクロ一覧

    マクロ名は大文字小文字を問いません。

    マクロ一覧
    %%DBFILE%% 検索したデータベースファイル名
    %%TMPLHTML%% 出力に使用したテンプレートファイル名
    %%CGIPATH%% CGIプログラムの URL
    %%CGIDIR%% CGIプログラムの URL のディレクトリ部まで
    %%CGINAME%% CGI プログラム名
    %%PATHINFO%% CGIプログラムに渡された PATH 情報 データベースファイルや、テンプレートファイルの所在を示す
    %%COUNT%% 検索結果のレコード総数
    %%QUERY%% 検索条件の表示文字列
    %%FETCHNUM%% 表示用に取り出し指示のあったデータ数
    %%IDLIST%% 検索結果の全てのデータの ID番号リスト
    %%NEXTID%% 次ページ表示の先頭データID
    %%PREVID%% 前ページ表示の先頭データID
    テンプレートブロック内でのみ有効なマクロ
    %%ID%% 現在出力中のデータの ID 番号
    %%SEREAL%% 検索結果のデータの通し番号(1から始まる)
    %%Fn%% 第 n 項目のデータ

    以 上