変更の始まり

RPG サブフィールドに対応しない XML データがある場合の allowextra オプションの例

以下の例の中では次の定義が使用されています。
D qualName        DS                   QUALIFIED
D   name                        10A
D   lib                         10A

D copyInfo        DS                   QUALIFIED
D   from                               LIKEDS(qualName)
D   to                                 LIKEDS(qualName)

D copyInfo3       DS                   QUALIFIED
D   from                               LIKEDS(qualName)
D   to                                 LIKEDS(qualName)
D   create                       1N
ファイル cpyA.xml に以下の行が含まれていると想定します。
<copyInfo>
 <to><name>MYFILE</name><lib>*LIBL</lib></to>
 <from name="MASTFILE" lib="CUSTLIB"></from>
</copyInfo>
ファイル cpyC.xml に以下の行が含まれていると想定します。
<copyinfo errors="tolerate">
 <to><name>MYFILE</name><lib>MYLIB</lib></to>
 <from><name>MASTFILE</name><lib>CUSTLIB</lib></from>
 <to><name>MYFILE2</name></to>
</copyinfo>
ファイル cpyD.xml に以下の行が含まれていると想定します。
<copyinfo to="MYLIB/MYFILE">
 <from><name>MASTFILE</name><lib>CUSTLIB</lib></from>
</copyinfo>
  1. データ構造 copyInfo には fromto という 2 つの サブフィールドがあり、各サブフィールドに namelib という 2 つのサブフィールドがあります。 ファイル cpyA.xmlcopyInfo 構造と 完全に一致しています。したがって、allowextra は デフォルトで yes に設定されるため allowextra オプションは不要です。
      xml-into copyInfo %XML('cpyA.xml' : 'doc=file');
      // copyInfo.from  .name = 'MASTFILE  ' .lib = 'CUSTLIB   '
      // copyInfo.to    .name = 'MYFILE    ' .lib = '*LIBL     '
  2. ファイル cpyC.xml の XML 要素 copyinfo には、 一致する RPG サブフィールドがない XML 属性があります。また、 to サブフィールドが複数回指定されています。XML 文書内の余分なサブフィールドを許容するためには、オプション allowextra=yes の 指定が必要です。余分な XML データは無視されます。
      xml-into copyInfo
               %XML('cpyC.xml' : 'doc=file allowextra=yes');
      // copyInfo.from  .name = 'MASTFILE  ' .lib = 'CUSTLIB   '
      // copyInfo.to    .name = 'MYFILE    ' .lib = 'MYLIB     '
  3. データ構造 copyInfo3 には、ファイル cpyC.xml にはないサブフィールド create が あります。cpyC.xml には、 データ構造 copyInfo3 に対して、欠落しているサブフィールドと余分なサブフィールドの両方が含まれています。 allowextra=yes allowmissing=yes の両方のオプションを指定する必要があります。 余分なサブフィールドは無視され、欠落しているサブフィールドは元の値を保持します。
      clear copyInfo3;
      xml-into copyInfo3
               %XML('cpyC.xml' : 'allowextra=yes ' +
                                 'allowmissing=yes ' +
                                 'doc=file' +
                                 'path=copyinfo');
      // copyInfo3.from  .name = 'MASTFILE  ' .lib = 'CUSTLIB   '
      // copyInfo3.to    .name = 'MYFILE    ' .lib = 'MYLIB     '
      // copyInfo3.create = '0' (from the CLEAR operation)
  4. ファイル cpyD.xml にある XML 要素 copyInfo は 属性 to を持っています。 属性でサブフィールド を指定できるのは、サブフィールドが配列でもデータ構造でもない場合のみです。to 属性は予期されていないため、 および、to XML 要素が見つからないため、XML-INTO 命令は状況コード 00353 で失敗します。
      xml-into(e) copyInfo %XML('cpyC.xml' : 'doc=file');
      // %error = *on
      // %status = 353
  5. オプション allowextra=yes allowmissing=yes が指定されることによって、 余分な to 属性は無視され、欠落している to 要素 は許容されます。to サブフィールドは XML-INTO 命令によって変更されません。
      copyInfo.to.name = '*UNSET*';
      copyInfo.to.lib = '*UNSET*';
      xml-into copyInfo %XML('cpyD.xml' : 'doc=file ' +
                        'allowextra=yes allowmissing=yes');
      // copyInfo.from  .name = 'MASTFILE  ' .lib = 'CUSTLIB   '
      // copyInfo.to    .name = '*UNSET*   ' .lib = '*UNSET*   '
変更の終わり