© Copyright International Business Machines Corporation 2005. All rights reserved.
(C) Copyright IBM Japan 2006
このリリース情報ファイルには、WebSphereR Integration Developer XML マッピング・エディターの制限事項、 および既知の問題と次善策に関する最新情報が記載されています。
なし
XSD スキーマで、0 または 1 でない minOccurs を持つエレメントを定義する場合、次のようになります。
<element maxOccurs="max_integer" minOccurs="min_integer" name="elementName" type="yourType"/>
ここで、
- min_integer は 2 以上で、かつ、max_integer 以下です。
- elementName はエレメントの名前です。
- yourType はエレメントのタイプです。
ソースまたはターゲットのどちらかにこの XSD スキーマを使用しているときは、XML マップ・エディターに複数の elementName エントリーが表示されます。親エレメントから elementName にマッピングの突き合わせを実行した場合、 elementName は複数回マップされ、予期しないマッピングになる可能性があります。
次善策 1:
親エレメントからのマッピングの突き合わせを実行する前に、elementName の各エントリーをマップします。次善策 2:
minOccurs を 0 または 1 に設定します。
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 は正しくありません。
次善策を以下に示します。
- まず、エレメント (emplID) をソース・ツリーのルート・エレメントにマップし、 「XSLT 関数の定義... (Define XSLT Function...)」 を使用して定数値を割り当てます。
- グループの残りのエレメント (location、data) を、望ましい値にマップします。
結果として生成された 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:
- materialid から最初の MaterialDataSet/matID への「マッピングの作成」を行います。
- /RawMaterials[1]/materialid/text() という XPath 式を使用して、最初の MaterialDataSet/matID について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
- quantity から最初の MaterialDataSet/qty への「マッピングの作成」を行います。
- /RawMaterials[1]/quantity/text() という XPath 式を使用して、最初の MaterialDataSet/qty について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
- materialid から 2 番目の MaterialDataSet/matID への「マッピングの作成」 を行います。
- /RawMaterials[2]/materialid/text() という XPath 式を使用して、 2 番目の MaterialDataSet/matID について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
- quantity から 2 番目の MaterialDataSet/qty への「マッピングの作成」を行います。
- /RawMaterials[2]/quantity/text() という XPath 式を使用して、 2 番目の MaterialDataSet/qty について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
- materialid から 3 番目の MaterialDataSet/matID への「マッピングの作成」を行います。
- /RawMaterials[3]/materialid/text() という XPath 式を使用して、 3 番目の MaterialDataSet/matID について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
- quantity から 3 番目の MaterialDataSet/qty への「マッピングの作成」を行います。
- /RawMaterials[3]/quantity/text() という XPath 式を使用して、 3 番目の MaterialDataSet/qty について「XSLT 関数の定義... (Define XSLT Function...)」を行います。
- マップを保管し、XSL を生成します。
- XSL ファイルを開き、次のような構成を探します。
<xsl:template name="MaterialDataSet">
<reservedRawMatDataSet>
...
<xsl:template name="MaterialDataSet_1">
<reservedRawMatDataSet>
...
<xsl:template name="MaterialDataSet_2">
<reservedRawMatDataSet>
...- 次の行を見つけます。
<xsl:call-template name="MaterialDataSet"/>- その後に、次の行を追加します。
<xsl:call-template name="MaterialDataSet_1"/>
<xsl:call-template name="MaterialDataSet_2"/>これで、XML マッピング・エディターでマップしたものと突き合わせるために XSL テンプレートが正しく呼び出されます。