パーソナルツール
現在の場所: ホーム ブログ MAGIC + DB2 で XQuery(3)
« 2018January »
Su Mo Tu We Th Fr Sa
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
このBlogについて
 代表の向井田ことMUKAです。当ブログサイトでは、MAGICやDB2に関する技術者向け情報を公開しています。お気軽にお立ち寄り下さい。
最近のエントリ
twitter / 新RT機能を英語モードで・・・ muka 2009年11月19日
twitter / List Widget muka 2009年11月03日
twitter API / Retweet の仕様が・・・ muka 2009年10月30日
twitter API / Lists muka 2009年10月24日
IBM Rational Software Conference 2009 と アジャイル開発 muka 2009年10月08日
twitter API / geoタグ! muka 2009年10月01日
Twitter Developers Meetup in Tokyo muka 2009年09月11日
Club DB2 2009/9/4 muka 2009年09月05日
最近のコメント
Re:Club DB2 2009/8/29 muka 2009年09月01日
Re:Club DB2 2009/8/29 SIM 2009年08月31日
最近のトラックバック
Club DB2 8/29の感想エントリと今後の予定 Unofficial DB2 BLOG 2009年09月01日
カテゴリ
misc (47)
dbMAGIC (47)
DB2 (47)
mail (47)
Web (47)
twitter (47)
 

MAGIC + DB2 で XQuery(3)


インポート・ユーティリティ


 前回まででSQLデータベースに表ができたので、今回は実際にXMLファイルを取り込んでみます。

 まず、テーブルにレコードを挿入する方法ですが、次の2通りの方法があります。
 最初の方法は、SQL文の「insert」命令です。

insert into テーブル名 values(カラム1,カラム2,...,カラムN)

 しかし、XMLタイプの項目の場合、その内容を全て記述してあげないといけないのでちょっと大変です。

(例えば、

'<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Application>
<Header>
...略

</Application>'

のように・・・。)


 もう一つの方法は「importユーティリティ」を使うものです。
 こちらはファイルイメージのXMLファイルを、一括して取り込むことができるので、より便利な方法と言えるでしょう。

import from delファイル of del xml from XMLパス replace into テーブル名
 ここで、「delファイル」とあるのは、読み込みデータを記述した、いわゆるCSV形式ファイルです。このファイルは、各項目をカンマで区切って記述します。例えば、数値項目なら「100」、文字項目なら「"abc"」、XMLタイプの項目は、「"<xds fil='XMLファイル名' />"」のように記述します。
 このとき「XMLファイル名」にはパス名をつけなくて良く、ファイルの格納されたパスは上記のコマンドラインの「XMLパス」で指定します。(「delファイル」も、「XMLパス」もコマンドを実行しているディレクトリからの相対パスでもOK)

 「replace」は動作を表すオプションで、テーブル内のレコードは読み込む前に全てdropされます。残したまま追加読み込みさせたいなら「insert」を指定します。

 今回は、「MAGIC V10解析(8)」で作成したアプリケーションを改良し、プロジェクト・フォルダ内のプログラム・ソースを一括してインポートしてみます。


インポート用delファイル書き出しプログラム


 プロジェクトフォルダにデータ読み込み用の「inport_prg.del」というファイルを書き出すプログラムを作成してみます。
プログラムの一覧は、プロジェクトフォルダを自動的に検知し、メモリテーブルの「Progs.ProgNo」に作成されていますから、それをテキスト形式のファイルに書き出すだけです。
 プログラムの作成手順を下記に示します。

  1. プログラムの追加
    プログラムを追加して「delファイル出力」と名前をつけます。
    タスク特性は「B=バッチ」に指定します。
  2. データビュー
    メインソースは「4」の「Progs.ProgNo」を選択します。インデックスは何を選んでも構いませんが、表示順を見るために「2」の「ProgNo.」を選択します。
    カラムには、「1」の「id」を追加します。
    変数「出力イメージ」、文字タイプの書式「80」を追加します。代入に下記の式を追加します。プログラムのソースを表す「PRG」にidの5桁を加えたものを主項目にセットします。
    '"PRG'&Str(B,'5P0')&'","<xds fil=''Prg_'
    &Trim(Str(B,'5'))&'.xml'' />"'
  3. フォームの追加
    クラス1の「T=テキスト形式」フォームを追加します。幅「80.000」、高さ「1.000」とし、変数「出力イメージ」を配置します。
  4. 入出力ファイルの定義
    メディア:「F=ファイル」、アクセス:「W=書出」の名前「delファイル」を定義します。式には「'%Project%\inport_prg.del'」を指定します。
  5. ロジックの定義
    レコード後処理に、フォーム出力を定義します。


