使用 XSD 有效负载创建传输映射

本页介绍对使用 XML 架构定义 (XSD) 文件创建传输映射的支持。

当需要由 XSD 文件生成 XML 有效负载时,使用 XSD 传输映射。
传输映射允许指定并呈现 XML 定义文件的位置,以便将 XML 标签映射到变量。

XSD 有效负载仅可用于以下传输:

  • JMS
  • MSMQ
  • TCP
  • WMQ

假设

假设下述条件成立:

  • 您熟悉 XML 架构定义语言。
  • 了解如何创建支持 XSD 有效负载的传输。
  • 如果 XML 架构具有导入语句,则所有其他必需的 XSD 都位于正确的位置。

限制

XSD 支持的当前实现仅限于标签、数组和静态属性。

事务服务器不使用 XML 验证解析器,也不根据 XML 架构验证收到的 XML。因此,XML 必须反映 XSD 结构,确保 XML 标签值与变量正确匹配。

实现的唯一方面是 maxLength,其用于确定逻辑变量中字符串的大小。

事务服务器不支持的 XSD 构造

当前,事务服务器不处理以下 XML 架构构造,而是将其忽略:

  • 选项
    • 除非选项选择中的所有元素都是字符串,否则 XML 架构选项构造将在处理 XML 时导致错误。
  • 命名空间
    • 事务服务器 XSD 架构处理不支持命名空间。

以下内容显示了事务服务器不支持的 XSD 构造的示例:

XSD 元素 XSD 示例
选项 <xsd:group name="priceGroup">
<xsd:choice id="pg.choice">
<xsd:element name="fullPrice" type="fullPriceType"/>
<xsd:element name="salePrice" type="salePriceType"/>
<xsd:element name="clearancePrice" type="clearancePriceType"/>
<xsd:element name="freePrice" type="freePriceType"/>
</xsd:choice>
</xsd:group>
静态属性 事务服务器支持属性,但不支持属性的以下选项:
忽略 use="prohibited"。
忽略 form="qualified",并以 XML 架构默认的 form="unqualified" 进行发送。

不支持的 XML 架构类型

事务服务器不支持以下 XML 架构类型:

  • base64Binary
  • hexBinary
  • duration
  • NOTATION

如果 XSD 包含上述类型的元素,它们必须是可选的或设置为 nillable="true" 才能由事务服务器处理;否则,事务服务器将无法从传输映射 XSD 生成有效的 XML 或在侦听器中成功处理传入的 XML。

数据类型按照以下方式映射到 XML 架构类型:

XML 架构类型
数据类型
boolean BOOL
byte INT1
date TIMESTAMP
dateTime TIMESTAMP
decimal FLOAT8
double FLOAT8
float FLOAT4
gDay UINT1
gMonth UINT1
gMonthDay STRING
gYear UINT4
gYearMonth STRING
int INT4
integer INT8
long INT8
short INT2
string STRING
token STRING
normalizedString STRING
language STRING
Time TIMESTAMP
unsignedByte UINT1
unsignedInt UINT4
unsignedLong UINT8
unsignedShort UINT2
positiveInteger UINT8
negativeInteger INT8
nonPositiveInteger INT8
nonNegativeInteger UINT8
anyURI STRING
QName STRING
NCName
STRING
Name
STRING

在传输映射中呈现 XSD

要使用 XSD 有效负载传输映射,首先必须选择 JMS、MSMQ、TCP 或 WMQ 传输,然后从 Format(格式)下拉列表中选择 XSD

更改传输映射窗口的 To Enterprise(至企业)部分以适应 XSD 格式。

第 1 步:指定 XSD 文件的位置

指定 XSD File(XSD 文件)框的值时,需要考虑以下因素:

  • 如果 XSD 位于 HTTP 服务器上,请在 XSD File(XSD 文件)框中键入以 http 开头的 URL。
  • 如果知道文件的位置和名称,则可以在 XSD File(XSD 文件)框中键入文件,指定文件的完整路径;例如,C:/path/xsdfilename.xsd。
  • 如果您不清楚文件的确切位置,请单击 Browse(浏览)按钮。

第 2 步:使用 Query(查询)按钮查找 XSD 元素

指定 XSD 文件名(通过 URL 或文件名)后,单击 Query(查询)按钮。


假设 XSD 文件包含可由事务服务器呈现的元素,则在 XSD 文件中找到的元素将填充 Root Element(根元素)下拉列表。

第 3 步:呈现 XSD 元素结构

