COBOL2002 XML連携機能ガイド
Group要素は,子要素を持つXML要素をCOBOLの集団項目に対応づける要素です。Group要素を使うと,DTDの階層構造に沿ったCOBOLデータ項目を作成できます。また,DTDの階層構造とは無関係にCOBOLの集団項目を作成することもできます。
Group要素は,子要素としてGroup要素,Array要素,Item要素,またはAttrItem要素のどれかを一つ以上持ちます。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE group1 [ <!ELEMENT group1 (group21, group22)> <!ELEMENT group21 (item01, item02)> <!ELEMENT group22 (item01, item02)> <!ELEMENT item01 (#PCDATA)> <!ELEMENT item02 (#PCDATA)> ]> <group1/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="group1"> <Group elemName="group1"> <Group elemName="group21"> <Item elemName="item01" type="alphanumeric" size="50"/> <Item elemName="item02" type="alphanumeric" size="50"/> </Group> <Group elemName="group22"> <Item elemName="item01" type="alphanumeric" size="50"/> <Item elemName="item02" type="alphanumeric" size="50"/> </Group> </Group> </BaseElement> </Interface>
01 group1. 02 group21. 03 item01 PIC X(50). 03 item02 PIC X(50). 02 group22. 03 item01 PIC X(50). 03 item02 PIC X(50).
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE table [ <!ELEMENT table (group21 , group22)> <!ELEMENT group21 (item01, item02)> <!ELEMENT group22 (item01, item02)> <!ELEMENT item01 (#PCDATA)> <!ELEMENT item02 (#PCDATA)> ]> <table/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="table"> <Group elemName="table" cobName="GROUP1"> <Group elemName="group21"> <Item elemName="item01" type="alphanumeric" size="50"/> <Item elemName="item02" type="alphanumeric" size="50"/> </Group> <Group elemName="group22"> <Item elemName="item01" type="alphanumeric" size="50"/> <Item elemName="item02" type="alphanumeric" size="50"/> </Group> </Group> </BaseElement> </Interface>
01 GROUP1. 02 group21. 03 item01 PIC X(50). 03 item02 PIC X(50). 02 group22. 03 item01 PIC X(50). 03 item02 PIC X(50).
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE table [ <!ELEMENT table (group21 , group22)> <!ELEMENT group21 (item01, item02)> <!ELEMENT group22 (item03, item04)> <!ELEMENT item01 (#PCDATA)> <!ELEMENT item02 (#PCDATA)> <!ELEMENT item03 (#PCDATA)> <!ELEMENT item04 (#PCDATA)> ]> <table/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="table"> <Group cobName="group22"> <Item elemName="item03" type="alphanumeric" size="50"/> <Item elemName="item04" type="alphanumeric" size="50"/> </Group> </BaseElement> </Interface>
01 group22. 02 item03 PIC X(50). 02 item04 PIC X(50).
nameOfFlagVar属性の指定例については,「3.2.1(3) nameOfFlagVar属性の指定例」を参照してください。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE root [ <!ELEMENT root (item01, item02)> <!ELEMENT item01 (#PCDATA)> <!ELEMENT item02 (#PCDATA)> ]> <root/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="root" accessInfo="yes"> <Group elemName="root" nameOfGroupVar="GROUP1"> <Item elemName="item01" type="alphanumeric" size="10" /> <Item elemName="item02" type="alphanumeric" size="10" /> </Group> </BaseElement> </Interface>
01 root-BASE. 02 root. 03 item01 PIC X(10). 03 item02 PIC X(10). * Access Information 02 root-FLG PIC 1(32) USAGE BIT. 02 GROUP1. 03 item01-FLG PIC 1(32) USAGE BIT. 03 item01-LEN PIC 9(9) USAGE COMP. 03 item02-FLG PIC 1(32) USAGE BIT. 03 item02-LEN PIC 9(9) USAGE COMP.
Group要素では,BaseElement要素でアクセス対象に指定したXML要素,およびその子要素をCOBOLの集団項目に対応づけられます。このとき,COBOLの集団項目がXMLドキュメントと異なる階層構造になってもかまいません。
COBOLの集団項目とXMLドキュメントとを異なる階層構造にする場合は,次の点に注意してください。
XML要素「name」「zipcode」「telephone」および「addr1」をCOBOLの集団項目に対応づける例を次に示します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE table [ <!ELEMENT table (person)*> <!ELEMENT person (name, address, zipcode, telephone)> <!ELEMENT address (addr1, addr2)> <!ELEMENT name (#PCDATA)> <!ELEMENT zipcode (#PCDATA)> <!ELEMENT telephone (#PCDATA)> <!ELEMENT addr1 (#PCDATA)> <!ELEMENT addr2 (#PCDATA)> ]> <table/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="person"> <Group cobName="person"> <Item elemName="name" cobName="FULLNAME" type="alphanumeric" size="30"/> <Item elemName="zipcode" type="alphanumeric" size="8"/> <Item elemName="telephone" type="alphanumeric" size="13"/> <Item elemName="addr1" type="alphanumeric" size="120"/> </Group> </BaseElement> </Interface>
01 person. 02 FULLNAME PIC X(30). 02 zipcode PIC X(8). 02 telephone PIC X(13). 02 addr1 PIC X(120).
<?xml version="1.0" encoding="Shift_JIS"?> <table> <person> <name>Mr. X</name> <address> <addr1>Kanagawa ken</addr1> <addr2/> </address> <zipcode>XXX-XXX</zipcode> <telephone>XXX-XXXX-XXXX</telephone> </person> </table>
Group要素の中にGroup要素がある場合で,子のGroup要素をCOBOLプログラムからアクセスしないときは,対応づけを省略できます。このとき,省略したGroup要素のデータは,COBOLプログラムから読み込めません。また,COBOLプログラムからXMLドキュメントへの書き込みをした場合,省略したGroup要素に含まれるXML要素には,空要素が出力されます。
次の例では,Group要素「person」の子Group要素「fulladdress」への対応づけを省略しています。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE table [ <!ELEMENT table (person)*> <!ELEMENT person (name, fulladdress, telephone)> <!ELEMENT telephone (#PCDATA)> <!ELEMENT fulladdress (address, zipcode)> <!ELEMENT address (#PCDATA)> <!ELEMENT zipcode (#PCDATA)> <!ELEMENT name (#PCDATA)> ]> <table/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="person"> <Group cobName="person"> <Item elemName="name" cobName="FULLNAME" type="alphanumeric" size="30"/> <Item elemName="telephone" type="alphanumeric" size="13"/> </Group> </BaseElement> </Interface>
01 person. 02 FULLNAME PIC X(30). 02 telephone PIC X(13).
<?xml version="1.0" encoding="Shift_JIS"?> <table> <person> <name>Mr. X</name> <fulladdress> <address/> <zipcode/> </fulladdress> <telephone>XXX-XXXX-XXXX</telephone> </person> </table>
選択要素(複数の要素のうち,どれが出現してもよい要素)の一つをCOBOLの集団項目に対応づけるには,すべての選択要素をGroup要素に指定する必要があります。
例えば,次の例の場合,選択要素「order」「invoice」のどちらか一方にアクセスしたい場合は,「order」「invoice」の両方をGroup要素に指定する必要があります。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE transaction [ <!ELEMENT transaction (order | invoice)> <!ELEMENT order (goods, name1, fulladdress1, telephone1)> <!ELEMENT goods (#PCDATA)> <!ELEMENT name1 (#PCDATA)> <!ELEMENT fulladdress1 (address1, zipcode1)> <!ELEMENT address1 (#PCDATA)> <!ELEMENT zipcode1 (#PCDATA)> <!ELEMENT telephone1 (#PCDATA)> <!ELEMENT invoice (amount, name2, fulladdress2, telephone2)> <!ELEMENT amount (#PCDATA)> <!ELEMENT name2 (#PCDATA)> <!ELEMENT fulladdress2 (address2, zipcode2)> <!ELEMENT address2 (#PCDATA)> <!ELEMENT zipcode2 (#PCDATA)> <!ELEMENT telephone2 (#PCDATA)> ]> <transaction/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="transaction"> <Group elemName="transaction" cobName="TRANSACTION0"> <Group elemName="order" cobName="ORDER1"> <Item elemName="goods" type="alphanumeric" size="50"/> <Item elemName="name1" cobName="FULLNAME1" type="alphanumeric" size="30"/> <Group elemName="fulladdress1" cobName="FULLADDRESS1"> <Item elemName="address1" cobName="ADDRESS1" type="alphanumeric" size="120"/> <Item elemName="zipcode1" type="alphanumeric" size="8"/> </Group> <Item elemName="telephone1" type="alphanumeric" size="13"/> </Group> <Group elemName="invoice" cobName="INVOICE"> <Item elemName="amount" type="alphanumeric" size="50"/> <Item elemName="name2" cobName="FULLNAME2" type="alphanumeric" size="30"/> <Group elemName="fulladdress2" cobName="FULLADDRESS2"> <Item elemName="address2" cobName="ADDRESS2" type="alphanumeric" size="120"/> <Item elemName="zipcode2" type="alphanumeric" size="8"/> </Group> <Item elemName="telephone2" type="alphanumeric" size="13"/> </Group> </Group> </BaseElement> </Interface>
01 TRANSACTION0. 02 ORDER1. 03 goods PIC X(50). 03 FULLNAME1 PIC X(30). 03 FULLADDRESS1. 04 ADDRESS1 PIC X(120). 04 zipcode1 PIC X(8). 03 telephone1 PIC X(13). 02 INVOICE. 03 amount PIC X(50). 03 FULLNAME2 PIC X(30). 03 FULLADDRESS2. 04 ADDRESS2 PIC X(120). 04 zipcode2 PIC X(8). 03 telephone2 PIC X(13).
<?xml version="1.0" encoding="Shift_JIS"?> <transaction> <order> <goods>DVD</goods> <name1>Mr. X</name1> <fulladdress1> <address1>Kanagawa ken</address1> <zipcode1>XXX-XXX</zipcode1> </fulladdress1> <telephone1>XXX-XXXX-XXXX</telephone1> </order> </transaction>
なお,XMLドキュメントを書き込む場合,書き込む要素以外の選択要素は,初期化しておく必要があります。
再帰的構造を持つ要素は,verbatim属性に"yes"を指定したItem要素に対応づけることで,XMLドキュメントの入出力,および更新ができます。
DDFで対応づけていない要素が再帰的構造を持ち,それを省略できない場合,XMLドキュメントの入力および更新はできますが,出力はできません。XMLドキュメントを出力した場合は,CBLXML-WR-Interface-BaseElementアクセスルーチンのステータスに109が返されます。
DTDに再帰的構造があっても,再帰的構造の出力を省略できる場合は,XMLドキュメントの出力ができます。次にその例を示します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE root [ <!ELEMENT root (group1, item2) > <!ELEMENT group1 (item1, group1?) > …1. <!ELEMENT item1 (#PCDATA)> <!ELEMENT item2 (#PCDATA)> ]> <root/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="item2" cobName="BE"> <Item elemName="item2" type="alphanumeric" size="10"/> </BaseElement> </Interface>
01 item2 PIC X(10).
<?xml version="1.0" encoding="Shift_JIS"?> <root> <group1> <item1/> …2. </group1> <item2>data1</item2> </root>
DTDと同じ階層を持つCOBOLデータ項目を作成する場合,COBOLで明示的に一意な参照ができる対応づけをする必要があります。XML要素の名称だけでは一意な参照ができない場合は,cobName属性を使ってデータ項目ごとに固有の名称を指定してください。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE table [ <!ELEMENT table (group21 , group11)> <!ELEMENT group11 (group21)> <!ELEMENT group21 (item01)> <!ELEMENT item01 (#PCDATA)> ]> <table/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="table"> <Group elemName="table" cobName="GROUP1"> <Group elemName="group21"> <Item elemName="item01" type="alphanumeric" size="50"/> </Group> <Group elemName="group11"> <Group elemName="group21"> <Item elemName="item01" type="alphanumeric" size="50"/> </Group> </Group> </Group> </BaseElement> </Interface>
01 GROUP1. 02 group21. 03 item01 PIC X(50). 02 group11. 03 group21. 04 item01 PIC X(50).
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="table"> <Group elemName="table" cobName="GROUP1"> <Group elemName="group21" cobName="group21A"> <Item elemName="item01" type="alphanumeric" size="50"/> </Group> <Group elemName="group11"> <Group elemName="group21"> <Item elemName="item01" type="alphanumeric" size="50"/> </Group> </Group> </Group> </BaseElement> </Interface>
01 GROUP1. 02 group21A. 03 item01 PIC X(50). 02 group11. 03 group21. 04 item01 PIC X(50).
All Rights Reserved. Copyright (C) 2003, 2016, Hitachi, Ltd.