「XML スキーマに基づく XML 対応 COBOL の生成」の例では、スキーマ内で検出された要素名を基に COBOL データ レコードが生成されます。ただし、既存の COBOL レコードを、サード パーティのスキーマとの通信専用に使用することも可能です。そのためには、マップ ファイルを使用して、COBOL レコードとスキーマの要素を直接的に関連付ける必要があります。
マップ ファイルを生成するには、次の形式で cbl2xml を実行します。
cbl2xml filename -m mapFile
アプリケーションを XML に対応させ、既存の COBOL レコードおよびスキーマを基に、XML ドキュメントで情報を交換する手順は次のとおりです。
以降の内容では、上記手順の詳細を説明します。
指定したマップ ファイルが存在しない場合には、cbl2xml は COBOL ファイルからデータ構造を取り込んで XML に変換し、その情報をマップ ファイルとして保存します。
次に例を示します。
Product_info.cpy に次のレコードが含まれているものとします。
01 PRODUCT-INFO. 05 PROD-ID PIC 9(6). 05 COMPANY-ID PIC 9(4). 05 CATALOG-NUM PIC 9(8). 05 SKU-REF PIC X(10).
通信に使用する widget.xsd 内の要素定義を次に示します。
<xsd:element name="Widgets"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Product_Id" minOccurs="0"/> <xsd:element ref="Company_Id"/> <xsd:element ref="Catalogue_Id"/> <xsd:element ref="SKU"/> <xsd:element ref="Product_Series" minOccurs="0"/> <xsd:element ref="Availability"/> <xsd:element ref="Sale"/> <xsd:element ref="Base_Price_And_Unit"/> </xsd:sequence> </xsd:complexType> </xsd:element>
cbl2xml が product_info.cpy から生成するマップ ファイルを次に示します。
<?xml version="1.0" encoding="utf-8"?> <xml-cobol-mapping-file xmlns="http://xml.microfocus.com/schema/xml/v1.0/mfxmlmap.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://xml.microfocus.com/schema/xml/v1.0/mfxmlmap.xsd mfxmlmap.xsd"> <xml-cobol-mapping> <cobol-name>product-info</cobol-name> <cobol-count-in>true</cobol-count-in> <xml-name>product-info</xml-name> <xml-type>group</xml-type> <xml-attribute>false</xml-attribute> <xml-namespace></xml-namespace> </xml-cobol-mapping> <xml-cobol-mapping> <cobol-name>product-info.prod-id</cobol-name> <cobol-count-in>true</cobol-count-in> <xml-name>prod-id</xml-name> <xml-type>string</xml-type> <xml-attribute>false</xml-attribute> <xml-namespace></xml-namespace> </xml-cobol-mapping> <xml-cobol-mapping> <cobol-name>product-info.company-id</cobol-name> <cobol-count-in>true</cobol-count-in> <xml-name>company-id</xml-name> <xml-type>string</xml-type> <xml-attribute>false</xml-attribute> <xml-namespace></xml-namespace> </xml-cobol-mapping> <xml-cobol-mapping> <cobol-name>product-info.catalog-num</cobol-name> <cobol-count-in>true</cobol-count-in> <xml-name>catalog-num</xml-name> <xml-type>string</xml-type> <xml-attribute>false</xml-attribute> <xml-namespace></xml-namespace> </xml-cobol-mapping> <xml-cobol-mapping> <cobol-name>product-info.sku-ref</cobol-name> <cobol-count-in>true</cobol-count-in> <xml-name>sku-ref</xml-name> <xml-type>string</xml-type> <xml-attribute>false</xml-attribute> <xml-namespace></xml-namespace> </xml-cobol-mapping> </xml-cobol-mapping-file>
マップ ファイルは XML ドキュメントです。cbl2xml によって生成される各種のタグには、次に示すように COBOL レコードに関する特定の情報が含まれています。
マップ ファイル内のタグ名 | 意味 |
---|---|
<xml-cobol-mapping-file> | このファイルが、COBOL プログラム内に XML 構造を生成するために使用されるマップ ファイルであることを示しています。この要素が、マップ ファイルのルート要素です。 |
<xml-cobol-mapping> | 1 つの COBOL データ項目に関する情報を含んでいます。<cobol-name>、<xml-name>、<xml-type>、<xml-attribute>、および <xml-namespace> の親要素です。 |
<cobol-name> | 1 つの COBOL レコードから取り込まれたデータ項目とその親項目の名前を連結した文字列が含まれています。親項目とデータ項目の名前は、ピリオド (.) で連結されています(例:a-file-record.a-file-item)。 |
<cobol-count-in> | <cobol-name> 内の COBOL 項目に COBOL XML の COUNT IN 句を生成するかどうかが示されています。有効値は「true」または「false」です。デフォルト値は「true」です。この値は、–nocountin コマンド ライン オプションを指定した場合には無視されます。 |
<xml-name> | <cobol-name> 内のレコード名に対応する XML 要素名を指定しています。 |
<xml-type> | COBOL 項目のマッピング先の XML 基本データ型。このパラメーターは、PIC 句を持つ COBOL データ項目にのみ適用されます。 |
<xml-attribute> | <xml-name> 内で指定された要素を、XML スキーマ内で属性として扱うかどうかを示しています。有効値は「true」または「false」です。 |
<xml-namespace> | <xml-name> 内で指定された要素の XML ネームスペースを指定するオプションの要素。集団レベルで指定されたネームスペースは、その集団に属する子要素に自動的に継承されます。 |
マップ ファイルを生成した後に、そのファイルを編集し、スキーマ内の XML 要素名と COBOL レコード内の COBOL 名を関連付けることによって、独自のマッピングを作成できます。具体的には、マップ ファイル内の <xml-name> で指定されている名前を、スキーマ内の要素名に合致するように編集します。この例では、「生成されたマップ ファイル」に示したマップ ファイル内の <xml-name> を次のように変更します。
変更前 | 変更後 |
---|---|
<xml-name>product-info</xml-name> | <xml-name>Widgets</xml-name> |
<xml-name>prod-id</xml-name> | <xml-name>Product_Id</xml-name> |
<xml-name>company-id</xml-name> | <xml-name>Company_Id</xml-name> |
<xml-name>catalog-num</xml-name> | <xml-name>Catalogue_Id</xml-name> |
<xml-name>sku-ref</xml-name> | <xml-name>SKU</xml-name> |
この時点で、編集したマップ ファイルを指定して cbl2xml を再実行します。その結果、cbl2xml はスキーマおよびコピーブックを生成します。生成されたスキーマは、マップ ファイルに反映した既存要素の数にも左右されますが、元のスキーマに似たものになります。このスキーマはデフォルトで生成され、重要性も低いため、必ずしも使用する必要はありません。生成されたコピーブックには、元の COBOL レコードに、マップ ファイル内の情報に基づく適切な XML 構文拡張が付加されています。この例では、cbl2xml は次のコピーブックを生成します。
01 product-info identified by "Widgets" count in widgets-count. 02 prod-id pic 9(6) identified by "Product_Id" count in Product_Id-count. 02 company-id pic 9(4) identified by "Company_Id" count in Company_Id-count. 02 catalog-num pic 9(8) identified by "Catalogue_Id" count in Catalogue_Id-count. 02 sku-ref pic X(10) identified by "SKU" count in SKU-count.
この新しいレコードをコピーし、COBOL プログラム内に貼り付けて、元のレコードを上書きします。これで COBOL レコードは XML 対応になり、widgets.xsd スキーマに準拠する XML ドキュメントをやり取りできるようになります。