Generating XML-enhanced COBOL from an XML Schema

The schema produced by cbl2xml using the format described in Generating a Copybook and Schema conforms to your existing COBOL record, and contains element names derived from your COBOL record. In practical application, a schema of this sort is limited because to exchange XML information with another party, you must use element names recognized by the other party. For example, many industries publish industry-standard schemas, which contain a specific set of elements used to exchange information throughout the industry. To generate COBOL records that contain XML syntax extensions that conform to a third-party schema, use the following cbl2xml format:

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

In this example, we use a fictional industry-standard schema named widgets.xsd. This schema enables companies to exchange ordering information for the Widget product. The contents of widgets.xsd is as follows:

Industry-standard XML schema for "widgets"

<?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 (Windows) or cbl2xml (UNIX) reads this schema and generates a copybook, widgets.cpy, as follows:

XML-enabled COBOL generated from widgets.cpy

       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.

You can then include this copybook in a COBOL program you want to use to send and receive information about widgets.