XML 文書の処理
XML-INTO または XML-SAX ステートメントを使用して RPG プログラムから XML 文書を処理することができます。このステートメントは、高速 XML パーサーへの RPG 言語インターフェースです。RPG で現在使用されているパーサーは、多数の適格性エラーに対して XML 文書を検査しますが、非有効化パーサーです。 XML パーサーについて詳しくは、「ILE COBOL プログラマーの手引き」の付録『XML 参照資料』にある『XML 適合性』節を参照してください。
XML 文書は、文字でも UCS-2 RPG 変数でもよく、または統合ファイル・システムのファイル内にあってもかまいません。
パーサーは、SAX パーサーです。SAX パーサーは、XML 文書を文字単位で読み込んで動作します。要素名、または属性値などの XML 文書の断片を見つけたときはいつでも、パーサーの発呼者が提供する処理手順に答えて、見つけた XML の断片に関する情報を渡します。例えば、パーサーが XML 要素名を見つけた場合、パーサーは、"イベント" が "start element" イベントであることを示す処理手順を呼び出し、エレメントの名前を渡します。
処理手順は、情報を処理し、別のイベントで処理手順を呼び出すのに十分な情報を持つまで XML 文書を読み込み続けるパーサーに戻ります。このプロセスは、XML 文書全体が構文解析されるか、処理手順が構文解析を終了する必要があることを示すまで、繰り返されます。
<email type="text">
<sendto>JohnDoe@there</sendto>
</email>
| 構文解析されたテキスト | イベント | イベント・データ |
|---|---|---|
| start document | ||
| start element | "email" | |
| type= | attribute name | "type" |
| "text" | attribute value | "text" |
| >whitespace | element content | the whitespace |
| <sendto> | start element | "sendto" |
| JohnDoe@there | element content | "JohnDoe@there" |
| </sendto> | end element | "sendto" |
| whitespace | element content | the whitespace |
| </email> | end element | "email" |
| end document |
XML-SAX および XML-INTO 命令コードでは、XML パーサーを使用することができます。
- XML-SAX 命令では、イベント処理手順を指定し、パーサーが生成するすべてのイベントを処理できます。 XML 文書に何が含まれているかを事前に知らない場合は、これが便利です。
例えば、XML 文書が type という名前の XML 属性を含むことが分かっていて、この属性の値を知りたい場合は、処理手順は "attribute name" イベントが "type" の値を持つまで待つことができます。 次回呼び出されるハンドラーは、必要なデータ (上記の例では "text") を持つ "attribute value" イベントである必要があります。
- XML-INTO 命令では、XML 文書の内容を RPG 変数に直接読み込むことができます。XML 文書の形式が分かっており、文書の XML 要素の名前が RPG 変数に付けた名前と同じになることが分かっている場合は、これが便利です。
例えば、XML 文書が常に上記の文書の形式を持っていることが分かっている場合は、 名前 "email"、およびサブフィールド "type" および "sendto" を持つ RPG データ構造を定義することができます。次に、XML-INTO 命令を使用して 、XML 文書をデータ構造に直接読み込むことができます。命令が完了したとき、 "type" サブフィールドは値 "text" を持ち、"sendto" サブフィールドは 値 "JohnDoe@there" を持ちます。
- XML-INTO 命令では、繰り返される XML エレメントの不明な数の値を取得することもできます。ユーザーは、処理手順が呼び出されるたびに要素の固定数の値を受け取る処理手順を提供します。XML 文書が一連の同一の XML 要素を含むことが分かっており、それがいくつになるか事前に分からない場合は、これが便利です。
XML データは、常にテキスト形式でパーサーによって戻されます。データが数値データ、または日付データなどの他のデータ・タイプを表すことが分かっている場合、XML-SAX 処理手順は、%INT または %DATE などの変換関数を使用してデータを変換する必要があります。
XML-INTO 命令は、文字データをレシーバーとして指定してフィールドまたはサブフィールドのタイプに自動的に変換します。
'opt1=val1 opt2=val2'
- doc
- "doc" オプションは、ユーザーが命令に提供した XML 文書が、文書を含む統合ファイル・システムのファイルの名前なのか、文書自身であるのかを指定します。デフォルトは、ユーザーが実際の XML 文書を提供したことを示す "doc=string" です。オプション "doc=file" は、ユーザーが実際の XML 文書を含むファイルの名前を提供したことを示すために使用します。
- ccsid
- "ccsid" オプションは、XML パーサーがデータを戻す CCSID を指定します。XML-SAX 命令の場合、パーサーがサポートする任意の CCSID を指定できます。XML-INTO 命令の場合、構文解析が 1 バイト文字または UCS-2 のいずれで実行されるのかのみを制御できます。 このそれぞれの命令の "ccsid" オプションについて詳しくは、「ILE RPG 解説書」の情報を参照してください。