XML スキーマに基づく XML 対応 COBOL の生成

コピーブックとスキーマの生成」で示されている形式を使用して cbl2xml で生成したスキーマは、既存の COBOL レコードに基づいており、COBOL レコードから取り込まれた要素名を含んでいます。実際の用途では、このようなスキーマは十分ではありません。サード パーティとの間で XML 情報を交換するには、相手側が認識できる要素名を使用する必要があるからです。多くの業界では業界標準のスキーマが提供されており、その中には業界全体にわたって情報交換に一貫して使用される要素群が含まれています。サード パーティのスキーマに準拠する XML 構文拡張を含む COBOL レコードを生成するには、次の形式で cbl2xml を実行します。

cbl2xml XMLschema 
                 [-c cobolFile]
                 [-d directiveFile]
                 [-prompt | -noprompt]

ここでは例として、ある業界で widgets.xsd という名前の業界標準スキーマが提供されており、このスキーマが製品「Widget」の注文情報を企業間で交換するために使用されている場合を想定します。widgets.xsd の内容を次に示します。

製品「Widgets」用の業界標準 XML スキーマ

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 elementFormDefault="qualified">
	<xsd:element name="Availability" type="xsd:string"/>
	<xsd:element name="Base_Price" type="xsd:string"/>
	<xsd:element name="Base_Price_And_Unit">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="Base_Price"/>
				<xsd:element ref="Unit"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Catalogue_Id" type="xsd:int"/>
	<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>
	<xsd:element name="Company_Id" type="xsd:int"/>
	<xsd:element name="Product_Id" type="xsd:int"/>
	<xsd:element name="Product_Series" type="xsd:string"/>
	<xsd:element name="SKU" type="xsd:string"/>
	<xsd:element name="Sale" type="xsd:string"/>
	<xsd:element name="Unit" type="xsd:string"/>
</xsd:schema>

CBL2XML はこのスキーマを読み取り、次に示すコピーブック (widgets.cpy) を生成します。

widgets.cpy を基に生成された XML 対応の COBOL コピーブック

       01 Widgets identified by "Widgets".
        02 Product-Id PIC X(80) identified by "Product_Id" 
           count in Product-Id-count.
        02 Company-Id PIC X(80) identified by "Company_Id" 
           count in Company-Id-count.
        02 Catalogue-Id PIC X(80) identified by "Catalogue_Id" 
           count in Catalogue-Id-count.
        02 SKU PIC X(80) identified by "SKU" count in SKU-count.
        02 Product-Series PIC X(80) 
            identified by "Product_Series" 
            count in Product-Series-count.
        02 Availability PIC X(80) identified by "Availability" 
           count in Availability-count.
        02 Sale PIC X(80) identified by "Sale" 
           count in Sale-count.
        02 Base-Price-And-Unit 
           identified by "Base_Price_And_Unit" 
           count in Base-Price-And-Unit-count.
         03 Base-Price PIC X(80) 
            identified by "Base_Price" 
            count in Base-Price-count.
         03 Unit PIC X(80) 
            identified by "Unit" 
            count in Unit-count.

コピーブックが生成されたら、Widget に関する情報の送受信に使用する COBOL プログラムに、そのコピーブックをインクルードできます。