MOVE 30 TO AGE
7.2 実行時の動作に関する注意事項
7.2.1 省略可能な要素へのアクセス
XML では,省略可能な要素を定義できます。省略可能な要素を定義するには,要素の名称の最後に(?)
を追加します。
例えば,次のような DTD が定義された XML ドキュメントでは,要素「group1」の下位に要素「item1」
は必要ですが,要素「item2」はあってもなくてもかまいません。
(省略可能な要素を含む DTD の例)
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
<!ELEMENT table (group1)>
<!ELEMENT group1 (item1, item2?)>
<!ELEMENT item1 (#PCDATA)>
<!ELEMENT item2 (#PCDATA)>
]>
<table/>
省略可能な要素にアクセスする場合,DDF は次のようにすべての要素にアクセスできるように記述する必 要があります。
(省略可能な要素にアクセスする DDF の例)
• emptyValue 属性および accessInfo 属性の指定がない場合
<?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>
• emptyValue 属性の指定がある場合
<?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>
• accessInfo 属性の指定がある場合
<?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 プログラムでは次のように扱われます。
(1) 省略可能な要素の入力処理
省略可能な要素を省略した XML ドキュメントを入力した場合,Item 要素に指定した属性によって,対応 する COBOL データ項目に入力される値,およびアクセス情報フラグに設定される値が異なります。省略 可能な要素を持つ XML ドキュメントを入力した場合の,Item 要素に指定した属性と COBOL データ項目 に入力される値の関係を表 7-1 に示します。
表 7‒1 省略可能な要素の入力処理
省略可能な要素に対応する Item 要素の emptyValue 属性,
emptyContentValue 属性,accessInfo 属性 入力 XML ドキュメン トの省略可能な要素
COBOL データ項目(アクセス 情報フラグ)の入力値 emptyValue emptyContentVal
ue
accessInfo="ye s"
○ × × 要素値あり 要素値
空要素 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)
(凡例)
○:指定あり
×:指定なし 注
• emptyValue 属性と accessInfo 属性を同時に指定した場合,accessInfo 属性の指定値が優先され,
emptyValue 属性の指定は無効となります。
• emptyContentValue 属性と accessInfo 属性を同時に指定した場合,accessInfo 属性の指定値が 優先され,emptyContentValue 属性の指定は無効となります。
注※1
type 属性の指定が"alphanumeric"または"national"の場合は SPACE が設定されます。
type 属性の指定が"numeric","packed","binary","float",または"double"の場合は ZERO が設定 されます。
注※2
emptyValue 属性の指定がない場合,emptyValue 属性の省略値が設定されます。
(2) 省略可能な要素の出力処理
省略可能な要素に対応した COBOL データ項目,アクセス情報フラグに特定の値を設定することで,省略 可能な要素を XML ドキュメントに出力します。Item 要素の属性の指定と COBOL データ項目,アクセス 情報フラグに設定する値によって出力する XML ドキュメントの省略可能な要素の関係を表 7-2 に示しま す。
表 7‒2 省略可能な要素の出力処理
省略可能な要素に対応する Item 要素の emptyValue 属性,
emptyContentValue 属性,accessInfo 属性 COBOL データ項目(ア
クセス情報フラグ)の値 出力 XML ドキュメント emptyValue emptyContentValue accessInfo="ye
s"
○ × × emptyValue 属性の指
定値以外の値
要素を出力する
emptyValue 属性の指 定値※
要素を出力しない
○ ○ × emptyValue 属性,
emptyContentValue 属性の指定値以外の値
要素を出力する
emptyContentValue 属性の指定値
空要素を出力する
emptyValue 属性の指 定値※
要素を出力しない
emptyContentValue 属性と emptyValue 属 性が同じ指定値
要素を出力しない
× × ○
値(CBLXML-FLAG-OK)
要素を出力する
値(CBLXML-FLAG-EMPTY)
空要素を出力する
値(CBLXML-FLAG-MISSING)
要素を出力しない
(凡例)
○:指定あり
×:指定なし
注
• emptyValue 属性と accessInfo 属性を同時に指定した場合,accessInfo 属性の指定値が優先され,
emptyValue 属性の指定は無効となります。
• emptyContentValue 属性と accessInfo 属性を同時に指定した場合,accessInfo 属性の指定値が 優先され,emptyContentValue 属性の指定は無効となります。
注※
emptyValue 属性の指定がない場合,emptyValue 属性の省略値を設定します。