mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); ?>
日本ユニテック 吉田 晃伸
多くの読者の方は「XML」という言葉を聞かれたことがあると思います。最近いろいろなシステムやアプリケーションが「XMLに対応した」とか「XML形式のデータを扱えるようになった」などといったうたい文句を掲げています。しかし,実際にXMLデータそのものを目にする機会は少ないため,一体どのように XMLを使うのか,そもそもXMLって何だろうと疑問に思われる方も少なくないと思います。
本講座では,XMLを身近に活用していただけるよう,Weblog(Blog)サイト構築を例に仕組みや利用方法を紹介していきます。サイト構築については,XMLデータの格納や検索に便利な「XMLデータベース」を中核に解説を進める予定です。最終的には写真1のようなBlogサイトの完成を目指します。
写真1:本連載が目標とするBlogサイト
XMLデータベースを活用するアプリケーションの例として、Blogサイト構築を目指します。
第1回目の今回は,XMLの特徴とXMLデータベースについて,そして本講座で取り上げる「Xpriori」というXMLデータベースの特徴とインストール方法について紹介します。
XMLとは,eXtensible MarkupLanguage,つまり「拡張可能なマークアップ言語」を意味します。
マークアップ言語とは,データの各要素に「タグ」と呼ばれる記号を付け,それぞれの要素を意味付けするのに利用する言語です。マークアップ言語には用途別にさまざまな種類があり,言語ごとにタグの形式は異なりますが,一般には,データの意味や性質を表す略語を不等号で囲んだものが使われます。例えば,最も身近なマークアップ言語であるHTML(Hypertext Markup Language)では,<title>や<body>といったタグを使います。
HTMLでは,これらのタグを使ってWeb文書の「見出し」や「段落」などの文書構造を記述します。この際,<title>タグは文書のタイトルを,<p>タグは段落をというようにタグの意味は固定されており,それに従って文書を意味付けしなければなりません。また,あるタグは<head>タグで囲まれた範囲に,あるタグは<body>タグで囲まれた範囲に記述しなければならないといった,タグの階層構造についての取り決めもあります。Webブラウザは,これらの取り決めに従ってWeb文書を解釈(図1)しますので,ルールを厳格に守って文書にタグ付けしなければなりません。
図1:身近なマークアップ言語「HTML」
HTMLでは、特定の意味を持つタグを使って文書を意味付けします。Webブラウザはそれに従って表示などを制御します。
XMLも,HTMLなどと同じ,データの各要素をタグで意味付けするマークアップ言語です。しかしXMLとHTMLが違うのは,XMLでは,タグの名前やその階層構造が固定化されていないということです。そのため,自由にタグの名前やタグ間の関係を定められます。例えば,文書のタイトルは<title>タグで表現しても良いですし,タグで表現しても構いません。これが「拡張可能な」という「eXtensible」の持つXMLの特徴になります(図2)
図2:拡張可能なマークアップ言語「XML」
XMLでは、タグの意味をユーザーが任意に設定できます。同じタグでもユーザーの規則が異なれば違う意味になりますし、逆に違うタグを同じ意味で使うこともできます。
タグやタグ同士の関係を自由に定められるということは,データの持つ「意味」とそれらの「関係」を柔軟に表現できるということです。そのためXMLを利用すれば,(向き不向きはありますが)あらゆるデータを表せるのです。しかもXMLのタグは,(そのように規定すれば)人間が一見して分かりやすい名前にできます。そのため,万一,仕様書等が失われても,データの各要素の意味を類推しやすいというメリットがあります。
XMLが一番活躍できる分野は,この「柔軟性」を生かせる分野です。例えば,項目数や項目間の関係が固定的でないようなデータを扱わねばならない場面などで力を発揮します。
このようなデータの身近な例に住所録が考られます。従来,住所録では「名前」,「電話番号」,「郵便番号」,「住所」といった項目のデータしか扱いませんでした。しかし,携帯電話の普及により,電話番号は「自宅電話番号」と「携帯電話番号」の2つのデータを扱う必要が出てきました。また最近では,多くの方がメール・アドレスを持つようになりましたので,「メール・アドレス」という項目も必要でしょう。さらに考えるならば,ほとんどの携帯電話はメール・アドレスを持っていますから,メール・アドレスという項目も「自宅メール・アドレス」,「携帯メール・アドレス」などの項目に分割しなければならないでしょう(図3)。
図3:項目数が変化するデータの例
住所録のような簡単なデータでも、携帯電話や電子メールなどの普及で項目数が変化します。XMLデータベースであれば、こうしたデータ変換に柔軟に対応できます。
このように,住所録という身近なデータ一つを考えても,時間と共に項目が拡張されていきます。こうしたデータを柔軟に表現できるのがXMLなのです。データ項目が増加したとしても,XMLでは,その項目を表すタグを自由に定義し,関係性を自由に表現できます。こうした特長に注目が集まり,様々なシステムやアプリケーションでXMLが使われるようになってきました。
多量のデータを効率良く格納,管理するために一般に使われるのがデータベース管理システム(DBMS)です。しかし現在のDBMSの主流は,データを固定的な表の形式で格納する「リレーショナルDBMS」(RDBMS)です。RDBMSでは,データ項目を最初に固定しておく必要がありますから,データ項目の変化が激しいXMLデータを取り扱うのは不得意です。それでも住所録程度の簡単なデータであれば何とかなるのですが,項目間の関係が複雑なデータになると,それを効率良くRDBMSに格納するには多くの経験と高い技術が求められます。
こうした限界に対処するには,XMLデータをそのままの形で格納できるDBMSが必要となります。それが「XMLデータベース」です。XMLデータベースはXMLデータをそのまま格納できますので,RDBMSのように表設計に頭を悩ませる必要なく,データ表現の拡張に柔軟に対応できます。
XMLデータベース製品には,有償のもの無償のものを含め,多数のものが存在しています。本講座では,無償で利用でき,データのスキーマ定義(後述)が不要で利用しやすい「Xpriori」というXMLデータベースを利用します。
Xprioriは,サイバーテックが販売する有償XMLデータベース製品「NeoCoreXMS」(https://www.neocore.jp/)の無償版に当たります。基本的に有償版と同じ機能が提供されていますが,表1に挙げた制限が設けられています。Xprioriは,「XMLDB.JP」(https://www.xmldb.jp/)というWebサイトからダウンロードできます。2004年7月現在,Linux版とWindows版が配布されています。なお,XMLDB.JPについては,p.143の別掲記事「Xprioriコミュニティ・サイト『XMLDB.JP』」を参照してください。
データベース・サイズの上限が約1Gバイト |
データベースをインストールしたコンピュータと同じIPアドレスからのアクセスのみ利用可能 |
正規のサポート、保守の対象外 |
非商用、個人利用に限定して利用可能 |
XMLデータベースとしてのXprioriの最大の特徴は「スキーマ定義なしにXMLデータを格納できる」ことです。スキーマ定義とは,取り扱うXMLデータの内容や構造について定めた規則のことです。スキーマ定義があれば,入力データの正当性を検証したり,RDBMSのテーブル・データへのマッピングといった処理がしやすくなります。そのため,多くのXMLデータベース製品ではスキーマ定義を必要としますが,スキーマ定義は面倒ですし,データ形式の変更にも対応しにくい問題があります。
Xprioriではスキーマ定義は不要です。これは,Xprioriの内部構造が「データベース」というより「文書検索システム」に近いものだからです。Xprioriでは,XMLデータを文字通り「そのまま」の形で格納します。ただし,検索を高速にするため,タグ付けされた各要素を基にインデックスを作成します。これにより,キーワードを基に文書を高速検索する文書検索システムと同じように,要素を基に目的のデータを高速検索できます *1。
このような構造となっているため,スキーマ定義を必要とせず,自由な形式のデータを格納できるのです。タグがきちんと閉じられているといった最低限の規則を満たす,いわゆる「整形式」(well-formed)なXMLデータであれば,どんなデータでも格納できます。そのため,柔軟で拡張に富んだXMLデータを手軽に格納できるという「やわらかさ」を持っています。データ項目を拡張した場合でも,スキーマ定義を変更したり,データベースの設定を変更する必要はありません。
*1 インデックス作成にはハッシュ法を使用しています。また、パターン・マッチには「DPP」(Digital Pattern Processing)と呼ばれる独自技術(米国で特許取得済み)を使って高速検索を実現しています。DPPは「アイコン」と呼ばれる固定長のパターンを用い、検索対象となるパターンから一致するパターンを高速に検索する技術です。
それでは実際にXprioriを使ってみましょう。
Xprioriのアーカイブ・ファイルは,XMLDB.JPのトップ・ページから「ダウンロード」を選択して表示されるWebページからダウンロードできます。 Linux版のアーカイブ・ファイルをダウンロードしてください。ここでは,2004年7月12日現在の最新版「xms-3.0.43-dev- lin32ja.tar.gz」を入手したとします。
これを図4の手順で展開,インストールします。インストーラを起動する前に,管理者権限で,Xprioriが使用するグループ(neocore)とユーザー(neoadmin)を作成しています。
図4 Xprioriのインストール手順 このマークで改行
このとき,noadminユーザーのホーム・ディレクトリに,Xprioriのインストール先を必ず指定してください。Xprioriは標準では,/opt/NeoCoreディレクトリにインストールされます。本記事では,標準位置にインストールするものとします。
インストール時には,写真2のようなインストーラが起動します。「Next」を押してインストールを進めます。ライセンス条項に同意し,インストール先ディレクトリを決定すると実際のインストール作業が始まります。
写真2:Xprioriのインストーラ
XprioriにはGUI設定ができるインストーラが付属しています。
インストールの最後に,パスワードなどを設定します。まず,管理コンソールにアクセスするためのユーザーとパスワードを設定します(写真3)。このユーザーとパスワードは自由に設定できます。設定後,「Next」を押して次に進みます。
写真3:管理用ユーザーとパスワードを設定
ここで設定した情報は、管理コンソールにアクセスする場合に使われます。ユーザー名は自由に設定できます。
次にライセンス・ファイル取得画面が表示されます。Webブラウザが利用できる場合は自動的にWebブラウザが立ち上がり,Xprioriのアクティベーション用のWebページ(https://www.neocore.jp/download/activation_main.php)が表示されます。自動表示されない場合は,手動でアクセスしてアクティベーションを実施します。
アクティベーションでは,氏名とメール・アドレスの登録が必要です。登録したメール・アドレスにライセンス・ファイルが届きますので,正しいメール・アドレスを入力してください。登録後,すぐにライセンス・ファイルが送付されます。送付されたライセンス・ファイルは「/opt/NeoCore/neoxml/config」ディレクトリに格納しておきます。
ライセンス・ファイルの格納後,インストーラ画面の「Next」をクリックしてインストールを進めます。
最後にデータ・ベースにアクセスできるユーザーとパスワードを設定します。管理者として「Administrator」ユーザ(ユーザー名は固定)が必須になりますので,同ユーザーとそのパスワードを設定します(写真4)。
写真4:データベース管理用ユーザーを設定
ユーザー名は「Administrator」で固定です。パスワードだけを設定します。
これでインストール作業は完了です。なお,2004年7月12日現在のLinux版のインストーラには若干の不具合が存在することが分かっています。これについては,p.147の別掲記事「Linux版インストーラの不具合について」を参照してください。
それでは,インストールしたXprioriを操作してみましょう。まず管理者(root)権限で,次の通りXprioriを起動します。
次にWebブラウザを立ち上げ,「http://localhost:7701/console」というURLにアクセスします。これはXprioriの管理コンソールのURLです。アクセスすると写真5のような認証情報入力画面が表示されます。
写真5:管理コンソールへのアクセス
「http://localhost:7701/console」というURLで管理コンソールにアクセスします。認証ダイアログが表示されるので、インストール時に設定したユーザー名とパスワードを入力します。
ここで,インストール時に「ConsolePassword」で設定したユーザー名とパスワードを入力します。認証をパスすると写真6のような管理コンソールが表示されます。
写真6:管理コンソール
Xprioriのすべての操作は、この管理コンソールで実施できます。
管理コンソールで実施できる操作は,タブ部分にまとめてあります。実施できる主な操作を表2に挙げました。
表2 管理コンソールで実施できる主な操作
各操作は「タブ」によって選択できます。
機能名 | 説明 |
---|---|
Manage Server | Xprioriをシャットダウンしたり、バックアップする |
Status | Xprioriのステータスを確認する |
Database Access | データベースにアクセスする。XML文書の格納や検索、更新などを実施する |
Settings | Xprioriを設定する |
User Admin | データベース・アクセス用ユーザーを管理する |
Access Controle | データベースへのアクセス権限を設定する |
Help | ヘルプ・ドキュメント |
XMLデータベースを操作する場合は「Database Access」タブを利用します *2。これを使って,実際にXMLデータベースを操作してみましょう。
同タブをクリックすると,認証情報入力画面が表示されます。ここに,データベース・アクセス用に設定したユーザー名とパスワードを入力します *3。正しくログインできると,画面左側のデータベース操作メニューや,「User Admin」,「Access Control」機能が使用可能になります。
初期状態では,XMLデータベースには何もデータが格納されていません。何らかのデータを格納する場合は,データベース操作メニューの「Store」をクリックします。これにより,写真7のような別ウインドウが表示されますので,ここで,「XML Files」欄にXprioriに格納したいXMLファイルを指定します。
*2 管理コンソールを使う方法以外に、コマンドライン・ツールやデータベース操作用APIを使ってもデータベースを操作できます。
*3 初期設定では、データベース・アクセス用ユーザーは「Administrator」です。
写真7:格納するXMLファイルを指定
「XML File」欄で、データベースに格納するXMLファイルを指定します。「Store XML」ボタンをクリックすると、データが格納されます。
例として,Xprioriに標準添付されるサンプル・ファイルを格納してみましょう。サンプル・ファイルは,/opt/NeoCore/neoxml/sample/xmlディレクトリに格納されています。ここでは,データ量が小さくて分かりやすい「sales.xml」を格納してみます。ファイル選択後,「StoreXML」ボタンをクリックすると,XprioriにXMLデータが格納されます。
正しくXMLデータが格納できたかを,データベースに問い合わせ(クエリー)を発行して確認してみましょう。
問い合わせも,データベース操作メニューから発行できます。問い合わせは,「Query」メニューをクリックして表示される「Query XML」画面に記述します。なお問い合わせ言語は,RDBMSで一般に使われるSQLではなく,「XQuery」という言語を使います。XQueryは,XPathと呼ばれるパス式を基本とした問い合わせ言語です。
XQueryの詳細については今後の連載で解説します。ここでは簡単な例として「/ND/sales」という問い合わせをすることにします。この問い合わせは,XML データのND要素中( <ND>~</ND>で囲まれたエリア中)のsales要素の内容を取り出すためのものです。これを「XQuery Target」欄に記述して,「Query XML」ボタンを押してみてください。写真8のようにXMLデータのsales要素が表示されれば,XMLデータは正常に格納されています。
写真8:問い合わせ結果が表示される
XQueryによる問い合わせを「XQuery Target」欄に記述し、「XQuery XML」ボタンをクリックするとデータベースへの問い合わせが実施されます。
本講座の最終目標は,Blogサイトの構築です。そのため,CGI(CommonGateway Interface)プログラムとして動作するBlogアプリケーションから,Xprioriにアクセスできるようにする必要があります。CGIプログラムによく利用されるプログラミング言語はPerlです。そこでまず,PerlからXprioriにアクセスする方法を紹介します。
PerlプログラムからXprioriにアクセスするには,接続用のPerlモジュールを入手する必要があります。同モジュールは,XMLDB.JPで配布されています。XprioriをダウンロードしたWebページから「Xpriori APIのダウンロード」を選択すると入手できます。
入手したファイルを展開すると,いくつかのディレクトリが生成されます *4。接続に必要な3 つのPerlモジュール「NeoPerlConfig.pm」,「NeoProxy.pm」,「NeoResult.pm」は,libディレクトリに格納されています。これらのモジュールを,Perlのライブラリ・ファイル・ディレクトリ(/usr/lib/perl5/site_perlディレクトリなど)にコピーすれば,PerlプログラムからXprioriを利用する準備が整います。なお,Perlのライブラリ・ファイル・ディレクトリは,perl コマンドを-Vオプション付きで実行すると調べられます。「@INC:」に続いて表示されるディレクトリがライブラリ・ファイル・ディレクトリです。
*4 これらのディレクトリには、PerlAPIを使ったサンプル・コードやサンプルXMLデータが収録されています。興味のある方は、参照なさってください。
早速,簡単なサンプル(図5)を使ってアクセスを試してみましょう。このサンプルは,「/ND/sales」という問い合わせを発行するPerlプログラムです。
図5:PerlによるXprioriアクセス用のサンプル・プログラム
「/ND/sales」という問い合わせを発行するプログラムの例です。
同プログラムでは,まず,3行目でPerlAPIパッケージ(NeoProxyモジュール)の使用を宣言しています。さらに,5行目でXprioriへの制御クラス「NeoProxy」をオブジェクト化し,6行目ではXprioriから受け取った結果を扱うための「NeoResult」クラをオブジェクト化しています。8行目,9行目では,データベース接続用の認証情報を設定し,11行目でその情報を使って接続しています。接続にはloginメソッドを使用します。第1引数にユーザー名,第2引数にパスワードを指定します。
ここまでの処理で,データベースに問い合わせできるようになります。14行目のqueryXMLが問い合わせ用のメソッドです。queryXMLメソッドは,引数にXQuery式を指定します。問い合わせの結果を変数に格納し,15行目でそれを画面に表示しています。
最後の処理が17行目の切断処理です。logoutメソッドを使用してデータベースから切断して,処理を終了しています。
作成したサンプルを実行した様子を図6に挙げました。管理コンソールを使った場合と同じように,問い合わせ結果が表示されているのが分かります。
図6:PerlによるXprioriアクセス用のサンプル・プログラム
「/ND/sales」という問い合わせを発行するプログラムの例です。
次回は,より実際的な問い合わせ方法や,格納するXMLデータの構成などについて詳しく解説する予定です。
筆者らは,Xprioriの普及促進のため「XMLDB.JP」(https://www.xmldb.jp/)というWebサイトを運営しています。同サイトでは,Xprioriを配布しているほか,Xpriori開発者のための技術情報を提供しています。例えば,Xpriori自体の解説記事や,それ以外のXMLに関する解説記事などを掲載しています。また,JavaやC#といった開発言語によるXprioriのサンプル・プログラムや,API (Application Programming Interface)情報も公開しています。開発者が相互に情報交換できるように,コミュニティ・スペースも開設しています。
また,2004年9月末までの期限でプラグイン・コンテストを開催しています。同コンテストでは,OpenOffice.orgやEclipseとXprioriの連携ソフトウエアを募集しています。最優秀作品には賞金も出ますので皆さんも奮ってご応募ください。
2004年7月12日現在,Linux版のXprioriインストーラには,「データベース初期化に失敗する」,「管理コンソール用パスワードが正常に設定されない」という2つの不具合が存在します。そのためインストール後に,これら2つの作業を手動で実施しなければなりません。
データベース初期化の手順は図B-1の通りです。途中で,「Do you wish to create thedefault Access Control Documents」(標準アクセス制御文書を作成しますか)と聞かれます。単にデータベースを初期化する場合は,作成してもしなくても構いません。「1」か「2」のどちらかを入力してください。
初期化作業の最後には,データベース・アクセス用の管理ユーザー(Administrator)のパスワード設定を求められます。パスワードを設定し,「Completed CreateDB」のメッセージが表示されればデータベースの初期化は成功です。なお,データベース初期化作業には,ライセンス・ファイルが必要です。ライセンス・ファイルを所定の位置に配置してから作業してください。
続いて,管理コンソール用の作業ユーザーとパスワードを設定します。作業手順は図B-2の通りです。ユーザー名とパスワードは自由に設定できます。
$ ./XMSAdmin ConsolePassword
NeoCore XML Management System (XMS) Administration Version: 3.0.43
Console password reset utility.
Please, enter new console username : admin
New password : *****
Confirm new password : *****
The console password has been reset.
$ cd /opt/NeoCore/neoxml/bin
$ ./NeoXMLUtils CreateDB /opt/NeoCore/neoxml/config
(en)NeoCore XML Management System (XMS) Version: 3.0.43
Executing Command: CreateDB
Do you wish to create the default Access Control Documents :
1) Yes
2) No
Enter Choice : [1/2] : 1
File /opt/NeoCore/neoxml/db/neoXDB.adm Created, ensuring empty...done
(省略)
Initializing User Accounts
Please Enter password for Administrator user : ***** ←パスワード入力
Please Re-Enter password : ***** ←パスワードを再度入力
Completed CreateDB
B-1 データベース初期化の手順
$ su neoadmin
$ cd /opt/NeoCore/neoxml/bin
$ ./XMSAdmin ConsolePassword
NeoCore XML Management System (XMS) Administration Version: 3.0.43
Console password reset utility.
Please, enter new console username : admin ← ユーザー名の入力
New password : ***** ← パスワードの入力
Confirm new password : ***** パスワードの再入力
The console password has been reset.
B-2 管理コンソール接続用のユーザー/パスワード設定手順
▲このページのTOPへ