次のトピックについて説明します。
ダイナミック変数を使用する、Natural ベースの XML パーサー。
以下の機能があります。
Natural データ構造の DTD 定義への変換
Natural データ構造を XML ドキュメントとして保存するための COMPRESS ステートメントの生成
Natural ベースのパーサーに対するコールバックの生成
Natural XML ツールキットでは、Natural に追加の XML 機能を提供し、Natural アプリケーションと XML の統合を強化します。
Natural XML ツールキットは、Natural プログラムの集合で構成されています。 XML ツールキットプログラムを顧客のアプリケーションに統合すると、XML データへのアクセスを可能にしたり、XML フォーマットのデータを Natural から提供したりできます。
Natural XML ツールキットでは、次の機能を呼び出します。
XML ツールキットの機能
Natural データ定義と DTD の間のマッピング
XML トークンから NAT データへの変換
Natural データ構造を作成した後、XML ドキュメントを解析してそのデータ構造に保存する必要があります。 指定したデータを Natural データ構造に保存できる Natural の実装が生成されます。
NAT データから XML ドキュメントへの変換(シリアライズ)
シリアライズとは、Natural データ構造に保存されたデータを取得し、指定された記述に従って XML ドキュメントを作成する処理のことです。
XML ツールキット機能へのユーザーインターフェイスは、Natural ダイアログによって実装されます。 DTD はワークファイルとしてアクセスされ、生成された Natural オブジェクトは Natural システムファイルに直接保存されます。
このマッピングは、Natural データ構造を XML タグと結合するための最初の手順であり、Natural データを XML タグとして表現するために必要となります。 以下の例は、Natural と DTD の間のマッピング、およびいくつかの明確な違いを示しています。
Press ESC to enter command mode Mem: EMPL Lib: SYSEXXT Type: PARAMETER Bytes: 1072 Line: 0 of: 26 C T Comment * *** Top of Data Area *** 1 EMPLOYEE 2 ATTRIBUTES_OF_EMPLOYEE 3 PERSONNEL-ID A 8 * 2 FULL-NAME 3 FIRST-NAME A 20 3 NAME A 20 * 2 FULL-ADDRESS 3 C@ADDRESS-LINE I 4 3 ADDRESS-LINE A 20 (1:6) 3 CITY A 20 3 ZIP A 20 3 COUNTRY A 3 * 2 TELEPHONE 3 AREA-CODE A 6 3 PHONE A 15 |
生成された DTD
<!ELEMENT EMPLOYEE (PERSONNEL-ID, FULL-NAME, FULL-ADDRESS, TELEPHONE, INCOME* )> <!ELEMENT PERSONNEL-ID (#PCDATA ) > <!ELEMENT FULL-NAME (FIRST-NAME, NAME )> <!ELEMENT FIRST-NAME (#PCDATA )> <!ELEMENT NAME (#PCDATA )> <!ELEMENT FULL-ADDRESS (ADDRESS-LINE*, CITY, ZIP, COUNTRY )> <!ELEMENT ADDRESS-LINE (#PCDATA )> <!ELEMENT CITY (#PCDATA )> <!ELEMENT ZIP (#PCDATA )> <!ELEMENT COUNTRY (#PCDATA )> ...
生成された DTD は、後で XML ドキュメントへのシリアライズに使用されます(下記参照)。
Natural プログラムの実行中、DEFINE DATA ステートメントに定義されたデータの内容は、"実際の" 内容で埋められます。 この内容は、シリアライズ中に XML 形式でダイナミック変数に書き込まれます。このとき、以前に生成された DTD が入力として使用されます。
データをシリアライズするプログラムは、XML ツールキットによって生成されます。
<?xml version="1.0" encoding="iso-8859-1" ?> <EMPLOYEE PERSONNEL-ID="30016509"> <FULL-NAME> <FIRST-NAME>ELSPETH</FIRST-NAME> <NAME>TROWBRIDGE</NAME> </FULL-NAME> <FULL-ADDRESS> <ADDRESS-LINE>91 BACK LANE</ADDRESS-LINE> <ADDRESS-LINE>BILSTON</ADDRESS-LINE> <ADDRESS-LINE>STAFFORDSHIRE</ADDRESS-LINE> <CITY>BILSTON</CITY> <ZIP>ST2 3KA</ZIP> <COUNTRY>UK</COUNTRY> </FULL-ADDRESS> <TELEPHONE> <PHONE>863322</PHONE> <AREA-CODE>0602</AREA-CODE> </TELEPHONE> ...
DTD の Natural データ構造へのマッピングにも、違いがあります。 DTD では XML ドキュメントに何人分のレコードが含まれるかを指定しないため、ツールキットでは、最大 "v" 人分のレコードが含まれることを想定します。 アプリケーションプログラマは、正確な数を把握すれば、この数に合わせてデータ構造を修正できます。 同じような制限がデータ長にも存在します。 DTD では、各人のレコードにデータ長に関する情報が含まれていません。 このため、ツールキットで、データ構造に長さ 253(現在の最大長)のフィールドを作成します。
* DTD E:\SAG\nat\4.2\fnat\SYSEXXT\RES\empl.dtd COMPRESS &1& '<EMPLOYEE' ' PERSONNEL-ID="'EMPLOYEE.PERSONNEL-ID "' '>' INTO &1& LEAVING NO /* now the children COMPRESS &1& '<FULL-NAME' '>' INTO &1& LEAVING NO /* now the children COMPRESS &1& '<FIRST-NAME' '>' EMPLOYEE.FIRST-NAME '</FIRST-NAME>' INTO &1& LEAVING NO COMPRESS &1& '<NAME' '>' EMPLOYEE.NAME '</NAME>' INTO &1& LEAVING NO /* COMPRESS &1& '</FULL-NAME>' INTO &1& LEAVING NO COMPRESS &1& '<FULL-ADDRESS' '>' INTO &1& LEAVING NO /* now the children FOR &2& = 1 TO EMPLOYEE.C@ADDRESS-LINE COMPRESS &1& '<ADDRESS-LINE' '>' EMPLOYEE.ADDRESS-LINE(&2&) '</ADDRESS-LINE>' INTO &1& LEAVING NO END-FOR ...
* DTD E:\SAG\nat\4.2\fnat\SYSEXXT\RES\empl.dtd DECIDE ON FIRST &1& VALUE 'EMPLOYEE' RESET INITIAL EMPLOYEE VALUE 'EMPLOYEE/@PERSONNEL-ID' /* #REQUIRED EMPLOYEE.PERSONNEL-ID := &3& VALUE 'EMPLOYEE/FULL-NAME' IGNORE VALUE 'EMPLOYEE/FULL-NAME/FIRST-NAME' IGNORE VALUE 'EMPLOYEE/FULL-NAME/FIRST-NAME/$' EMPLOYEE.FIRST-NAME := &3& VALUE 'EMPLOYEE/FULL-NAME/NAME' IGNORE VALUE 'EMPLOYEE/FULL-NAME/NAME/$' EMPLOYEE.NAME := &3& ...
XML ツールキットによって、Natural で XML がより高度にサポートされるようになりました。 XML ツールキットは、最初にリリースされた後、拡張される可能性があります。 ただし、主な目標は、将来のリリースにおいて Natural の強力な言語の一部として XML 機能を実装することです。
XML ツールキットを使用する場合は、次の制限を考慮する必要があります。
データ構造のデータフィールドおよびグループの数が約 700 を超えた場合は、次のメッセージが表示されます。
Input Structure too big
データ構造をより小さいセクションに分割します。