Root Element(根元素)下拉列表中选择元素之一,将显示其结构(假设其定义正确并且仅使用事务服务器识别的 XSD 功能)。

嵌套在其他 XSD 元素中的 XSD 元素(例如,属于复杂类型的元素)将在其父元素下方缩进显示。

数组由 Parameter Type(参数类型)列中的 Table(表)关键字标识。

静态属性在其所属元素的下方缩进,并以斜体显示。

第 4 步:(可选)使用 Map Parm(映射参数)按钮自动生成逻辑变量

要自动生成具有正确计数(对于数组)和数据类型的逻辑变量,请使用 Map Parm(映射参数)按钮。

建议使用 Map Parms(映射参数)按钮以确保 XML 架构变量类型和数据类型之间的最佳映射。

或者,可以手动创建逻辑变量,然后将其映射到 XML 标签。

第 5 步:(可选)单击 Validate(验证)按钮以显示示例 XML

可以单击 Validate(验证)按钮以查看示例 XML,事务服务器将该 XML 发送至企业应用程序。

值由 [] 之间的逻辑变量名称取代。

当定义 XSD 元素的固定属性时,将使用固定静态属性的定义值取代 [] 之间的逻辑变量名称。

在运行时,如果将标签映射到逻辑变量,并且该值不等于固定静态属性中指定的值,则发生错误,且不会生成 XML。

参数描述

选项 描述
XSD File(XSD 文件) 必选。XSD 文件的位置。
可以是呈 http://host.com/path/file.xsd 形式的 URL,
也可以是呈 C:/Directory/file.xsd 形式的绝对路径。
要找到本地计算机或网络上的文件,请使用 按钮。
Root Element(根元素) 必选。单击 Query(查询)按钮时填充。
假设 XSD 有效且包含至少一个元素,Root Element(根元素)下拉列表将显示 XSD 中定义的所有元素。
Parameter(参数) 必选。选择根元素后自动填充。
XSD 元素可标识为 Structures(结构)或在复杂时标识为 Tables(表)。
当事务服务器将元素标识为 Table(表)时,它实际上为数组,从中可以指定最大的数组大小(参见下面的 Value(值)参数描述)
属于结构或表的元素在其父标签下缩进。
Type (类型)
必选。Type(类型)列显示参数类型。除非 XSD 元素复杂,否则类型为 XSD 类型。
Parm Type(参数类型)
必选。涉及传入或传出元素。对于此传输映射,Parm Type(参数类型)始终为 In。
Aggregate(聚合)
可选。此项是与 XML 标签相关联的变量的名称。
使用 Map Parms(映射参数)按钮时,自动生成此名称,也可以从逻辑变量列表中手动添加此名称。
Value/
Rows In(值/行数)
可选。当使用 maxOccurs="unbounded" 定义 XML 架构元素时,仅在参数类型设置为 Table(表)时才可编辑。
默认值为 1,其效果与定义为结构的效果相同。
它必须为正整数。
如果单击 Map Parm(映射参数)按钮以生成逻辑变量,与表元素相关联的逻辑变量将自动使用 Row In(行数)列中指定的值更新其计数

创建使用 XSD 有效负载生成 XML 的传输映射

此示例是使用 XSD 传输映射生成要发送至企业应用程序的 XML 的分步指南。

假设

假设下述条件成立:

  • 知道如何使用工作台。
  • 知道如何创建触发器、传输和传输映射。
  • 已创建支持 XSD 有效负载的传输(例如,TCP、MSMQ、WMQ 或 JMS 传输)。

示例 XSD 文件

使用以下方法创建示例 XSD 文件。

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="books" type="BooksForm"/>
<xsd:complexType name="BooksForm">
   <xsd:sequence>
    <xsd:element name="book"
        type="BookForm"
        minOccurs="0"
        maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="BookForm">
   <xsd:sequence>
      <xsd:element name="author" type="xsd:string"/>
      <xsd:element name="title" type="xsd:string"/>
      <xsd:element name="genre" type="xsd:string"/>
      <xsd:element name="price" type="xsd:float" />
      <xsd:element name="pub_date" type="xsd:date" />
      <xsd:element name="review" type="xsd:string" minOccurs="0"/>
   </xsd:sequence>
  <xsd:attribute name="id" type="xsd:string" use="required"/>
  </xsd:complexType>
</xsd:schema>

使用文本编辑器创建文件,然后将 XML 复制并粘贴到新文件中。另外,请注意存储文件的目录。

