XMLDB.jp

XMLDB開発支援
HOME  >  XMLDB開発支援  >  チュートリアル ~Perl編

チュートリアル ~Perl編

Xprioriで始めるXML DBプログラミング
~リレーショナルデータベースからXML DBへのデータ移行を進めよう~



2006年3月2日 更新
株式会社エフ・イー・エス
取締役CTO 大島 真言

ユーザがデータ構造を定義するような、自由度の高いシステムの設計開発に携ったことのある方でしたら、XMLデータベースへの関心は高いのではないでしょうか。


XMLは人間が理解しやすいデータ構造です。従来RDBMSでは無理やり実現させていたり諦めたりしていたデータ構造も、正規化を繰り返したあげくクライアントとの意思疎通に悩んだり、改修の案件が発生する度に当時の議事録をひっくり返して頭を悩ませたりすることも、XMLデータベースなら柔らかく解きほぐしてくれるかもしれません。



とはいえ、XMLデータベースは、これまでノウハウを蓄積してきたRDBMSとは本質的に異なるものです。プログラムからの利用法も異なりますので、スキルを身につける必要があります。元々理解し易い構造ですから、自転車に乗れるようになるほど難しいことではありません。



幸いにして、私たちは非商用利用ならば無償で提供されているXprioriを入手することができます。Windows版・インストーラ付きでセットアップも簡単にできますので、XMLデータベースの学習には最適です。



本稿では、比較的準備の容易なPerl言語(ActivePerl)の開発環境構築から、CGIによるWebアプリケーションにおける一連のXMLデータベース操作までをガイドしていきます。



是非Xprioriをお手元のWindows環境にセットアップして、XMLデータベースを体験してみてください。






開発環境の構築


それでは早速開発環境を構築しましょう。インストールはAdministratorsグループのユーザで行う必要がありますのでご注意ください。



■ Apacheの入手とインストール



Apache HTTP Serverはhttp://www.apache.jp/からリンクを辿って、ミラーサーバからダウンロードします。筆者がダウンロードしたときのファイル名はapache_2.0.55-win32-x86-no_ssl.exeでした。



Apache2.2.0がリリースされましたが、筆者にもノウハウがありませんので、はやる気持ちをグッとこらえてバージョン2.0.55をダウンロードしました。






[Tips]

ファイル名が示すとおり、一般に配布されているWindows版Apacheのコンパイル済みバイナリはSSL(HTTPS)に対応していません。



Xprioriを利用する分には必要が無いかもしれませんが、商用サービスとしてNeocoreXMSを利用する場合などSSLを利用する必要がある場合には、ソースコードをコンパイルする他に、http://hunter.campbus.com/で配布されているコンパイル済みバイナリを利用することもできます。


コンパイル時にSSL通信ライブラリであるOpenSSLを必要とするため、配布されているものを利用する際にはバージョンを合わせる必要がありますのでご注意下さい。



インストーラを起動し、タイトル>License Agreement>Read This Firstと読みながら進めていきますと、Server Informationを設定する画面になりますので、ドメイン名、ホスト名、メールアドレスを入力し、ラジオボタンは上(PCを利用する全ユーザ対象、サービスとして80番ポートで動作)を選択します。



perl_1_1.jpg







