Note sul rilascio - Editor di mappatura XML

© Copyright International Business Machines Corporation 2005. Tutti i diritti riservati. Limitazioni per gli utenti appartenenti al governo degli Stati Uniti d'America - L'utilizzo, la duplicazione o la divulgazione sono limitati dal supplemento GSA ADP al Contratto con l'IBM Corp.

Note sul rilascio

1.0 Descrizione
2.0 Limitazioni
3.0 Problemi noti e soluzioni alternative
   3.1 La matrice degli elementi è illustrata individualmente se minOccurs non è 0 o 1
   3.2 E' stato generato un XSL non corretto durante la definizione di una mappa costante per un riferimento di gruppo
   3.3 E' stato generato un XSL durante l'esecuzione di una mappa secondaria della matrice con un riferimento di gruppo

1.0 Descrizione

Questo file di note sul rilascio contiene le informazioni più aggiornate sulle limitazioni e i problemi noti e le relative soluzioni alternative per l'editor di mappatura XML di WebSphereR Integration Developer.

2.0 Limitazioni

Nessuno

3.0 Problemi noti e soluzioni alternative

3.1 La matrice degli elementi è illustrata individualmente se minOccurs non è 0 o 1

Se si definisce l'elemento con minOccurs NON uguale a 0 o 1 nello schema XSD, simile a quanto segue:

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

dove:

due o più voci di elementName verranno visualizzate nell'editor di mappatura quando si utilizza questo schema XSD come origine o destinazione. Se si esegue una mappatura corrispondente dall'elemento parent a elementName, elementName verrà mappato più volte, creando mappature non desiderate.

Soluzione alternativa 1:
Mappare ciascuna voce di elementName prima di eseguire la mappatura corrispondente dall'elemento parent.

Soluzione alternativa 2:
Impostare minOccurs su 0 o 1.

3.2 E' stato generato un XSL durante la definizione di una mappa costante per un riferimento di gruppo

Si supponga di disporre di un tipo complesso nello schema XSD che utilizza un riferimento di gruppo simile al seguente esempio:

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

Se si seleziona questo schema XSD come destinazione nell'editor di mappatura XML e si tenta di mappare emplID ad un valore costante, l'XSL generato da questa mappa non sarà corretto.

Di seguito è riportata la soluzione alternativa:

  1. Mappare l'elemento (emplID) all'elemento root prima nella struttura di origine, quindi utilizzare Definisci la funzione XSLT... per assegnare il valore costante.
  2. Mappare il resto dell'elemento (posizione, dati) nel gruppo ai valori desiderati.

L'XSL generato come risultato sarà corretto.

3.3 E' stato generato un XSL non corretto durante l'esecuzione di una mappa secondaria della matrice con un riferimento di gruppo

Si supponga che lo schema 1 abbia questo contenuto:

<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"/>
     
E si supponga che lo schema 2 abbia questo contenuto:

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

Se si mappa lo schema 1 allo schema 2 utilizzando l'editor di mappatura XML e si tenta di creare delle mappe (compresi tutti gli elementi child) per:  Raw_materials a MaterialDataSet, l'XSL generato non sarà corretto.

Soluzione alternativa 1:
Modificare minOccurs="3" in minOccurs="0" per lo Schema 2, quindi eseguire la mappatura corrispondente per questi due elementi.  L'XSL generato sarà corretto.

Soluzione alternativa 2:

  1. Creare una mappatura da materialid al primo MaterialDataSet/matID
  2. Definire la funzione XSLT... per il primo MaterialDataSet/matID utilizzando l'espressione XPath di /RawMaterials[1]/materialid/text()
  3. Creare una mappatura dalla quantità al primo MaterialDataSet/qty
  4. Definire la funzione XSLT... per il primo MaterialDataSet/qty utilizzando l'espressione XPath di /RawMaterials[1]/quantity/text()
  5. Creare una mappatura da materialid al secondo MaterialDataSet/matID
  6. Definire la funzione XSLT... per il secondo MaterialDataSet/matID utilizzando l'espressione XPath di /RawMaterials[2]/materialid/text()
  7. Creare una mappatura dalla quantità al secondo MaterialDataSet/qty
  8. Definire la funzione XSLT... per il secondo MaterialDataSet/qty utilizzando l'espressione XPath di /RawMaterials[2]/quantity/text()
  9. Creare una mappatura da materialid al terzo MaterialDataSet/matID
  10. Definire la funzione XSLT... per il terzo MaterialDataSet/matID utilizzando l'espressione XPath di /RawMaterials[3]/materialid/text()
  11. Creare una mappatura dalla quantità al terzo MaterialDataSet/qty
  12. Definire la funzione XSLT... per il terzo MaterialDataSet/qty utilizzando l'espressione XPath di /RawMaterials[3]/quantity/text()
  13. Salvare la mappa e generare l'XSL
  14. Aprire il file XSL e ricercare un costrutto come il seguente:
        <xsl:template name="MaterialDataSet">
             <reservedRawMatDataSet>
        ...
        <xsl:template name="MaterialDataSet_1">
             <reservedRawMatDataSet>
        ...
        <xsl:template name="MaterialDataSet_2">
             <reservedRawMatDataSet>
        ...
  15. Ricercare la riga:
     <xsl:call-template name="MaterialDataSet"/>
  16.  Aggiungere la seguente riga dopo:

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

Ora, la maschera XSL sta per essere richiamata correttamente in base a ciò che è stato mappato nell'editor di mappatura XML.