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) 省略可能な要素の入力処理
(2) 省略可能な要素の出力処理

(1) 省略可能な要素の入力処理

省略可能な要素を省略したXMLドキュメントを入力した場合,Item要素に指定した属性によって,対応するCOBOLデータ項目に入力される値,およびアクセス情報フラグに設定される値が異なります。省略可能な要素を持つXMLドキュメントを入力した場合の,Item要素に指定した属性とCOBOLデータ項目に入力される値の関係を表 7-1に示します。

表7-1 省略可能な要素の入力処理

省略可能な要素に対応するItem要素のemptyValue属性,emptyContentValue属性,accessInfo属性入力XMLドキュメントの省略可能な要素COBOLデータ項目(アクセス情報フラグ)の入力値
emptyValueemptyContentValueaccessInfo="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)
(凡例)
○:指定あり
×:指定なし
  • 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ドキュメント
emptyValueemptyContentValueaccessInfo="yes"
××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属性の省略値を設定します。