XML マッピング・エディターのリリース情報

© Copyright International Business Machines Corporation 2005. All rights reserved.
(C) Copyright IBM Japan 2006

リリース情報

1.0 説明
2.0 制限事項
3.0 既知の問題と次善策
   3.1 minOccurs が 0 または 1 でない場合にエレメントの配列が個別に表示される
   3.2 グループ参照の定数マップを定義すると誤った XSL が生成される
   3.3 グループ参照を持つ配列サブマップを実行すると誤った XSL が生成される

1.0 説明

このリリース情報ファイルには、WebSphereR Integration Developer XML マッピング・エディターの制限事項、 および既知の問題と次善策に関する最新情報が記載されています。

2.0 制限事項

なし

3.0 既知の問題と次善策

3.1 minOccurs が 0 または 1 でない場合にエレメントの配列が個別に表示される

XSD スキーマで、0 または 1 でない minOccurs を持つエレメントを定義する場合、次のようになります。

<element maxOccurs="max_integer" minOccurs="min_integer" name="elementName" type="yourType"/>

ここで、

ソースまたはターゲットのどちらかにこの XSD スキーマを使用しているときは、XML マップ・エディターに複数の elementName エントリーが表示されます。親エレメントから elementName にマッピングの突き合わせを実行した場合、 elementName は複数回マップされ、予期しないマッピングになる可能性があります。

次善策 1:
親エレメントからのマッピングの突き合わせを実行する前に、elementName の各エントリーをマップします。

次善策 2:
minOccurs を 0 または 1 に設定します。

3.2 グループ参照の定数マップを定義すると誤った XSL が生成される

XSD スキーマに、以下の例と同様のグループ参照を使用する複合タイプがあると想定します。

<complexType name="MyType1">
    <sequence>
      <group ref="xsd1:myType1"/>
    </sequence>
</complexType>

  <group name="myType1">
    <sequence>
      <element name="emplID">
 <simpleType>
          <restriction base="int"/>
        </simpleType>       
      </element>
      <element name="location">      
        <simpleType>
          <restriction base="string">
            <maxLength value="10"/>
          </restriction>
 </simpleType>
      </element>
      <element name="data">       
        <simpleType>
          <restriction base="string">
            <maxLength value="1"/>
          </restriction>
        </simpleType>
      </element>
    </sequence>
  </group>

XML マッピング・エディターでこの XSD スキーマをターゲットとして選択し、 emplID を定数値にマップしようとしている場合、このマップから生成される XSL は正しくありません。

次善策を以下に示します。

  1. まず、エレメント (emplID) をソース・ツリーのルート・エレメントにマップし、 「XSLT 関数の定義... (Define XSLT Function...)」 を使用して定数値を割り当てます。
  2. グループの残りのエレメント (locationdata) を、望ましい値にマップします。

結果として生成された XSL は正しいものになります。

3.3 グループ参照を持つ配列サブマップを実行すると誤った XSL が生成される

スキーマ 1 が以下の内容を持っていると想定します。

<xsd:complexType name="Raw_Materials_Type">
    <xsd:sequence>
      <xsd:element minOccurs="0" name="materialid" type="xsd:int"/>
      <xsd:element minOccurs="0" name="quantity" type="xsd:int"/>     
    </xsd:sequence>
</xsd:complexType>

<xsd:element maxOccurs="unbounded" minOccurs="1" name="RawMaterials" type="Raw_Materials_Type"/>
     
さらに、スキーマ 2 が以下の内容を持っていると想定します。

<xsd:element maxOccurs="3" minOccurs="3" name="MaterialDataSet" type="reservedmaterialdataset"/>
<complexType name="reservedmaterialdataset">
    <sequence>
      <group ref="xsd1:reservedmaterialdatasetGroup"/>
    </sequence>
</complexType>
<group name="reservedmaterialdatasetGroup">
    <sequence>
      <element name="matID" type="xsd:int"/>
      <element name="qty" type="xsd:int"/>
    </sequence>
</group>

XML マッピング・エディターを使用してスキーマ 1 をスキーマ 2 にマッピングする場合、 Raw_material から MaterialDataSet のマップ (すべての子エレメントを含む) を作成しようとすると、 誤った XSL が生成されます。 

次善策 1:
スキーマ 2 の minOccurs="3" を minOccurs="0" に変更し、 これら 2 つのエレメントについてマッピングの突き合わせを実行します。 正しい XSL が生成されます。 

次善策 2:

  1. materialid から最初の MaterialDataSet/matID への「マッピングの作成」を行います。
  2. /RawMaterials[1]/materialid/text() という XPath 式を使用して、最初の MaterialDataSet/matID について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
  3. quantity から最初の MaterialDataSet/qty への「マッピングの作成」を行います。
  4. /RawMaterials[1]/quantity/text() という XPath 式を使用して、最初の MaterialDataSet/qty について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
  5. materialid から 2 番目の MaterialDataSet/matID への「マッピングの作成」 を行います。
  6. /RawMaterials[2]/materialid/text() という XPath 式を使用して、 2 番目の MaterialDataSet/matID について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
  7. quantity から 2 番目の MaterialDataSet/qty への「マッピングの作成」を行います。
  8. /RawMaterials[2]/quantity/text() という XPath 式を使用して、 2 番目の MaterialDataSet/qty について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
  9. materialid から 3 番目の MaterialDataSet/matID への「マッピングの作成」を行います。
  10. /RawMaterials[3]/materialid/text() という XPath 式を使用して、 3 番目の MaterialDataSet/matID について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
  11. quantity から 3 番目の MaterialDataSet/qty への「マッピングの作成」を行います。
  12. /RawMaterials[3]/quantity/text() という XPath 式を使用して、 3 番目の MaterialDataSet/qty について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
  13. マップを保管し、XSL を生成します。
  14. XSL ファイルを開き、次のような構成を探します。
        <xsl:template name="MaterialDataSet">
             <reservedRawMatDataSet>
        ...
        <xsl:template name="MaterialDataSet_1">
             <reservedRawMatDataSet>
        ...
        <xsl:template name="MaterialDataSet_2">
             <reservedRawMatDataSet>
        ...
  15. 次の行を見つけます。
     <xsl:call-template name="MaterialDataSet"/>
  16. その後に、次の行を追加します。 

    <xsl:call-template name="MaterialDataSet_1"/>
    <xsl:call-template name="MaterialDataSet_2"/>

これで、XML マッピング・エディターでマップしたものと突き合わせるために XSL テンプレートが正しく呼び出されます。