Personal tools
You are here: Home ブログ MAGIC + DB2 で XQuery(8)
« May 2012 »
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    
About this blog
 当ブログサイトでは、MAGIC(uniPaaS)やDB2に関する技術者向け情報を公開しています。お気軽にお立ち寄り下さい。
Recent comments
Re:Club DB2 2009/8/29 muka 2009-09-01
Re:Club DB2 2009/8/29 SIM 2009-08-31
 

MAGIC + DB2 で XQuery(8)


再度XQuery・・・



 梅雨の鬱陶しい季節ですが、皆さん如何お過ごしでしょうか?
 さて、私のほうは、この何ヶ月にわたり受託開発していたシステムの納品も済んで、少し落ち着いているところでしょうか?

 ところで、このブログもなかなかこまめに投稿できず、かなり不定期的連載となっています。(申し訳ありません)
 思えば、前回から一月も経ってしまいました。でも今回はご安心下さい。すでに書ききれないので、近日「続き」を書かないといけなくなりました。w

 ところで、この連載の始まった頃からの課題といいますか、XMLデータベースの使い方の中で、「これは、どうすればいいんだ・・・?」と疑問に思いながら追求していたことが幾つかあったんですが、そのうち一番大きいやつがこのほど、霧が晴れたように解決してしまいました。
 まぁ、この連載も手探りでやっていますので、どこに行き着くかも分からないんですが、それがまた楽しいのかも・・・w
 ということで、今回は、再びXQueryがテーマです。(正確には「今回から」=「次回も・・・」?)


「RM互換」のタスクの検索・・・


 たまたまテーマにしてるのが、MAGIC V10のソースの解析なんですが、プログラムのソース(=XMLドキュメント)をXMLデータベースに格納することにより、効率良く該当ドキュメントを検索することが可能になることは、今までの連載の中で述べてきたとおりです。
 ここで、その要点をまとめておきます。

  • XMLドキュメントは、XMLデータベース(DB2 9)のXMLタイプのカラムにそのまま格納することができる
  • 該当するドキュメントは、SQLを拡張したSQL/XMLを使用することにより検索が可能
  • 具体的には、where句でxmlexist関数を使い、XPathで指定する

 最近、某MLで、「RM互換のタスクをどうやって探せばいいか?」という話題になりました。
 「RM互換」というのは、古いバージョンのコーディング方法をサポートするために、MAGIC V10で実装された機能?で、純粋なイベントドリブンコーディングにするためには、取り除くことが望ましいとされているものです。
 私は思わずその問いの答えとして、「XMLデータベースを使って検索すれば・・・」という回答を投げたんですが、かろうじてシスオペの方に反応して頂くに留まりました。(DB2 9をいじっているMAGICの技術者はまだ少ないと思うので・・・。いや、はたして、いるのかどうか?)
 まぁ、機会ある度にDB2 9の宣伝・普及活動はしようと思っていますので、半分目的は遂げられたんですが・・・。w

 さて、この「RM互換」という機能は、良く出来ているというか、不思議な機能というか、普通のV10のコーディングであれば作成できないんですが、隠しスイッチ(MAGIC.INIに記載)で入力できるようになります。

[MAGIC_SPECIALS]SpecialRMCompatibleLogic = Y

 「ロジックテーブル」に1つだけ挿入が可能で、挿入すると自動的にデータビューの内容(パラメータ、変数、メインソースやリンクしたテーブルのカラム)が自動的に展開されます。そして、その中に項目更新やズームなどの従来レコードメインというロジックテーブルに記載していた内容を記録できるようになります。下の図は、ブロックとコールタスクを挿入した例です。

v10db2_061.jpg

 しかし、面白いのは画面上とソース上では、記載される場所が違うという点です。
 つまり、RM互換に記載したロジックは、「LogicUnit/Level/@va」lが"R"でかつ、「LogicUnit/Type@val」が"M"の「TaskLogic」(いわゆるレコードメイン)に記載されます。