第 1 步:添加使用 XSD 有效负载的传输映射

  1. 在工作台左侧窗格中,展开要将传输映射添加到的节点。
  2. 展开 Enterprise(企业),右键单击 Transport Maps(传输映射)图标以显示其弹出菜单,然后单击 New(新建)。
    随即显示默认 Transport Map(传输映射)窗口。
  3. 根据需要命名传输映射,然后将 Version Mismatch(版本不匹配)选项设置为 Pass(通过)或 Fail(失败)。
  4. 使用 Transport Type(传输类型)向下箭头,选择传输类型。这将限制显示在 Transport Name(传输名称)列表中的传输。
  5. 使用 Transport Name(传输名称)向下箭头选择将发送 XSD 有效负载的传输。
  6. To Enterprise(至企业)部分下,单击 Format(格式)向下箭头以显示列表。
    XSD File(XSD 文件)和 Root Element(根元素)参数变为可用。

       
  7. XSD File(XSD 文件)框中,键入示例 XSD 文件的路径和文件名,或使用 按钮。
  8. 单击 Query(查询)。
    XSD 在传输映射中的呈现方式如下:

数组处理

在该 XSD 中,book(书籍)元素具有 maxOccurs="unbounded",其表示可能存在书籍数组。因此,book(书籍) XSD 元素在事务服务器中被标识为表。

使用 $NULL 宏

当标签始终需要出现在 XML 中但从未分配值时,可以使用 $NULL 宏生成空标签。如果该元素可为空(例如,在 XSD 中,nillable="true"),则生成的标签为 <tag xsi:nil="1"></tag;否则,标签为空标签或 <tag></tag>。

第 2 步:生成从 XML 标签到变量的映射

下面假设应用预计最多有 5 本书。

  1. Value(值)列下的 Rows In(行数)参数中,键入 5。 
  2. 单击 Map Parms(映射参数)。

数组变量映射

单击 Map Parms(映射参数)后,所有定义书籍的元素都将其 Count(计数)设置为 Rows In(行数)的值,包括静态属性。

已完成的传输映射将类似于如下所示:

3。单击 Validate(验证)(可选),然后单击 Save(保存)。

第 3 步:创建触发器,以使用 XSD 有效负载传输映射作为动作

下面假设您知道如何使用 Canvas Editor(画布编辑器)创建触发器和添加动作。在此例中,将创建按需触发器,该触发器将使用您刚刚创建的传输映射。

  1. 在 Workbench(工作台)左侧窗格中,展开包含项目的节点。
  2. 单击 Projects(项目)图标,然后打开相应的项目
  3. 在 Projects(项目)选项卡底部单击 New(新建)按钮。
    随即显示 New Trigger(新建触发器)窗口。
  4. 为触发器命名。
  5. Event(事件)选项卡中,单击 Trigger Event Type(触发器事件类型)向下箭头,然后选择 On-Demand(按需)。
    假设 New Trigger(新建触发器)窗口默认为 Canvas Editor(画布编辑器)。
    下一步是添加刚刚创建的传输映射作为动作。
  6. 在 New Trigger(新建触发器)窗口的左侧窗格中,找到并展开名为 Enterprise Communications(企业通信)的动作组,然后将 Transaction(事务)动作拖至画布上。
  7. 双击 Transaction(事务)动作以显示其参数。
  8. 使用 Transport map(传输映射)向下箭头,然后选择示例 MyXSDTransportMap
  9. 确保 Input(输入)选项卡具有焦点。

book_nbrRows参数(可选)指示实际有效负载包含的行数。在此例中,尽管数组可容纳最多 5 个书籍元素,但是此例中将处理 2 个元素。

查看触发器中所用的变量

假设触发器中所用的变量包含以下信息:

执行触发器时,XML 将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
   <books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <book id="F-132" >
         <author>author</author>
         <title>Future</title>
         <genre>fiction</genre>
         <price>23.99</price>
         <pub_date>2009-07-02</pub_date>
   </book>
   <book id="N-335" >
       <author>writer</author>
       <title>Romance</title>
       <genre>novel</genre>
       <price>11.78</price>
       <pub_date>2003-05-05</pub_date>
   </book>
  </books>

未映射的变量

在此例中,标签检查未映射到触发期变量,并且并非必需项(在 XSD 中,minOccurs="0");因此,不发送该标签。 

相关主题

定义 ASCII 消息有效负载

创建自由格式文本的有效负载

定义 XML 有效负载

添加自定义有效负载

添加映射消息作为有效负载

使用 WebSphere MQ 扩展静态属性