Hippo2000 (2000/12/13)
DBIx系モジュールの1つDBIx::XML_RDBです。
作者はMatt Sergeantさんです。メールで許可をいただきました。
DBIx::XML_RDB - 既存のDBIデータソースからXMLを作成するPerl拡張
use DBIx::XML_RDB;
my $xmlout = DBIx::XML_RDB->new($datasource,
"ODBC", $userid, $password, $dbname) || die "Failed to make new xmlout";
$xmlout->DoSql("select * from MyTable");
print $xmlout->GetData;
このモジュールはDBIデータソースからの簡単なXMLデータ作成ツールです。これはデータベースから簡単にデータを取り出し、後でXML::Parserを使って操作することを可能にします。
このモジュールの1つの使用方法は(そして私にとって近いところでは)、Webサーバでデータを取り出し、クライアントのブラウザに(XMLの形式で)名前のデータを送信し、HTMLを生成するためにクライアントのマシンでPerlScriptからXML::Parserを使うか、VBScript/JavaScriptからMSXMLを使用することです(これは明らかにActive Scripting EngineとIE5ベータで提供されるMSXMLのためにMS IEを使うことを当てにしてます)。
他の使用方法は単純なデータベース取得ツールで、それは含まれている、sql2xmlです。(訳者注:sql2xml.plと思われる)このツールは単純にデータベースのテーブルをXMLファイルにダンプします。これはxml2sql(XML::DBI(?)の一部)(訳者注:同梱のxml2sql.plと思われる)と一緒に使われ、1つのプラットフォームやデータベースサーバから他へ転送するために使うことができます。
バイナリデータはUTF-8を使ってエンコードされます。これはXML::Parserで解析するとき自動的にデコードされます。
"スクリプトレット(Scriptlet)"がディストリビューションに含まれています。これは基本的にこのクラスを包むWin32 OLEラッパーで、OLEをサポートしているすべてのアプリケーションからこのモジュールを呼び出すことができます。インストールするためには、まずhttp://msdn.microsoft.com/scripting からマイクロソフトのスクリプトレットをダウンロードします。そしてエクスプローラでXMLDB.sctの上で右クリックし、"Register"を選択します。"XMLDB.Scriptlet"のインスタンスとしてオブジェクトを作成します。
new ( $datasource, $dbidriver, $userid, $password [, $dbname] )
$dbnameを除く、それぞれの意味についてはDBIのドキュメントをご覧ください。$dbnameはSybaseとMSSQLサーバ・データベース名をサポートするためです。("use $dbname"を使って)
DoSql ( $sql )
単純なSqlコマンド文字列を取ります(SELECTステートメントまたはいくつかのDBMSではリザルト・セットを返すストアド・プロシージャ − SybaseとMSSqlはこれをサポートしていますが、他については分かりません − を指定できます)
これはSQLが正しいかどうかはチェックしません、もし失敗すればこの処理は死にます(die)、これについて気をつけるのであればeval{}ブロックで包んでください。
リザルト・セットは出力に追加されます。後でDoSqlを呼び出すと、出力を上書きせず、それを追加します。これにより(GetData()を使って)出力を取得する前にDoSqlを複数回呼ぶことができます。
単純にこのSQL呼出しにより生成されたXMLを返します。残念なことにまだストリームとして出力はしません。いつかはそれを追加するかも知れません。(これは、おそらくIOハンドルがnew()に渡されることになるでしょう)
XML出力は以下のようなフォーマットになります:
<?xml version="1.0"?>
<DBI driver="dbi:Sybase:database=foo">
<RESULTSET statement="select * from Table">
<ROW>
<Col1Name>Data</Col1Name>
<Col2Name>Data</Col2Name>
...
</ROW>
<ROW>
...
</ROW>
</RESULTSET>
<RESULTSET statement="select * from OtherTable">
...
</RESULTSET>
</DBI>
これはとても簡単にXML::Parserで解析することができます。
Matt Sergeant, matt@sergeant.org
XML::Parser
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。