COBOL2002 XML連携機能ガイド

[目次][用語][索引][前へ][次へ]

7.2.4 選択要素へのアクセス

XMLでは,選択要素(複数の項目のどれかが存在する要素)が定義できます。例えば,次のようなDTDが定義されたXMLドキュメントでは,aaa要素の下位にxxx,yyy,zzzのどれかの要素が存在する可能性があります。

(選択要素を含むDTDの例)
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (aaa)*>
  <!ELEMENT aaa (xxx | yyy | zzz)>
  <!ELEMENT xxx (#PCDATA)>
  <!ELEMENT yyy (#PCDATA)>
  <!ELEMENT zzz (#PCDATA)>
]>
<table/>

選択要素にアクセスする場合,DDFは次のようにすべての要素にアクセスできるように記述する必要があります。

(選択要素にアクセスするDDFの例)
  • accessInfo属性の指定がない場合
<?xml version="1.0" encoding="Shift_JIS"?>
 <Interface interfaceName="EXAMPLE">
 <BaseElement elemName="aaa">
  <Group cobName="AAA">
   <Item elemName="xxx" type="alphanumeric"
         size="30"/>
   <Item elemName="yyy" type="alphanumeric"
         size="30"/>
   <Item elemName="zzz" type="alphanumeric"
         size="30"/>
  </Group>
 </BaseElement>
</Interface>
 
  • accessInfo属性の指定がある場合
<?xml version="1.0" encoding="Shift_JIS"?>
 <Interface interfaceName="EXAMPLE" accessInfo="yes">
 <BaseElement elemName="aaa">
  <Group cobName="AAA">
   <Item elemName="xxx" type="alphanumeric"
         size="30"/>
   <Item elemName="yyy" type="alphanumeric"
         size="30"/>
   <Item elemName="zzz" type="alphanumeric"
         size="30"/>
  </Group>
 </BaseElement>
</Interface>

また,選択要素は,XML対応COBOLプログラムでは次のように扱われます。

<この項の構成>
(1) 選択要素の入力処理
(2) 選択要素の出力処理

(1) 選択要素の入力処理

選択要素からの入力処理で,選択された要素以外の要素は,対応するCOBOLデータ項目に空白が設定されます。

入出力データ情報定義機能を使用する場合,値がある選択要素に対応するCOBOLデータ項目のアクセス情報フラグのCBLXML-FLAG-MISSING,CBLXML-FLAG-EMPTY,CBLXML-FLAG-INVAL-CHAR,およびCBLXML-FLAG-OVERFLOWにすべて0が設定されます。それ以外の選択要素に対応するCOBOLデータ項目のアクセス情報フラグには,CBLXML-FLAG-MISSINGが設定されます。

(2) 選択要素の出力処理

選択要素への出力処理では,出力したい要素に対応するCOBOLデータ項目だけにデータを格納してください。二つ以上の要素にデータを出力した場合や,選択要素のすべてに空白を格納した場合,XMLアクセスルーチンからエラーのステータスが返されます。

入出力データ情報定義機能を使用する場合,出力したい要素に対応するCOBOLデータ項目のアクセス情報フラグだけにCBLXML-FLAG-OKを設定し,その他のアクセス情報フラグにはCBLXML-FLAG-MISSINGを設定しなければなりません。選択要素中の二つ以上のCOBOLデータ項目のアクセス情報フラグにCBLXML-FLAG-OKを設定した場合,CBLXML-WR-Interface-BaseElementアクセスルーチンの戻り値にエラーのステータスが返されます。また,選択要素に対応するすべてのCOBOLデータ項目に対応するアクセス情報フラグにCBLXML-FLAG-MISSINGを設定した場合も,CBLXML-WR-Interface-BaseElementアクセスルーチンの戻り値にエラーのステータスが返されます。