注意:1
IIS(Internet Information Service)が既に動作している場合は、停止しておくかポート番号を80番から8080番など別の番号に変更しておいてください。(勿論、詳しい方でしたらApacheの方を別のポート番号に変更して頂いても結構です。その場合、以降のURLの指定にご注意ください。



注意:2
例では「localdomain」と記述しておりますが、開発環境の構築という点ではこの記述に意味はありません(以降の解説では「http://localhost/」というURLを用います)。



次のSetup TypeではCustomを選択します。



perl_1_2.jpg



インストール先を指定します。どこか空き容量のあるドライブのルートディレクトリ直下のusrというディレクトリを使うよう変更します。



perl_1_3.jpg     perl_1_4.jpg



この後は画面の指示に従ってインストールを完了させます。



■ ActivePerlの入手とインストール



ActiveState社(http://www.activestate.com/)が配布しているActivePerlを入手します。



http://www.activestate.com/Products/ActivePerl/にアクセスして、Free DownloadからWindows用のActivePerl(MSI版)をダウンロードします。筆者がダウンロードしたときのファイル名はActivePerl-5.8.7.815-MSWin32-x86-211909.msiでした。



インストーラを起動し、タイトル>End-User License Agreementと読みながら進めますと、Custom Setup画面になりますので、インストール先を、先ほどApacheをインストールしたディレクトリを再び指定します。



perl_1_5.jpg     perl_1_6.jpg



続くChoose Setup Options画面で、オプションを設定します。筆者はエディタで「.pl」のファイルを開きたいことと、IISとPerlの組み合わせを使用しないことから、上から二つのチェックボックスだけをオンにしました。



perl_1_7.jpg



この後は画面の指示に従ってインストールを完了させます。



■ ここまでの確認



ApacheとActivePerlがうまくインストールできたか確認してみましょう。



ブラウザを開いて「http://localhost/」にアクセスしてみてください。「Apache インストール時のテストページ」が表示されればApache HTTP Serverは動作しています。



表示されない場合は、タスクトレイにApache Monitorのアイコンが追加され、緑色の三角形が表示されていることを確認してください。



WindowsXP SP2では、Apache HTTP ServerがWindows ファイアウォールにブロックされているかもしれません。



次にコマンド プロンプトを開き、ActivePerlのサンプルを実行します。






>perl e:\usr\eg\example.pl
Hello from ActivePerl!


いかがでしょうか。うまくいかない場合は、PATHやインストール先を確認してください。



■ Xprioriの入手とインストール



次はいよいよXprioriをインストールします。



XMLDB.JPのダウンロードページからWindows版をダウンロードして実行してください。



Introduction>License Agreement>Choose Install Folder>Pre-Installation Summaryと進めます。(インストール場所はどこでも構いません。)



インストールが終わりますと、XprioriのWebベースの管理画面にアクセスするためのConsoleユーザのアカウントを作成する画面になりますので、パスワードを入力します。



次に、ブラウザが起動し、ライセンスファイルを取得するための画面が表示されますので、画面の指示に従ってライセンスファイルを入手します。メールで届いたライセンスファイルを画面の指示に従ってインストールして、次に進みましょう。



続いてデータベースを作成します。データベース管理者(Administrator)のパスワードを決めて入力し、Create Databaseをクリックします。



Xprioriのロゴが高速回転をやめ、「Status: Database Created」と表示されれば作成完了です。次の画面でNeoServerを起動してインストールを完了しましょう。



■ もう一息 ~ ApacheのCGI設定と再起動



インストール直後のApache HTTP ServerはCGIが動作するようになっていませんので、設定ファイルを書き換えます。



Apacheをインストールしたディレクトリ配下のApache2\confディレクトリにある、httpd.confをエディタ(無ければメモ帳)で開き、以下の設定を変更します。



筆者と同じバージョンのApacheでしたら行番号が参考になります。表中では「e:\xmldb\htdocs」というディレクトリにWebアプリケーションを配置するものとしていますが、皆様の環境に合わせて適宜ご変更下さい。



ところで、行番号452と462の2つの設定は、サーバ情報を外部に公開しないための設定です。NeocoreXMSを使ってインターネットに公開するサーバを構築する際には、ここに掲載するより更に慎重なセキュリティへの配慮が必要です。(SSLの利用、アクセス制限、アクセスログの詳細化、icons/manual表示の削除などApacheの設定だけでなく、ファイアウォールや侵入検知システム(IDS)等の機器の導入をお勧めします。)




































行番号 変更前 変更後
228 DocumentRoot "E:/usr/Apache2/htdocs" DocumentRoot "E:/xmldb/htdocs"
253 <Directory "E:/usr/Apache2/htdocs"> <Directory "E:/xmldb/htdocs">
267 Options Indexes FollowSymLinks Options ExecCGI
321 DirectoryIndex index.html index.html.var DirectoryIndex index.cgi index.html
452 ServerTokens Full ServerTokens Prod
462 ServerSignature On ServerSignature Off
765 #AddHandler cgi-script .cgi AddHandler cgi-script .cgi


ファイルを保存して、上記ディレクトリを作成したら、Apacheを再起動してみましょう。タスクトレイのApache Monitorアイコンをクリックして、「Apache2」をポイントし、「Restart」をクリックします。



確認のために、先のディレクトリ(筆者の環境ではe:\xmldb\htdocs)に、「index.cgi」というファイルを作成します。ファイルの内容は下記のようにしてください。






#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello CGI!";
exit;


ファイルを保存したら、ブラウザを開いて「http://localhost/」にアクセスしてみましょう。期待した結果が得られましたでしょうか。



うまくいかないときは、Apacheのログファイルを確認します。usr\Apache2\logs配下にerror.logファイルがあります。きっとエラーが出力されていますので、エラーの内容を検索エンジンにかけてみてください。同じトラブルを抱えて解決した方がきっと見つかることでしょう。



■ XprioriをCGIから操作 ~ 動作確認おしまい



最後に、XprioriをCGIから操作してみましょう。これで動作確認は終わりです。



まずXpriori(NeocoreXMS)のPerlAPIをダウンロードします。Xprioriダウンロードページの下のほうからPerlAPIがダウンロードできるようになっています。



ダウンロードしたら、アーカイブを展開して出来る3つの「.pm(Perl Module)」ファイルを、先ほどApacheに設定したDocumentRootの1つ上に「lib」ディレクトリを作成して格納します。



筆者の環境では以下の3ファイルができます。






e:\xmldb\lib\NeoPerlConfig.pm
e:\xmldb\lib\NeoProxy.pm
e:\xmldb\lib\NeoResult.pm


NeoPerlConfig.pmを開き、先ほどXprioriをインストールしたときに設定したAdministratorユーザのパスワードを10行目に設定(PASSWORD => ''のシングルクォート内を変更)し保存します。



htdocsディレクトリに「example1.cgi」ファイルを作成して、ブラウザから実行してみましょう。ファイルの内容は下記のものをコピー&ペーストしてください。URLは「http://localhost/example1.cgi」です。(HTML構文を端折っている点については目を瞑って頂けますと幸いです。)






#!/usr/bin/perl
use strict;
use warnings;
use lib '../lib';
use NeoProxy;
#############################################################
# NeoPerlConfig.pm(設定ファイル)から値を取得します
use vars qw(%c);
*c = \%NeoPerlConfig::c;
#############################################################
# Neocore PerlAPIのインスタンス生成
my $np = new NeoProxy();
my $res;
#############################################################
# ヘッダと固定文字列
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "<html><body>NeocoreXMS 接続試験<br><br>\n";
#############################################################
# ログイン処理
$res = $np->login($c{USERNAME}, $c{PASSWORD});
print "ログイン結果 ------------------------------<br>\n";
print lf2br(html_escape($res));
#############################################################
# ログアウト処理
$res = $np->logout();
print "ログアウト結果 ----------------------------<br>\n";
print lf2br(html_escape($res));
print "</body></html>\n";
exit;
#############################################################
# HTML出力時のメタ文字変換
sub html_escape
{
my $str = shift;
$str =~ s/&/&amp;/g;
$str =~ s/</&lt;/g;
$str =~ s/>/&gt;/g;
return $str;
}
#############################################################
# 改行を読み易くする
sub lf2br
{
my $str = shift;
$str =~ s/\r\n|\r|\n/<br>\n/g;
return $str;
}


ブラウザに以下のように出力されれば正しくXprioriに接続できています。(<sid>の数字はアクセスする度に変わります。試してみてください。)



ログイン結果の欄に「Authorization Failed」などと表示されたら、それは恐らくパスワードが違うことに因るものです。また、画面が真っ白だ!「Internal Server Error」が出る!という場合には、コピー&ペーストのミス、あるいはディレクトリ構成が違うかもしれません。前出のerror.logが解決の一助となることでしょう。






NeocoreXMS 接続試験

ログイン結果 ------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<sid>4189302640</sid>

ログアウト結果 ----------------------------
<?xml version="1.0" encoding="utf-8" ?>
<success/>



さて、うまくいきましたでしょうか!?次回以降は、まず上記「example1.cgi」の解説をして、それから今回構築した環境を使ってXprioriの様々な機能に触れていきたいと思います。


▲このページのTOPへ

  • 無償で使える!XMLDB「NeoCore」
  • サイバーテック求人情報
  • メールマガジン申し込み
  • TEchScore

  • ▲NeoCoreについて記載されています!

  • ▲XMLマスター教則本です。試験対策はこれでばっちり!
Copyright (c) CyberTech corporation ltd. All ights Reserved. | サイバーテックについて | ご利用ガイド