使用 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 有效负载的传输映射
- 在工作台左侧窗格中,展开要将传输映射添加到的节点。
- 展开 Enterprise(企业),右键单击 Transport Maps(传输映射)图标以显示其弹出菜单,然后单击 New(新建)。
随即显示默认 Transport Map(传输映射)窗口。 - 根据需要命名传输映射,然后将 Version Mismatch(版本不匹配)选项设置为 Pass(通过)或 Fail(失败)。
- 使用 Transport Type(传输类型)向下箭头,选择传输类型。这将限制显示在 Transport Name(传输名称)列表中的传输。
- 使用 Transport Name(传输名称)向下箭头选择将发送 XSD 有效负载的传输。
- 在 To Enterprise(至企业)部分下,单击 Format(格式)向下箭头以显示列表。
XSD File(XSD 文件)和 Root Element(根元素)参数变为可用。
- 在 XSD File(XSD 文件)框中,键入示例 XSD 文件的路径和文件名,或使用 按钮。
- 单击 Query(查询)。
XSD 在传输映射中的呈现方式如下:
数组处理
在该 XSD 中,book(书籍)元素具有 maxOccurs="unbounded",其表示可能存在书籍数组。因此,book(书籍) XSD 元素在事务服务器中被标识为表。
使用 $NULL 宏
当标签始终需要出现在 XML 中但从未分配值时,可以使用 $NULL 宏生成空标签。如果该元素可为空(例如,在 XSD 中,nillable="true"),则生成的标签为 <tag xsi:nil="1"></tag;否则,标签为空标签或 <tag></tag>。
第 2 步:生成从 XML 标签到变量的映射
下面假设应用预计最多有 5 本书。
- 在 Value(值)列下的 Rows In(行数)参数中,键入 5。
- 单击 Map Parms(映射参数)。
数组变量映射
单击 Map Parms(映射参数)后,所有定义书籍的元素都将其 Count(计数)设置为 Rows In(行数)的值,包括静态属性。
已完成的传输映射将类似于如下所示:
3。单击 Validate(验证)(可选),然后单击 Save(保存)。
第 3 步:创建触发器,以使用 XSD 有效负载传输映射作为动作
下面假设您知道如何使用 Canvas Editor(画布编辑器)创建触发器和添加动作。在此例中,将创建按需触发器,该触发器将使用您刚刚创建的传输映射。
- 在 Workbench(工作台)左侧窗格中,展开包含项目的节点。
- 单击 Projects(项目)图标,然后打开相应的项目
- 在 Projects(项目)选项卡底部单击 New(新建)按钮。
随即显示 New Trigger(新建触发器)窗口。 - 为触发器命名。
- 从 Event(事件)选项卡中,单击 Trigger Event Type(触发器事件类型)向下箭头,然后选择 On-Demand(按需)。
假设 New Trigger(新建触发器)窗口默认为 Canvas Editor(画布编辑器)。
下一步是添加刚刚创建的传输映射作为动作。 - 在 New Trigger(新建触发器)窗口的左侧窗格中,找到并展开名为 Enterprise Communications(企业通信)的动作组,然后将 Transaction(事务)动作拖至画布上。
- 双击 Transaction(事务)动作以显示其参数。
- 使用 Transport map(传输映射)向下箭头,然后选择示例 MyXSDTransportMap。
- 确保 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");因此,不发送该标签。