「プログラム一覧」からの起動メニューを組み込む


 ちょっと話題はズレますが、実は、前回ソース公開したプログラムには、プロジェクトフォルダを自由に選択できるような機能が組み込まれています。
 #2のプログラム「プログラム一覧」を単独で実行して頂くと、コンテキスト・メニューの「プロジェクトフォルダの選択」から、任意のフォルダを選択することのできるダイアログを起動します。

v10db2_015.jpg

 更に蛇足ですが、このフォルダ選択プログラム(#8「プロジェクトの選択(A)」)では、V10になって新しく実装された関数「DirDlg」を使用しています。
DirDlg ('プロジェクトの選択','プロジェクトフォルダを選択して下さい.',C,0)
 上記の式中、変数「C」には初期フォルダをセットしているのですが、前回ご紹介させて頂いた論理名「%WorkingDir%」を展開し、現在のプロジェクトフォルダを取得して初期値としています。

 さて、「プログラム一覧」のコンテキストメニューに、今回作成した「delファイル出力」を組み込んでみたいと思います。簡単な手順を示しておきます。

  1. メインプログラムへのイベント定義
    メインプログラムを開き、イベントテーブル(「Ctrl+U」キー)に「delファイル出力」を追加します。
  2. メニューの修正
    メニューリポジトリを開き、#3「プログラム一覧(有効プログラム)」と#4「プログラム一覧」にイベント「delファイル出力」を追加します。
  3. プログラム#2「プログラム一覧」の修正
    プログラム#2「プログラム一覧」を開き、タスク「2.1」を開きます。
    ロジックテーブルに、イベント「delファイル出力」を追加します。
    追加したイベントにコールプログラム#9と、OSコマンド「'notepad '&Translate('%Project%\inport_prg.del')」の定義を追加します。
  4. プログラムの実行
    プログラム#2「プログラム一覧」を実行します。
    コンテキストメニューから「プロジェクトフォルダの選択」を起動し、任意のプロジェクトフォルダを選択してみて下さい。(リスト内容が切り替わると思います。)
    更に、「delファイル出力」を実行します。メモ帳に出力されたdelファイルの内容が出力されます。


importユーティリティの実行

 
 さていよいよXMLデータベース(DB2 9)へのXMLのインポートです。
 とりあえず、今回もコマンドラインプロセッサーを使いましょう。
 スタートメニューから「コマンド・ウインドウ」を起動します。
 カレントディレクトリをリストを出力したプロジェクトフォルダに切り替え、下記のコマンドを入力してみて下さい。(大文字でも小文字でもOKです。)
IMPORT FROM INPORT_PRG.DEL OF DEL XML FROM SOURCE REPLACE
INTO DB2ADMIN.XMLDBTEST
v10db2_011.jpg


 このユーティリティですが、入力時には結構、厳しくXMLデータの内容のチェックをしているようで、XML中に使ってはいけないとされる半角カナなどの文字があると取り込みを拒否してしまいます。
(MAGICのソースはエラーとなるようなことはありません。)
 また、大規模なXMLファイルを読み込むような場合は、いろいろと注意が必要です。
 例えば、タグ内の文字列のサイズは最大で32000バイトです。これを超えるとこのタグの内容は検索することができなくなるので注意が必要です。複数のタグに分割する分にはOKです。
 他にも大量のレコード(何万件)を読み込む場合は幾分の設定の変更が必要になります。

 さて、読み込んだデータを確認してみましょう。
 MAGICでテーブルをAPGで開いてもそれなりの確認はできますが、ここではDB2のGUIユーティリティ「コントロールセンター」を使ってみます。起動すると下記のような画面が表示されます。

v10db2_012.jpg

 オブジェクトビューから作成した表「XMLDBTEST」を表示します。
 アクションから「オープン」すると内容の確認が可能です。

v10db2_013.jpg

 XMLの内容を見てみましょう。任意のレコードで「・・・」と書かれたボタンをクリックすると文書ビュアーが起動します。取り込まれたXMLドキュメントの内容の確認が可能です。

v10db2_014.jpg



 次回は、いよいよXMLデータベースの検索に挑戦です!

MAGIC + DB2 で XQuery(1) MAGIC + DB2 で XQuery(1)
サイズ 4320 - File type text/html
MAGIC + DB2 で XQuery(2) MAGIC + DB2 で XQuery(2)
サイズ 7143 - File type text/html
MAGIC V10解析(8) MAGIC V10解析(8)
サイズ 7011 - File type text/html
カテゴリ
dbMAGIC
DB2