COBOL2002 XML連携機能ガイド
XMLでは,省略可能な要素を定義できます。省略可能な要素を定義するには,要素の名称の最後に(?)を追加します。
例えば,次のようなDTDが定義されたXMLドキュメントでは,要素「group1」の下位に要素「item1」は必要ですが,要素「item2」はあってもなくてもかまいません。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE table [ <!ELEMENT table (group1)> <!ELEMENT group1 (item1, item2?)> <!ELEMENT item1 (#PCDATA)> <!ELEMENT item2 (#PCDATA)> ]> <table/>
省略可能な要素にアクセスする場合,DDFは次のようにすべての要素にアクセスできるように記述する必要があります。
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE" >
<BaseElement elemName="group1">
<Group elemName="group1">
<Item elemName="item1" type="alphanumeric"
size="30"/>
<Item elemName="item2" type="alphanumeric"
size="30"/>
</Group>
</BaseElement>
</Interface>
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE" >
<BaseElement elemName="group1">
<Group elemName="group1">
<Item elemName="item1" type="alphanumeric"
size="30"/>
<Item elemName="item2" type="alphanumeric"
size="30" emptyValue="EP"/>
</Group> </BaseElement></Interface>
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE" accessInfo="yes">
<BaseElement elemName="group1">
<Group elemName="group1">
<Item elemName="item1" type="alphanumeric"
size="30"/>
<Item elemName="item2" type="alphanumeric"
size="30"/>
</Group>
</BaseElement>
</Interface>また,省略可能な要素は,XML対応COBOLプログラムでは次のように扱われます。
省略可能な要素を省略したXMLドキュメントを入力した場合,Item要素に指定した属性によって,対応するCOBOLデータ項目に入力される値,およびアクセス情報フラグに設定される値が異なります。省略可能な要素を持つXMLドキュメントを入力した場合の,Item要素に指定した属性とCOBOLデータ項目に入力される値の関係を表 7-1に示します。
表7-1 省略可能な要素の入力処理
| 省略可能な要素に対応するItem要素のemptyValue属性,emptyContentValue属性,accessInfo属性 | 入力XMLドキュメントの省略可能な要素 | COBOLデータ項目(アクセス情報フラグ)の入力値 | ||
|---|---|---|---|---|
| emptyValue | emptyContentValue | accessInfo="yes" | ||
| ○ | × | × | 要素値あり | 要素値 |
| 空要素 | type属性の指定によって,英数字と日本語はSPACE,数値はZERO※1 | |||
| 要素なし | emptyValue属性の指定値※2 | |||
| ○ | ○ | × | 要素値あり | 要素値 |
| 空要素 | emptyContentValue属性の指定値 | |||
| 要素なし | emptyValue属性の指定値※2 | |||
| × | × | ○ | 要素あり | 要素値 (CBLXML-FLAG-OK) |
| 空要素 | type属性の指定によって,英数字と日本語はSPACE,数値はZERO※1 (CBLXML-FLAG-EMPTY) |
|||
| 要素なし | type属性の指定によって,英数字と日本語はSPACE,数値はZERO※1 (CBLXML-FLAG-MISSING) |
|||
省略可能な要素に対応したCOBOLデータ項目,アクセス情報フラグに特定の値を設定することで,省略可能な要素をXMLドキュメントに出力します。Item要素の属性の指定とCOBOLデータ項目,アクセス情報フラグに設定する値によって出力するXMLドキュメントの省略可能な要素の関係を表 7-2に示します。
表7-2 省略可能な要素の出力処理
| 省略可能な要素に対応するItem要素のemptyValue属性,emptyContentValue属性,accessInfo属性 | COBOLデータ項目(アクセス情報フラグ)の値 | 出力XMLドキュメント | ||
|---|---|---|---|---|
| emptyValue | emptyContentValue | accessInfo="yes" | ||
| ○ | × | × | emptyValue属性の指定値以外の値 | 要素を出力する |
| emptyValue属性の指定値※ | 要素を出力しない | |||
| ○ | ○ | × | emptyValue属性,emptyContentValue属性の指定値以外の値 | 要素を出力する |
| emptyContentValue属性の指定値 | 空要素を出力する | |||
| emptyValue属性の指定値※ | 要素を出力しない | |||
| emptyContentValue属性とemptyValue属性が同じ指定値 | 要素を出力しない | |||
| × | × | ○ | 値(CBLXML-FLAG-OK) | 要素を出力する |
| 値(CBLXML-FLAG-EMPTY) | 空要素を出力する | |||
| 値(CBLXML-FLAG-MISSING) | 要素を出力しない | |||
All Rights Reserved. Copyright (C) 2017, 2019, Hitachi, Ltd.