2.3.1 Interface要素インタフェースの定義

Interface要素は,COBOLプログラムとXMLとを対応づけるインタフェースを宣言する要素です。Interface要素を定義すると,XMLドキュメントにアクセスするためのCOBOL副プログラム(XMLアクセスルーチン)や登録集原文(XMLアクセス用データ定義)などのインタフェースが対応して生成されます。

[図データ]

Interface要素は,ドキュメントのルート(最上位の要素)としてDDL中に1回だけ記述できます。また,子要素として一つ以上のBaseElement要素を持つ必要があります。

形式
<Interface interfaceName="インタフェース名"〔accessInfo="yes|no"〕>
BaseElement要素
</Interface>
<この項の構成>
(1) interfaceName属性
(2) accessInfo属性

(1) interfaceName属性

形式
interfaceName="インタフェース名"
機能
Interface要素に対応するインタフェース名を指定します。インタフェース名は,Interface要素に対応して生成されるXMLアクセスルーチンのプログラム名の一部に使用されます。XMLアクセスルーチンの名称については,「4.2.1 XMLアクセスルーチンの名称形式」を参照してください。
規則
  • インタフェース名称は,COBOLプログラム名に指定できる次の文字で構成する必要があります。
    英文字(A~Z,a~z),数字(0~9),ハイフン(-),下線(_),#,¥,@,日本語文字
  • インタフェース名は,ほかのインタフェース名と重複しない一意な名称を指定する必要があります。
  • インタフェース名と,BaseElement要素のcobName属性(省略時はelemName属性)に指定した名称の長さの合計は,19バイト以下の文字列で指定する必要があります。19バイトを超える名称を指定した場合,動作は保証しません。
指定例
インタフェース「EXAMPLE」を宣言します。
(DTDの例)

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
 <!ELEMENT table (person)*>
 <!ELEMENT person (name, address)>
 <!ELEMENT name (#PCDATA)>
 <!ELEMENT address (#PCDATA)>
]>
<table/>

(DDFの例)

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="person">
 <Group elemName="person">
  <Item elemName="name" cobName="FULLNAME"
        type="alphanumeric" size="30"/>
  <Item elemName="address" cobName="FULLADDRESS"
        type="alphanumeric" size="120"/>
 </Group>
</BaseElement>
</Interface>

(生成されるCOBOLデータ項目の例)

01 person.
02 FULLNAME PIC X(30).
02 FULLADDRESS PIC X(120).

(XMLアクセスルーチンの呼び出し例)

 :
CALL 'CBLXML-OP-EXAMPLE'
   USING XML-FILE-NAME-POINTER XML-FILE-LENGTH
         XML-FILE-MODE XML-POINTER
   RETURNING CBLXML-RETURN-CODE.
 :

(2) accessInfo属性

形式
accessInfo="yes|no"
機能
Interface要素の下位の要素で入出力データ情報定義機能を使用するかどうか指定します。入出力データ情報定義機能については,「3. 入出力データ情報定義機能」を参照してください。
規則
  • accessInfo属性の指定を省略した場合は,"no"が仮定されます。
  • Interface要素とBaseElement要素の両方にaccessInfo属性を指定した場合,BaseElement要素のaccessInfo属性値が優先されます。
  • accessInfo属性に"yes""no"以外の値を指定した場合,COBOL原始プログラムの生成時にエラーとなります。
  • accessInfo属性とemptyValue属性を同時に指定した場合,accessInfo属性の指定が優先されます。
指定例
(DTDの例)

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
 <!ELEMENT root (item01, item02)>
 <!ELEMENT item01  (#PCDATA)>
 <!ELEMENT item02  (itema, itemb)*>
 <!ELEMENT itema   (#PCDATA)>
 <!ELEMENT itemb   (#PCDATA)>
]>
<root/>

(DDFの例)

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE"
  accessInfo="yes">
 <BaseElement elemName="root">
   <Group cobName="root">
     <Item elemName="item01" type="alphanumeric"
           size="10" />
     <Array max="10">
       <Group cobName="item02">
         <Item elemName="itema"
               type="alphanumeric" size="10" />
         <Item elemName="itemb"
               type="alphanumeric" size="10" />
       </Group>
     </Array>
   </Group>
 </BaseElement>
</Interface>

(生成されるCOBOLデータ項目)

01 root-BASE.
 02 root.
  03 item01 PIC X(10).
  03 item02 OCCURS 10.
   04 itema PIC X(10).
   04 itemb PIC X(10).
* Access Information
 02 root-GROUP.
  03 item01-FLG PIC 1(32) USAGE BIT.
  03 item01-LEN PIC 9(9) COMP.
  03 item02-TOTAL PIC 9(9) COMP.
  03 item02-COUNT PIC 9(9) COMP.
  03 item02-GROUP OCCURS 10.
   04 itema-FLG PIC 1(32) USAGE BIT.
   04 itema-LEN PIC 9(9) COMP.
   04 itemb-FLG PIC 1(32) USAGE BIT.
   04 itemb-LEN PIC 9(9) COMP.