知識情報演習I レポート課題 201811528 春名航亨(水曜組)

はじめに

このページは,知識情報・図書館学類春ABモジュール開設「知識情報演習Ⅰ」の課題「OPACの構築」についてのレポートです.

内容

1. 構築したOPACのURL

構築したOPACシステム「Simple OPAC」のindexページは,
https://cgi.u.tsukuba.ac.jp/~s1811528/opac/index.htmlです.

以下は,opacディレクトリ以下の階層構造と,各ファイルの説明をまとめた図です.


W:\wwws\cgi-bin\opac>tree /F
フォルダー パスの一覧:  ボリューム vol_home01
ボリューム シリアル番号は 000000FB 8082:1532 です
W:.
│  .htaccess...ユーザのサーバ設定ファイル
│  report.html...レポートページ
│  index.html...トップページ
│  sitemap.xml...サイトの構造文書
│  yet_list.html...未実装/実装したい機能のメモ

├─.git

│(省略)

├─data
│      bib_sche.sql...opac.dbスキーマ
│      kakou.rb...jbisc.txtをcsvに成形するプログラム
│      isbn.txt...isbn(10桁)を抽出したもの
│      jbisc.txt...書誌情報の元データ
│      kd.csv...DBにimportできる形式にしたもの
│      opac.db...書誌データベース

├─css
│      index.css...index.htmlのCSS
│      search.css...search.cgi
│      accurate.css...accurate.cgi
│      yet_list.css...yet_list.html
│      report.css...report.html

├─img
│      amazon.png...Amazonバナー
│      cinii.png...CiNiiバナー
│      google.png...Google Booksバナー
│      icon.png...ページicon
│      ndl.png...NDL Searchバナー
│      notfound.png...書誌画像がnullの時表示される画像
│      rakuten.png...Rakuten Booksバナー
│      requirement.png...要件のスクリーンショット
│      sei.png...ページicon
│      tulips.png...Tulips Searchバナー

├─cgi
│      accurate.cgi...書誌の詳細表示ページ
│      search.cgi...検索結果一覧ページ
│      def.rb...上記2つのcgi内で用いる関数を集めたもの

└─md
        yet_list.md...yet_list.htmlの雛型
        report.md...report.htmlの雛型
▲図1, OPACシステムの階層構造

2. CGIプログラムのソースリストとその説明

ソースリスト

以下は,作成したcgiプログラムのページソースコードのリストです.

説明

search.cgi(各関数はdef.rbに記述)

accurate.cgi(各関数はdef.rbに記述)

3. リレーション(テーブル)の構造とその説明

構造

以下に,opac.dbにテーブルbibdataを作成した際のSQL(data/bib_sche.sql)を示します.

CREATE TABLE bibdata(
    NBC TEXT primary key,
    ISBN TEXT,
    TITLE TEXT,
    AUTH TEXT,
    PUB TEXT,
    PUBDATE TEXT,
    ED TEXT,
    PHYS TEXT,
    SERIES TEXT,
    NOTE TEXT,
    TITLEHEADING TEXT,
    AUTHORHEADING TEXT,
    HOLDINGSRECORD TEXT,
    HOLDINGPHYS TEXT,
    HOLDINGLOC TEXT);
▲図2, テーブルbibdataを作成するSQL

説明

各値について説明します.

複数値を持つ可能性があるフィールドは,挿入する値を結合して挿入しました.

正規化も何も行っていないので反省したいです.

常に一意な値になるのはNBCのみ(TITLEやHOLDINGLOCは一意でない)なのでprimary keyに指定しました.

元データjbisc.txtのDBにimport可能な形CSVに整形・加工する際用いたプログラムはdata/kakou.rbです.

4. 工夫した点

AND/OR検索に対応

ページングの件数を選択/入力で指定

検索窓でフィールド指定検索

デザイン

サイトの階層構造のサイトマップ作成

HTMLとCSSのバリデーション/標準化

各書誌DBの検索

5. 得られた知見

サーバーサイドシステムの構築

ㅤ普段,私たちが目にするWebページはフロントエンドであって,HTML/CSS/JSで構成されています.そのサーバーでのプログラムやシステムを見ることはできません.今回の演習で動的なページを作成するにあたって,その内部のプログラムの作成によって,その仕組みをしることができました.また,同時に履修していたPHP+MySQLの授業での知識もより深めることができました.

Webページのスタイルシートを用いたデザイン

ㅤこれまで私がWebページを作る,となった時にはMarkDownやBootstrapを用いてあまりCSSを書くことはありませんでした.しかし今回デザインをこだわるにあたってCSSを1から書き起こしました.スタイルシートを用いたWebページデザインの基礎知識を得られたと思います.

構造化文書の作成

ㅤHTMLやXMLの構造化文書のマークアップについての知識を得られました.

SQLiteを用いたDB構築

ㅤこれまでPythonやRubyではMySQLを基本的に用いてきましたが,SQLiteには初めて触りました.記法,組み込み変数,挿入形式の違いを知ることができました.

Webサイトのgithubでの差分管理

eggplants/opac として差分管理を行いました.

6. 感想

ㅤ今回の課題を作成するに当たって、後半3回目の授業あたりから、HTMLやCSS,使用していないがJavaScriptやRubyでの CGI(Perlではちょっとやっていた)作成を初めて行いました。
 驚いたのが、RubyでのCGIに関するWeb上の資料の少なさです。ページネーション処理の作成の際に、参考に出来るページがなかなか出てこず、一般的なページネーションの仕組みから考え実装しました。