COBOL2002 XML連携機能ガイド
BaseElement要素は,COBOLプログラムから読み出し,および書き込みをするXML要素を指定する要素です。BaseElement要素によってCOBOLデータ項目と対応づけられたXML要素は,COBOLプログラムからXMLアクセスルーチンを使ってデータにアクセスできます。XMLアクセスルーチンの詳細については,「4.2 生成されるXMLアクセスルーチン」を参照してください。
BaseElement要素は,子要素としてGroup要素,Item要素,またはAttrItem要素のどれか一つを持ちます。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE root [ <!ELEMENT root (group01, group02)> <!ELEMENT group01 (item01)> <!ELEMENT item01 (#PCDATA)> <!ELEMENT group02 (item02)> <!ELEMENT item02 (#PCDATA)> ]> <root/>
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="group01"
accessInfo="yes">
<Group elemName="group01">
<Item elemName="item01" type="alphanumeric"
size="10" />
</Group>
</BaseElement>
<BaseElement elemName="group02"
accessInfo="no">
<Group elemName="group02">
<Item elemName="item02" type="alphanumeric"
size="10" />
</Group>
</BaseElement>
</Interface> 01 group01-BASE.
02 group01.
03 item01 PIC X(10).
* Access Information
02 group01-FLG PIC 1(32) USAGE BIT.
02 group01-GROUP.
03 item01-FLG PIC 1(32) USAGE BIT.
03 item01-LEN PIC 9(9) USAGE COMP.
01 group02.
02 item02 PIC X(10).<?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"
nameOfBaseVar="BASE">
<Group elemName="root">
<Item elemName="item01" type="alphanumeric"
size="10" />
<Item elemName="item02" type="alphanumeric"
size="10" />
</Group>
</BaseElement>
</Interface>01 BASE. 02 root. 03 item01 PIC X(10). 03 item02 PIC X(10). * Access Information 02 root-FLG PIC 1(32) USAGE BIT. 02 root-GROUP. 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.
繰り返しのあるXML要素を,BaseElement要素に指定できます。
例えば,次のDTDのドキュメント構造を持つXMLドキュメントで,繰り返し要素「row」をBaseElement要素に指定できます。この場合,XML要素を読み込むアクセスルーチンを実行するたびに,要素「row」のデータが順番に読み込まれます。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE table [ <!ELEMENT table (row)*> <!ELEMENT row (name, address, age)> <!ELEMENT name (#PCDATA)> <!ELEMENT address (addr1, addr2)> <!ELEMENT addr1 (#PCDATA)> <!ELEMENT addr2 (#PCDATA)> <!ELEMENT age (#PCDATA)> ]> <table/>
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="row">
<Group cobName="row">
<Item elemName="name" cobName="FULLNAME"
type="alphanumeric" size="30"/>
<Item elemName="addr1" type="alphanumeric"
size="40"/>
<Item elemName="addr2" type="alphanumeric"
size="40"/>
<Item elemName="age" type="alphanumeric"
size="3"/>
</Group>
</BaseElement>
</Interface>01 row. 02 FULLNAME PIC X(30). 02 addr1 PIC X(40). 02 addr2 PIC X(40). 02 age PIC X(3).
:
CALL 'CBLXML-RD-EXAMPLE-row'
USING XML-POINTER row
RETURNING CBLXML-RETURN-CODE.
:<?xml version="1.0" encoding="Shift_JIS"?>
<table>
<row>
<name>Mr. X</name>
<address>
<addr1>Kanagawa ken</addr1>
<addr2>Yokohama shi</addr2>
</address>
<age>22</age>
</row>
</table>繰り返し要素の親要素が,さらに繰り返し要素になっている場合でもアクセスできます。この場合,アクセスしたいXML要素をBaseElement要素に指定して,XMLアクセスルーチンを繰り返し呼び出して取得します。
例えば,次のDTDの場合,要素「sentence」をBaseElementに設定して,XMLアクセスルーチンを繰り返し呼び出すことで,要素の値を読み書きできます。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE book [ <!ELEMENT book (chapter)*> <!ELEMENT chapter (paragraph)*> <!ELEMENT paragraph (sentence)*> <!ELEMENT sentence (#PCDATA)> ]> <book/>
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="sentence">
<Item elemName="sentence" cobName="sentence1"
type="alphanumeric" size="200"/>
</BaseElement>
</Interface>01 sentence1 PIC X(200).
また,親の繰り返し要素「paragraph」をBaseElement要素に指定し,子の繰り返し要素「sentence」をArray要素でCOBOLデータ項目に対応づける方法もあります。この場合,1回のアクセスルーチンの呼び出しで,一つの要素「paragraph」の下位にあるすべての要素「sentence」の値を読み書きできます。Array要素のmax属性には,読み書きしたい要素の最大数を指定してください。
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="paragraph">
<Group cobName="paragraph">
<Array max="20" nameOfCountVar="NumSentences">
<Item elemName="sentence" cobName="sentence1"
type="alphanumeric" size="200"/>
</Array>
</Group>
</BaseElement>
</Interface>01 paragraph. 02 sentence1 PIC X(200) OCCURS 20. 02 NumSentences PIC 9(9) USAGE COMP.
選択要素(複数の要素のうち,どれが出現してもよい要素)の一つをBaseElement要素に対応づける場合は,すべての選択要素をBaseElement要素に指定する必要があります。
例えば次の例の場合,選択要素の一方「chapter1」をBaseElement要素に対応づける場合は,「chapter1」「chapter2」をそれぞれBaseElement要素に指定する必要があります。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE book [ <!ELEMENT book (chapter1 | chapter2)*> <!ELEMENT chapter1 (sentence1)> <!ELEMENT sentence1 (#PCDATA)> <!ELEMENT chapter2 (sentence2)> <!ELEMENT sentence2 (#PCDATA)> ]> <book/>
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="chapter1">
<Group cobName="chapter1">
<Item elemName="sentence1" type="alphanumeric"
size="200"/>
</Group>
</BaseElement>
<BaseElement elemName="chapter2">
<Group cobName="chapter2">
<Item elemName="sentence2" type="alphanumeric"
size="200"/>
</Group>
</BaseElement>
</Interface>01 chapter1. 02 sentence1 PIC X(200). 01 chapter2. 02 sentence2 PIC X(200).
<?xml version="1.0" encoding="Shift_JIS"?>
<book>
<chapter2>
<sentence2>Mr. A</sentence2>
</chapter2>
<chapter1>
<sentence1>Mr. B</sentence1>
</chapter1>
</book> :
CALL 'CBLXML-RD-EXAMPLE-chapter1'
USING XML-HANDLE chapter1
RETURNING CBLXML-RETURN-CODE.
IF CBLXML-CANT-SKIP-BE THEN
CALL 'CBLXML-RD-EXAMPLE-chapter2'
USING XML-HANDLE chapter2
RETURNING CBLXML-RETURN-CODE
END-IF.
IF CBLXML-NO-BE-LEFT THEN
CALL 'CBLXML-CL-EXAMPLE' USING XML-HANDLE
RETURNING CBLXML-RETURN-CODE
END-IF.
:複数の異なる要素の下に共通にある要素をBaseElement要素に対応づけて,要素を入力,および更新できます。ただし,要素の出力については,動作は保証しません。
次に,異なる要素の下に共通にある要素の例を示します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE root [ <!ELEMENT root (group1 , group2 )> <!ELEMENT group1 (item1)> <!ELEMENT group2 (item1)> <!ELEMENT item1 (#PCDATA)> ]> <root/>
<?xml version="1.0" encoding="Shift_JIS"?> <Interface interfaceName="EXAMPLE"> <BaseElement elemName="item1"> <Item elemName="item1" size="10"/> </BaseElement> </Interface>
01 item1 PIC X(10).
<?xml version="1.0" encoding="Shift_JIS"?> <root> <group1> <item1>dataa</item1> </group1> <group2> <item1>datab</item1> </group2> </root>
:
CALL 'CBLXML-RD-EXAMPLE-item1'
USING XML-HANDLE item1 RETURNING CBLXML-RETURN-CODE. …1.
:
CALL 'CBLXML-RD-EXAMPLE-item1'
USING XML-HANDLE item1 RETURNING CBLXML-RETURN-CODE. …2.
:All Rights Reserved. Copyright (C) 2017, 2019, Hitachi, Ltd.