XML としての COBOL

XML とはどのようなものでしょうか。まず、それは COBOL データのテキスト エンコーディングであると仮定しましょう (必ずしも正確ではありませんが、現時点ではこれで十分です)。作業場所節で次の COBOL 定義を記述しているとします。
01 contact.
   10 firstname pic x(10) value "John".
   10 lastname pic x(10) value "Doe".
   10 address.
      20 streetaddress pic x(20) value "1234 Elm Street".
      20 city pic x(20) value "Smallville".
      20 state pic x(2) value "TX".
      20 postalcode pic 9(5) value "78759".
   10 email pic x(20) value "jd@aol.com".

この情報をテキスト ファイルに単純に書き込んだ場合はどのようになるでしょうか。これは、次のようになります。

John Doe 1234 Elm Street Smallville TX78759jd@aol.com

ここにすべての「データ」があることはわかりますが、「情報」はありません。これを受け取り、またはこのファイルを読み取り、その意味を把握しようとした場合は、このデータについてより詳しく知っている必要があります。特に、その構造やフィールドのサイズを知っている必要があります。また、各フィールドの命名方法を知っていると、その内容を理解するうえで役に立つでしょう。

これは新しい問題ではありません。これは、COBOL プログラマー (およびその他のアプリケーション プログラマー) がコンピューター時代の初めから場当たり的に対処しなければならなかった問題です。しかし現在では、XML によって、一般的に理解しやすい方法ですべての情報をエンコードできます。

この情報が XML ドキュメントでどのように表示されるかを次に示します。

<contact>
   <firstname>John</firstname>
   <lastname>Doe</lastname>
   <address>
      <streetaddress>1234 Elm Street</streetaddress>
      <city>Smallville</city>
      <state>TX</state>
      <postalcode>78759</postalcode>
   </address>
   <email>jd@aol.com</email>
</contact>

XML では、COBOL の集団レベルの項目は、「要素」と呼ばれるものでコーディングされています。要素には名前があり、テキストおよびその他の要素が含まれています。ご覧のように、XML 要素は COBOL データ項目に対応しています。この場合、01 レベルの項目「contact」は <contact> 要素となり、開始タグ (「<contact>」) と終了タグ (「</contact>」) でコーディングされ、2 つのタグの間にあるすべてのものがその「内容」を表します。この場合、<contact> 要素は、その内容として、<firstname><lastname><address>、および <email> 要素を含んでいます。これは、「contact」についての COBOL のデータ部の宣言に正確に対応しています。同様に、10 レベルの集団項目「address」は <address> 要素となり、<streetaddress><city><state>、および <postalcode> 要素で構成されています。COBOL の各基本項目は、テキストの内容のみを使用してコーディングされています。XML 形式では、このデータの元の COBOL 出力形式に含まれている意味情報の多くがなくなっていることに注意してください。さらに、COBOL の基本項目にある余分な後続空白文字も削除されています。つまり、このレコードの XML バージョンには、データ自体とデータ構造の両方が含まれています。

では、COBOL データが次のようになっていた場合はどうでしょうか。

01 contact.
   10 email pic x(20)
   10 firstname pic x(10).
   10 lastname pic x(10).
   10 address.
      20 city pic x(20).
      20 state pic x(2).
      20 postalcode pic 9(5).
      20 streetaddresslines pic 9.
      20 streetaddresses.
         30 streetaddresses occurs 1 to 9 times
             depending on streetaddresslines pic x(20).

この例では 2 つの変更点があります。つまり、初期値が削除されている点と、必要に応じて最大 9 個の「streetaddress」項目が存在する点です。これは、実際のアプリケーションで必要とされるものにより近い記述です。アプリケーション コードで手続き部から各項目の値が設定されると、結果の XML コーディングは次のようになります。

<contact>
    <email>bs@aol.com</email>
    <firstname>Betty</firstname>
    <lastname>Smith</lastname>
    <address>
          <city>Galesburg</city>
          <state>IL</state>
          <postalcode>61401</postalcode>
          <streetaddresslines>3</streetaddresslines>
          <streetaddresses>
           <streetaddress>Knox College</streetaddress>
           <streetaddress>Campus Box 9999</streetaddress>
           <streetaddress>2 E. South St.</streetaddress>
          </streetaddresses>
    </address>
</contact>

繰り返し項目「streetaddress」が 3 個の <streetaddress> 要素になっている点に注目してください。この例では、COBOL が XML プログラミングの言語として機能し、データ構造 (スキーマ) とデータ自体の両方を提供しています。

これらの例は非常に単純ですが、COBOL データ モデルと XML 情報モデルの互換性がどれほど強力となり得るかを示しています。いかに複雑な COBOL 構造でも、簡単な XML 表現となります。COBOL データ定義では指定できても XML としてコーディングできないものもありますが、XML 用にアプリケーションをプログラミングする場合にはそれらを簡単に回避できます。