COBOL としての XML

前のセクションでは、構造化された COBOL データを XML ドキュメントとしてコーディングする方法について説明しました。ここでは、任意の XML ドキュメントを COBOL 構造として表現する方法について説明します。この場合、COBOL 構造を表現するためには必要ないにもかかわらず XML には含まれている、XML 情報モデルのその他の側面に目を向ける必要があります。

これまでに、XML には要素とテキストが含まれていることを確認しました。これらは XML ドキュメントでデータを表現するための主な手段ですが、XML にはデータの表現や構造化のための方法がほかにもあります。たとえば、次のような XML ドキュメントがあったとします。

<contact type="student">
    <firstname>Betty</firstname>
    <lastname>Smith</lastname>
    <address form="US">
           <streetaddresses>
                  <streetaddress>Knox College</streetaddress>
                  <streetaddress>Campus Box 9999</streetaddress>
                  <streetaddress>2 E. South St.</streetaddress>
           </streetaddresses>
           <city>Galesburg</city>
           <state>IL</state>
           <postalcode zipplus4="N">61401</postalcode>
    </address>
    <email>bs@aol.com</email>
</contact>

この例のドキュメントには、XML で「属性」と呼ばれる新しい種類のデータが含まれています。<contact> 要素タグに「type」というパラメーターのようなものが含まれていることに注目してください。これが属性です。ここでは値が「student」という文字列に設定されています。XML の属性は、要素の内容をコーディングするためのもう 1 つの方法ですが、要素の内容となるテキストそのものには影響しません。つまり、属性は、要素に関連付けられた「帯域外」のデータです。標準の COBOL には、属性に対応する概念はありません。COBOL では、データ項目に関連付けられたすべてのデータが COBOL レコードの内容に含まれます。したがって、XML ドキュメントのすべての内容をキャプチャするには、属性をキャプチャして格納するための方法が必要になります。

その方法となるのが、重要な XML ツールの 1 つである外部 XSLT スタイルシートです。仮に、XSLT スタイルシートで XML ドキュメントを必要な形に自由に変換できるとしたら(実際にできます)、元のドキュメントの属性を、COBOL に直接対応するものに変換する必要があります。それは、XML ではテキスト要素として表現されるデータ項目です。

先ほどの例のドキュメントを外部 XSLT スタイルシートで変換すると、次のようになります。

<contact>
    <email>bs@aol.com</email>
    <attr-type>student</attr-type>
       <firstname>Betty</firstname>
       <lastname>Smith</lastname>
       <address>
              <attr-form>US</attr-form>
              <city>Galesburg</city>
              <state>IL</state>
              <postalcodegroup>
                     <attr-zipplus4>N</attr-zipplus4>
                     <postalcode>61401</postalcode>
              </postalcodegroup>
    <streetaddresslines>3</streetaddresslines>
              <streetaddresses>
                     <streetaddress>Knox College</streetaddress>
                     <streetaddress>Campus Box 9999</streetaddress>
                     <streetaddress>2 E. South St.</streetaddress>
               </streetaddresses>
       </address>
</contact>

いくつかの変更が行われています。まず、属性が、「attr-」というプレフィックスが付いた特殊な名前を持つ要素に変換されています。また、<streetaddresslines> という新しい要素が追加され、この要素に<streetaddress> 要素の数が含まれています。<postalcode>については、<postalcode> の実際の値と新しい属性をラップする新しい要素が追加されています。これらの変更はすべて、単純な XSLT スタイルシートを使用して簡単に行うことができます。これにより、COBOL に直接対応するドキュメントを作成できます。

01 contact.
   10 email pic x(20).
   10 attr-type pic x(7).
   10 firstname pic x(10).
   10 lastname pic x(10).
   10 address.
      20 city pic x(20).
      20 state pic x(2).
      20 postalcodegroup.
         30 attr-zipplus4 pic x.
         30 postalcode pic 9(5).
      20 attr-form pic xx.
      20 streetaddresslines pic 9.
      20 streetaddresses.
         30 streetaddress occurs 1 to 9 times 
               depending on streetaddresslines pic x(20).