© Direitos Autorais International Business Machines Corporation 2005. Todos os direitos reservados. Direitos Restritos aos Usuários do Governo dos Estados Unidos - Uso, duplicação ou divulgação restritos pelo documento GSA ADP Schedule Contract com a IBM Corp.
Este arquivo de notas sobre o release contém as informações mais recentes sobre limitações, problemas conhecidos e soluções alternativas para o editor de mapeamento XML do WebSphereR Integration Developer.
Nenhum(a)
Se você definir seu elemento com minOccurs DIFERENTE de 0 ou 1 em seu Esquema XSD, de modo semelhante ao seguinte:
<element maxOccurs="max_integer" minOccurs="min_integer" name="elementName" type="yourType"/>
em que:
- min_integer é igual ou maior que dois, mas igual ou menor que max_integer
- elementName é o nome do elemento
- yourType é o tipo do elemento
duas ou mais entradas de elementName serão exibidas no editor de mapeamento XML quando você utilizar esse Esquema XSD como origem ou destino. Se você realizar um mapeamento de correspondência a partir do elemento pai para elementName, o elementName será mapeado múltiplas vezes e pode resultar em mapeamentos indesejados.
Solução Alternativa 1:
Mapeie cada entrada de elementName antes de realizar o mapeamento de correspondência a partir do elemento pai.Solução Alternativa 2:
Defina minOccurs para 0 ou 1.
Considere que você possui um tipo complexo em seu Esquema XSD que utiliza uma referência de grupo semelhante ao exemplo a seguir:
<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 você selecionar este esquema XSD como o destino no editor de mapeamento XML e estiver tentando mapear emplID para um valor de constante, a XSL gerada deste mapa estará incorreta.
Esta é a solução alternativa:
- Mapeie o elemento (emplID) para o elemento raiz na árvore de origem primeiro e utilize a opção Defina a Função XSLT... para designar o valor da constante.
- Mapeie o restante do elemento (location, data) no grupo para os valores desejados.
A XSL gerada como resultado estará correta.
Considere que o esquema 1 possui este conteúdo:
<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 considere que o esquema 2 possui este conteúdo:<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 você estiver mapeando esquema 1 para esquema 2 utilizando o editor de mapeamento XML e estiver tentando criar mapas (incluindo todos os elementos filhos) para: Raw_materials para MaterialDataSet, a XSL gerada estará incorreta.
Solução Alternativa 1:
Altere minOccurs="3" para minOccurs="0" no Esquema 2 e realize mapeamento de correspondência para esses dois elementos. A XSL gerada estará correta.Solução Alternativa 2:
- Crie um Mapeamento de materialid para o primeiro MaterialDataSet/matID
- Defina a Função XSLT... para o primeiro MaterialDataSet/matID utilizando a Expressão XPath de /RawMaterials[1]/materialid/text()
- Crie o Mapeamento da quantity para o primeiro MaterialDataSet/qty
- Defina a Função XSLT... para o primeiro MaterialDataSet/qty utilizando a Expressão XPath de /RawMaterials[1]/quantity/text()
- Crie o Mapeamento de materialid para o segundo MaterialDataSet/matID
- Defina a Função XSLT... para o segundo MaterialDataSet/matID utilizando a Expressão XPath de /RawMaterials[2]/materialid/text()
- Crie o Mapeamento de quantity para o segundo MaterialDataSet/qty
- Defina a Função XSLT... para o segundo MaterialDataSet/qty utilizando a Expressão XPath de /RawMaterials[2]/quantity/text()
- Crie o Mapeamento de materialid para o terceiro MaterialDataSet/matID
- Defina a Função XSLT... para o terceiro MaterialDataSet/matID utilizando a Expressão XPath de /RawMaterials[3]/materialid/text()
- Crie o Mapeamento de quantity para o terceiro MaterialDataSet/qty
- Defina a Função XSLT... para o terceiro MaterialDataSet/qty utilizando a Expressão XPath de /RawMaterials[3]/quantity/text()
- Salve o mapa e gere a XSL
- Abra o arquivo XSL e procure um constructo como:
<xsl:template name="MaterialDataSet">
<reservedRawMatDataSet>
...
<xsl:template name="MaterialDataSet_1">
<reservedRawMatDataSet>
...
<xsl:template name="MaterialDataSet_2">
<reservedRawMatDataSet>
...- Localize a linha:
<xsl:call-template name="MaterialDataSet"/>- Anexe a seguinte linha a ela:
<xsl:call-template name="MaterialDataSet_1"/>
<xsl:call-template name="MaterialDataSet_2"/>Agora o gabarito XSL está sendo chamado corretamente para corresponder ao que você mapeou no editor de mapeamento XML.