© 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.
此发行说明文件包含有关 WebSphereR Integration Developer XML 映射编辑器的局限性以及已知问题和变通方法的最新信息。
无
如果在 XSD 模式中使用 minOccurs 不等于 0 或 1 定义元素,类似以下内容:
<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 函数...分配常量值。
- 将组中的剩余元素(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_materials 到 MaterialDataSet 的映射(包括所有子元素),则生成的 XSL 将不正确。
变通方法 1:
将模式 2 的 minOccurs="3" 更改为 minOccurs="0",并为这两个元素执行匹配映射。生成的 XSL 将是正确的。变通方法 2:
- 创建映射(从 materialid 映射到第一个 MaterialDataSet/matID)
- 使用 XPath 表达式 /RawMaterials[1]/materialid/text() 为第一个 MaterialDataSet/matID 定义 XSLT 函数...
- 创建映射(从 quantity 映射到第一个 MaterialDataSet/qty)
- 使用 XPath 表达式 /RawMaterials[1]/quantity/text() 为第一个 MaterialDataSet/qty 定义 XSLT 函数...
- 创建映射(从 materialid 映射到第二个 MaterialDataSet/matID)
- 使用 XPath 表达式 /RawMaterials[2]/materialid/text() 为第二个 MaterialDataSet/matID 定义 XSLT 函数...
- 创建映射(从 quantity 映射到第二个 MaterialDataSet/qty)
- 使用 XPath 表达式 /RawMaterials[2]/quantity/text() 为第二个 MaterialDataSet/qty 定义 XSLT 函数...
- 创建映射(从 materialid 映射到第三个 MaterialDataSet/matID)
- 使用 XPath 表达式 /RawMaterials[3]/materialid/text() 为第三个 MaterialDataSet/matID 定义 XSLT 函数...
- 创建映射(从 quantity 映射到第三个 MaterialDataSet/qty)
- 使用 XPath 表达式 /RawMaterials[3]/quantity/text() 为第三个 MaterialDataSet/qty 定义 XSLT 函数...
- 保存映射并生成 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"/>现在,就可以正确调用 XSL 模板以与在 XML 映射编辑器中映射的内容匹配了。