3.2.1 アクセス情報フラグ

アクセス情報フラグには,入力した要素および属性の状態が格納されます。また,出力時にアクセス情報フラグを設定すると,要素および属性の出力状態を設定できます。アクセス情報フラグは32けたのブール項目として,cblxmlコマンドが生成するXMLアクセス用データ定義に生成されます。

アクセス情報フラグに対応するCOBOLのデータ項目の名称
Group要素,Item要素,またはAttrItem要素のnameOfFlagVar属性に指定した名称が,アクセス情報フラグに対応するCOBOLのデータ項目の名称になります。
nameOfFlagVar属性の指定を省略した場合は,cobName属性(省略時はelemName属性)の名称に"-FLG"を追加した名称が,アクセス情報フラグに対応するCOBOLのデータ項目の名称になります。

次に,アクセス情報フラグの値について,説明します。

<この項の構成>
(1) 入力時のアクセス情報フラグ
(2) 出力時のアクセス情報フラグ
(3) nameOfFlagVar属性の指定例

(1) 入力時のアクセス情報フラグ

入力時に設定されるアクセス情報フラグの詳細を,表 3-3に示します。なお,XMLドキュメント入力時には,複数のフラグ値が設定される場合があります。

表3-3 入力時のアクセス情報フラグ

登録集原文"CBLXMLRC.cbl"の定義名(78レベル)アクセス情報フラグ値アクセス情報フラグの意味
CBLXML-FLAG-MISSINGB'100000~0'要素または属性がない。
CBLXML-FLAG-EMPTYB'010000~0'要素または属性の値が空である。※1
CBLXML-FLAG-INVAL-CHARB'001000~0'要素または属性の値にItem要素のtype属性に指定したCOBOLデータ形式で無効な文字が含まれている。※2
CBLXML-FLAG-OVERFLOWB'000100~0'要素,属性の値の長さがItem要素のsize属性に指定した値を超えている。※3
注※1
開始タグと終了タグ間の内容が空白文字(スペース,タブおよび改行)だけの場合でも空要素とみなしません。空要素とみなすのは,空タグ,および開始タグと終了タグ間の内容がない(<Item></Item>)場合だけです。
注※2
無効な文字と判定される条件を次に示します。
  • type属性に"national"を指定して,COBOLデータ項目に1バイト文字を入力した場合
    (不当な1バイト文字は,「[図データ]」(げた記号)に置き換えられます。「[図データ]」(げた記号)は2バイト文字であるため,size属性で指定した長さを超えてCBLXML-FLAG-OVERFLOWが同時に設定される場合があります)
    不当文字については「9.2 入出力時に不当な文字をチェックする機能」の「表9-3 入力時にチェックする文字」を参照してください。
  • type属性に"numeric","packed","binary","float",または"double"を指定して,COBOLデータ項目に数値以外の値を入力した場合
  • sign属性に"unsigned"を指定して,負値を入力した場合
    (ただし,-0は+0が仮定されるため,このフラグは設定されません)
注※3
要素,属性の値の長さとItem要素のsize属性に指定した値を比較する場合の条件を次に示します。
  • 数字項目("numeric","packed","binary")については,数値の左側の0を削除したけた数とsize属性のけた数を比較して大小を判定します。ただし,符号はけた数に含みません。
  • 浮動小数点数("float","double")については,システムで定義した浮動小数点数の絶対値を超えた場合にsize属性の値を超えたと判定されます。システムで定義した浮動小数点数の絶対値については,ご使用のシステムのマニュアルを参照してください。

(2) 出力時のアクセス情報フラグ

出力時に設定するアクセス情報フラグの詳細を表 3-4に示します。

表3-4 出力時のアクセス情報フラグ

登録集原文"CBLXMLRC.cbl"の定義名(78レベル)アクセス情報フラグ値アクセス情報フラグの意味
CBLXML-FLAG-OKB'00000~0'要素または属性を出力する。
CBLXML-FLAG-MISSINGB'10000~0'要素を出力しない。
CBLXML-FLAG-EMPTYB'01000~0'空要素を出力する。
注※
対応づけた要素が省略できる場合,またはArray要素の直下にItem要素を対応づけた場合は,要素を出力しません。ただし,次の場合は要素,属性,または空要素を出力します。
  • 対応づけた要素が省略できない要素である場合,または対応づけた属性に#REQUIREDを指定した場合
    (CBLXML-FLAG-OKが仮定されて,要素を出力します)
  • CBLXML-FLAG-MISSINGとCBLXML-FLAG-EMPTYが同時に指定されている場合
    (CBLXML-FLAG-EMPTYが仮定されて,空要素を出力します)

(3) nameOfFlagVar属性の指定例

入出力データ情報定義機能を使用した場合のnameOfFlagVar属性の指定例を次に示します。

指定例
(DTDの例)

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
 <!ELEMENT root (group01)>
 <!ELEMENT group01 (item01)>
 <!ELEMENT item01  (#PCDATA)>
]>
<root/>

(DDFの例)

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE" accessInfo="yes">
 <BaseElement elemName="group01">
   <Group elemName="group01"
          nameOfFlagVar="G01-FLAG">
     <Item elemName="item01"
           nameOfFlagVar="I01-FLAG"
           type="alphanumeric" size="10"/>
   </Group>
 </BaseElement>
</Interface>

(生成されるCOBOLデータ項目)

01 group01-BASE.
 02 group01.
  03 item01 PIC X(10).
* Access Information.
 02 G01-FLAG PIC 1(32) USAGE BIT.
 02 group01-GROUP.
  03 I01-FLAG PIC 1(32) USAGE BIT.
  03 item01-LEN PIC 9(9) USAGE COMP.

(COBOL原始プログラムでのアクセス情報フラグの判定例)

        :
01 CHECK-FLAG PIC 1(32) BIT.
        :    
   COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-MISSING.
   IF CHECK-FLAG = CBLXML-FLAG-MISSING  THEN
      DISPLAY 'CBLXML-FLAG-MISSING'
   END-IF.
   COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-EMPTY.
   IF CHECK-FLAG = CBLXML-FLAG-EMPTY  THEN
      DISPLAY 'CBLXML-FLAG-EMPTY'
   END-IF.
   COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-INVAL-CHAR.
   IF CHECK-FLAG = CBLXML-FLAG-INVAL-CHAR  THEN
      DISPLAY 'CBLXML-FLAG-INVAL-CHAR'
   END-IF.
   COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-OVERFLOW.
   IF CHECK-FLAG = CBLXML-FLAG-OVERFLOW  THEN
      DISPLAY 'CBLXML-FLAG-OVERFLOW'
   END-IF.
        :