オープン系とりわけインターネットの世界の開発ではデータ交換にXMLが
よく使われるようになってきている。
IBM iでも他社とのデータ交換には今後はXMLが主流になってくるであろう。
(実際にはJSONというXMLの拡張が主流になってきている)
またWebサービスでも提供されるデータ形式はほぼXMLが中心である。
IBM iでもXMLを扱うことが必須となってきておりXMLを扱うRPGの演算命令として
XML-INTOがVer5.4から追加されている。
Ver5.4 でも組込み関数 %XML も使うことができる。
ところがまだ XML-INTO命令はRPGプログラマーでは馴染みがない。
XML-INTOはIBM RPG解説書やプログラマーの手引きでも
いくつも例を使って解説されていて、また他のサイトでも
英文の解説を直訳しただけの解説が紹介されているが
いずれもわかりやすい説明とはいえない。
IBM特約店やIBMでの関連サイトでもただ英文の記事を直訳しているだけであり
しかも原文の説明は細かい話に終始していてこれも決してわかりやすい説明とはいえない。
本質を語っているところがどこにもなくIBM解説書もサンプル・ソースの説明は
私たち日本人にはなかなか理解できないものである。
そこでXML-INTOを初めて日本人として解説することにする。
このシリーズではXMLとちは何かに始まってXML-INTOの利用方法について
例やサンブルを交えてわかりやすく説明していきたい。
■XML-INTO とは?
XML-INTO という演算は簡単に言えばXML文をデータ構造(DS)に
分解する演算である。つまりXMLのタグの値をデータ構造にマップ(照射)させるのである。
IBM解説書に次のような図で説明されているとおりである。
XML-INTOを説明する前にまず今回はXMLとパーサーについて
基本的な知識を説明する。
■XMLとは
XMLにまだ馴染みのない方のためにXMLを説明すると
XMLとはタグで構成されたデータ・ベース表記である。
例えば 商品マスター(SHOHIN)のDDSソースは
0001.00 A********************************************** 0002.00 A* SHOHIN : 商品マスターファイル * 0003.00 A********************************************** 0004.00 A UNIQUE 0005.00 A R SHOHINR TEXT(' 商品マスターレコード ') 0006.00 A* 0007.00 A SHCODE 10A COLHDG(' 商品コード ') 0008.00 A SHNAME 24O COLHDG(' 商品名 ') 0009.00 A SHTANK 7S 0 COLHDG(' 単価 ') 0010.00 A EDTCDE(1) 0011.00 A SHSCOD 4A COLHDG(' 品種コード ') 0012.00 A* 0013.00 A K SHCODE
であり実際のデータ・ベースの内容は
商品コード 商品名 単価 品種コード
NV-BS30S 目次ビデオ 165,000 0002
NV-BS50S ビデオ画王 200,000 0002
NV-CF2 薄型テレビ 98,000 0003
NV-CF81 更新テスト 58,000 0004
NV-CF9 漢字テスト 19,000 0002
:
であるがこれをXMLで表現すると次のようになる。
<?xml version="1.0" encoding="Shift_JIS" ?> <RESULT FILE="QTRFIL/SHOHIN(*FIRST)"> <RECORD> <SHCODE>NV-BS30S </SHCODE> <SHNAME> 目次ビデオ </SHNAME> <SHTANK>165000</SHTANK> <SHSCOD>0002</SHSCOD> </RECORD> <RECORD> <SHCODE>NV-BS50S </SHCODE> <SHNAME> ビデオ画王 </SHNAME> <SHTANK>200000</SHTANK> <SHSCOD>0002</SHSCOD> </RECORD> : : </RESULT>
この例では1レコードを <RECORD> …. </RECORD> として表して
フィールドを <FLDNAM>データ</FLDNAM> のように表記している。
つまりデータとDDSソースが混在しているようなものである。
XMLはストリーム・ファイルなのでIBM iでは通常はIFSに配置されることになる。
■バーサーとは
XMLを扱うことになるとXMLパーサーとか単にパーサーとかいう用語が出てくるが
パーサーとはXMLのタグをデータに分解することを言う。
XMLの説明で説明もなしでいきなりパーサーという用語を使って説明する解説者が多いので
XMLの説明は初めての人は大抵わからなくなってしまう。
他の開発言語ではXMLパーサーを開発するのは結構というか
かなり大変な労力を必要とするがIBM iの世界では
XMLがキーつきツリー構造のデータ・ベースであることと
本質的に変わりがないことを理解すれば
大したことではないはずだ。
読者はパーサーとはXMLを分解する内部的なプログラムの機能として
理解しておれば十分で内部で具体的にどのような処理をしているのかを
知る必要はない。
IBM iでは前述の例でおわかりのようにXMLとは単なるデータ・ベースなのである。
しかし今回のテーマはRPGでのXML-INTOの利用方法なので
XMLのデータ・ベース化は別の機会に紹介することとする。
XMLを扱っているとIBM iのエラー・メッセージにも「パーサーが…」という用語が
頻出する。パーサーとはXMLの分解と理解しておけばよい。
【補足】
どのブラウザもXMLパーサーが搭載されていてJavaScriptでXMLを扱うことができるようになっている。
ブラウザ上にXMLを表示すると単に表示されるのではなくそこで既にパーサーによる解析が行われている。
従って文法上誤りのあるXMLをブラウザに送るとエラーになってしまうことも覚えておこう。