v10db2_062.jpg

 これに対して、ロジックテーブルのRM互換そのもの(「LogicUnit/Level/@va」lが"M"で、「LogicUnit/Type@val」は存在しない)は、ごくわずかなその属性値が記載されるだけです。その記載の有無が問題となるのではないかと推測します。

v10db2_063.jpg

 さて、ということで、「RM互換のあるプログラムの検索」を行うためにはどうすれば良いか?という問題に戻ります。
 下のSQL文がその答えです。

select c.DATAID from DB2ADMIN.XMLDBTEST c where 
xmlexists('$i/Application//LogicUnit/Level[@val="M"]'
 passing c.DATAXML as "i")

 上記のコマンド中、「Application//LogicUnit」とある、「//」はどういう意味でしょうか?
 これは、任意の階層のタグを現すXPathの表現です。
 MAGICのプログラムのソースが悩ましいのは、タスクの記述が再帰的に記載されることです。
 ルートタスクは、「Application/ProgramsRepository/Programs/Task」ですが、孫タスクは、「Application/ProgramsRepository/Programs/Task/Task/Task」です。でも子供が3人いて、孫は全部で10人かも知れません。
 「LogicUnit」は「Task」の子の「TaskLogic」の下に作成されますが、「Application//LogicUnit」は、全ての任意のタスクの下にある「LogicUnit」を意味します。
 もしかしたら、途中を省略せずに「Application//Task/TaskLogic/LogicUnit」にしたほうが良いのかもしれません。
 「Level[@val="M"]」は、属性値が「M」である「Level」ノードを意味します。この"[" "]"で条件を特定させます。
 ここまでは、おさらいですね。
ところで、「RM互換」タスクが同じプログラム中に複数個存在したとき、それを検索するにはどうすれば良いでしょうか?当然、大きなプログラムであれば、何十というタスクが存在するかも知れません。
 上のSQL文では、プログラム(ドキュメント)のある行(レコード)は返ってきますが、それがどこのタスクにあるのかまでは分かりません。

 実は、これが、私の当初からの悩みだったのです!

 で、ちょっと前までは、検索されたドキュメント(=プログラムソース)をゴリゴリと分析することを考えていました。
 ところが、もっとスマートな方法があったんですね・・・。

(ということで、次回につづく・・・)


DB2 Star Festival 2007


 来週の月曜日に、IBMさん主催のイベントがありますね。(私も参加します!)

 去年の「Viper Night」に参加したのがDB2 9との出会いでしたが、今度のイベントでもまた「新しい出会い」があるといいな・・・と楽しみにしています。



v10db2_064.jpg


 写真(右)は、その案内状です・・・。プリマベーラって・・・?(ぐぐったらありました。(^^;)
 写真(左)に写っているのは、英文の書籍「DB2 9 : pureXML」。(いろいろと参考になりました。斜め読みですが...(^^;)
 いずれも前回の「クラブDB2」(ナイトスクール)で頂いたものです。(いつも感謝してます!)



MAGIC + DB2 で XQuery(1) MAGIC + DB2 で XQuery(1)
Size 4322 - File type text/html
MAGIC + DB2 で XQuery(2) MAGIC + DB2 で XQuery(2)
Size 7147 - File type text/html
MAGIC + DB2 で XQuery(3) MAGIC + DB2 で XQuery(3)
Size 10488 - File type text/html
MAGIC + DB2 で XQuery(4) MAGIC + DB2 で XQuery(4)
Size 14640 - File type text/html
MAGIC + DB2 で XQuery(5) MAGIC + DB2 で XQuery(5)
Size 7541 - File type text/html
MAGIC + DB2 で XQuery(6) MAGIC + DB2 で XQuery(6)
Size 7701 - File type text/html
MAGIC + DB2 で XQuery(7) MAGIC + DB2 で XQuery(7)
Size 12222 - File type text/html
Category(s)
dbMAGIC
DB2
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
スパム防止のためにコード入力が必要です。恐縮ですが下図の英数字を入力して下さい。