ns オプションの例

  1. オプション ns=remove が使用されます。
    以下の例の中では次の定義が使用されています。
    D info            DS                  QUALIFIED
    D   type                        25A   VARYING
    D   qty                         10I 0
    D   price                        7P 3
    ファイル info1.xml に以下が含まれていると想定します。
    <abc:info xmlns:abc="http://www.abc.xyz">
     <abc:type>Chair</abc:type>
     <abc:qty>3</abc:qty>
     <abc:price>79.99</abc:price>
    </abc:info>

    この XML 文書内の名前 (abc:type など) を RPG サブフィールド名に使用することはできません。

    オプション ns=remove は、 XML-INTO 命令が、一致するサブフィールドまたは path オプション内に 指定された名前を検索する前に、名前空間 (abc) とコロンが XML 名から除去 されることを指定します。

    XML 名 abc:type は、名前空間 abc: が除去された後は、RPG サブフィールド TYPE に 一致します。

       xml-into info %xml('info1.xml'
                       : 'doc=file ns=remove');
       // info.type = 'Chair'
       // info.qty = 3
       // info.price = 79.99
  2. オプション ns=merge が使用されます。
    以下の例の中では次の定義が使用されています。
    D info            DS                  QUALIFIED
    D   abc_type                    25A   VARYING
    D   def_type                    25A   VARYING
    D   abc_qty                     10I 0
    D   abc_price                    7P 3
    ファイル info2.xml に以下が含まれていると想定します。
    <abc:info xmlns:abc="http://www.abc.xyz"
              xmlns:def="http://www.def.xyz">
     <abc:type>Chair</abc:type>
     <abc:qty>3</abc:qty>
     <def:type>Modern</def:type>
     <abc:price>79.99</abc:price>
    </abc:info>

    この XML 文書には、名前空間 abc が付いている名前 abc:type が含まれています。

    また、この XML 文書には、名前空間 def が付いている名前 def:type も含まれています。このケースでオプション namespace=remove を 使用することはできません。もし使用すると、2 つの異なる XML 要素の 名前が、1 つの RPG サブフィールド TYPE に一致することになるからです。

    オプション ns=merge が指定されます。これは、一致するサブフィールドを XML-INTO 命令が検索する前に、 名前空間 (abc) と XML 名の残りの部分を、名前の 2 つの部分を下線で 区切ってマージすることを指示します。

    名前空間 abctype がマージされた後、 名前 abc_type は RPG サブフィールド ABC_TYPE と 一致します。名前 def_type と RPG サブフィールド DEF_TYPE は、XML 名の 2 つの部分がマージされた後に 一致します。

    データ構造名 info は、 マージされた XML 名 abc_info と一致しないため、path オプション が指定される必要があります。マージされた名前 abc_info が path オプション内で使用 されます。

    このタイプの XML 文書を処理する別の方法については、名前空間接頭部オプションを 参照してください。

       xml-into info %xml('info2.xml'
                       : 'doc=file ns=merge path=abc_info');
       // info.abc_type = 'Chair'
       // info.def_type = 'Modern'
       // info.abc_qty = 3
       // info.abc_price = 79.99