Editeur de mappage XML - Notes sur l'édition

© Copyright International Business Machines Corporation 2005. All rights reserved. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

Notes sur l'édition

1.0 Description
2.0 Restrictions
3.0 Incidents recensés et solutions palliatives
   3.1 Les matrices d'éléments s'affichent individuellement si minOccurs n'a pas la valeur 0 ou 1
   3.2 Code XSL incorrect généré lors de la définition d'une mappe de constante pour une référence de groupe
   3.3 Code XSL incorrect généré lors de l'exécution d'une sous-mappe de matrice avec une référence de groupe

1.0 Description

Ce fichier de notes sur l'édition contient des informations de dernière minute sur les restrictions, les incidents recensés et les solutions palliatives concernant l'éditeur de mappage XML de WebSphere Integration Developer.

2.0 Restrictions

Néant

3.0 Incidents recensés et solutions palliatives

3.1Les matrices d'éléments s'affichent individuellement si minOccurs n'a pas la valeur 0 ou 1

Si vous définissez comme suit votre élément avec le paramètre minOccurs DIFFERENT de 0 ou de 1 dans votre schéma XSD :

<element maxOccurs="entier_max" minOccurs="entier_min" name="nomElément" type="votreType"/>

où :

plusieurs entrées associées à nomElément s'affichent dans l'éditeur de mappage XML lorsque vous utilisez ce schéma XSD comme source ou comme cible.  Si vous mettez en correspondance l'élément parent avec nomElément, nomElément est mappé plusieurs fois, ce qui peut produire un résultat indésirable.

Solution palliative 1 :
Mappez chaque entrée associée à nomElément avant d'effectuer une mise en correspondance à partir de l'élément parent.

Solution palliative 2 :
Définissez minOccurs sur 0 ou 1.

3.2Code XSL incorrect généré lors de la définition d'une mappe de constante pour une référence de groupe

Supposons que vous utilisiez dans votre schéma XSD un type complexe faisant appel à une référence de groupe semblable à l'exemple suivant :

<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>

Si vous sélectionnez ce schéma XSD comme cible dans l'éditeur de mappage XML et que vous tentez de mapper emplID avec une valeur constante, le code XSL généré à partir de cette mappe est incorrect.

Solution palliative :

  1. Mappez d'abord l'élément (emplID) avec l'élément principal de l'arborescence source, puis utilisez l'option de définition d'une fonction XSLT pour affecter la valeur constante.
  2. Mappez le reste de l'élément (location, data) du groupe avec les valeurs souhaitées.

Le code XSL qui en résulte est correct.

3.3Code XSL incorrect généré lors de l'exécution d'une sous-mappe de matrice avec une référence de groupe

Supposons que le schéma 1 contienne les données suivantes :

<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"/>
     
Supposons également que le schéma 2 contienne les données suivantes :

<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>

Si vous mappez le schéma 1 avec le schéma 2 à l'aide de l'éditeur de mappage XML et que vous tentez de créer des mappes (et notamment tous les éléments enfants) pour   Raw_materials vers MaterialDataSet, le code XSL généré est incorrect.

Solution palliative 1 :
Remplacez la valeur minOccurs="3" par minOccurs="0" pour le schéma 2 et mettez en correspondance ces deux éléments.  Le code XSL qui en résulte est correct.

Solution palliative 2 :

  1. Créez un mappage entre materialid et le premier élément MaterialDataSet/matID.
  2. Définissez une fonction XSLT pour le premier élément MaterialDataSet/matID à l'aide de l'expression XPath associée à /RawMaterials[1]/materialid/text().
  3. Créez un mappage entre la quantité et le premier élément MaterialDataSet/qty.
  4. Définissez une fonction XSLT pour le premier élément MaterialDataSet/qty à l'aide de l'expression XPath associée à /RawMaterials[1]/quantity/text().
  5. Créez un mappage entre materialid et le deuxième élément MaterialDataSet/matID.
  6. Définissez une fonction XSLT pour le deuxième élément MaterialDataSet/matID à l'aide de l'expression XPath associée à /RawMaterials[2]/materialid/text()
  7. Créez un mappage entre la quantité et le deuxième élément MaterialDataSet/qty.
  8. Définissez une fonction XSLT pour le deuxième élément MaterialDataSet/qty à l'aide de l'expression XPath associée à /RawMaterials[2]/quantity/text().
  9. Créez un mappage entre materialid et le troisième élément MaterialDataSet/matID.
  10. Définissez une fonction XSLT pour le troisième élément MaterialDataSet/matID à l'aide de l'expression XPath associée à /RawMaterials[3]/materialid/text().
  11. Créez un mappage entre la quantité et le troisième élément MaterialDataSet/qty.
  12. Définissez une fonction XSLT pour le troisième élément MaterialDataSet/qty à l'aide de l'expression XPath associée à /RawMaterials[3]/quantity/text().
  13. Enregistrez la mappe et générez le code XSL.
  14. Ouvrez le fichier XSL et recherchez une construction semblable à la suivante :
        <xsl:template name="MaterialDataSet">
             <reservedRawMatDataSet>
        ...
        <xsl:template name="MaterialDataSet_1">
             <reservedRawMatDataSet>
        ...
        <xsl:template name="MaterialDataSet_2">
             <reservedRawMatDataSet>
        ...
  15. Recherchez la ligne suivante :
     <xsl:call-template name="MaterialDataSet"/>
  16.  Ajoutez à la suite la ligne suivante :

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

A présent, le nom du modèle XSL est correct et correspond au mappage créé dans l'éditeur de mappage XML.