IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

使用 XML: 把文件映射成 SOAP 请求,第 1 部分

如何使用轻量级 XML 客户机

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Benoit Marchal (bmarchal@pineapplesoft.com), 顾问, Pineapplesoft

2004 年 1 月 01 日

许多应用程序正在进行升级以适应电子商务交易。关于这个主题的前两篇文章中,Benoit Marchal 介绍了一种简易的实现方法:从大多数业务应用程序已经生成的导出文件中创建 XML 交易。他介绍了在小型公司中部署这种解决方案的经验。请您在本文的讨论论坛 上与作者及其他读者交流您的想法。

有多少次您遇到过这种情形?

开发人员:“那么数量总是存储在 OQTY 字段中?”

管理员:“当然,从那里取就是了。”

开发人员:(后来)“您能帮帮我吗?这些行里怎么没有数量?”

管理员:“噢,天哪!那只是一个例外。那是从工厂来的,他们使用不同的系统。”

欢迎来到奇妙的数据映射世界,这里的每条规则都有例外。这篇文章是 使用 XML专栏中“轻量级 XML 客户机”系列文章的一部分。以前的部分集中讨论了 Java 编程、API 以及创建这种客户机可以使用的工具。 上一篇文章中已经介绍了这个轻量级客户机的第一个版本 —— 客户机使用样式表和 XI 准备并发送 XML 交易 —— 在本文中,我将展示如何编写样式表。

一些背景知识

如果您没有看过本系列中以前的文章,让我再强调一下该项目的特殊偏向:满足简单的需要的一种单纯的解决方案。您可以找到许多杰出的高端 XML 服务器 —— 有商业化的(如 IBM WebSphere),也有开放源代码的。这类产品在电子商务或者企业应用程序集成(eAI)中,处理大量的 XML 交易时非常优秀。

该项目的目的是用一个不那么重要的客户机作为 B2B 电子商务服务器的补充。B2B 电子商务越来越多地采用 XML 交易的形式 —— 订购商品一般需要发送 XML 消息到厂商的 XML 服务器。厂商提供货物(至少 希望如此),但也可能用一些 XML 消息答复,比如提供信息、订单状态,最后还有发票。

部署这样的一个系统,显然需要双方(买主和厂商)必须能够准备和处理 XML 交易。他们该怎么做呢?当然是在两头都安装上一个 XML 服务器。

错误的答案!

并非每个组织都有能力安装和维护一个 XML 服务器,即使他们确实可以从 B2B 电子商务支持中获益。简而言之,服务器的维护太复杂了,成本也太高,除非公司期望处理非常多的交易。考虑以下情形:

  • 我是从保险业务开始我的职业生涯的。多数独立的代理(至少在比利时)都是很小的生意,无力支付运行复杂软件的成本。但是如果能够以电子方式处理新的合同和索赔,他们仍然可以从中获得很大的好处。这样可以提高他们的竞争力(更快的服务、更优质的答复、新的产品),也降低了保险公司的成本,最终转化为更高的利润和价格谈判时更大的余地。
  • 许多其他行业也存在类似的情况:金融部门、不动产、报摊、独立书商、法律服务、卫生保健等等。许多行业都面临着向自营职业者部署 B2B 电子商务的问题。
  • 这种情况也同样适用于电子政务。政府需要收集大量的信息,但是负责提供这些信息的机关或单位不一定能够处理 XML 交易。
  • 这种情况发生在老套的电子商务案例中 —— 买主/卖主的关系。其中的一个伙伴可能是一较小公司,没有财力运行复杂的 XML 软件。部署 B2B 电子商务策略的公司常常发现他们很快可以和大约 20 家公司签约,然后一切努力都搁浅了,因为其他的伙伴不同意一种复杂的解决方案。

基本上,无论什么时候在合作伙伴规模不同的环境中部署 B2B 电子商务解决方案,都会面临着为较小的伙伴寻找适当工具的问题(我已经谈到,为大型的伙伴寻找高端工具要相对容易一些),这最终引起了我对 SOAP 的兴趣。早期的远程过程调用(RPC)是基于一种编程模型的,开发人员编写专门的过程调用。SOAP 也支持那个模型,但是它在传输中使用的是 XML,这意味着任何能够生成 XML 的工具都可用于准备交易。

更具体地讲,在这个轻量级 XML 客户机的例子中,通过 XI(本专栏中的另一个项目 —— 请参阅 参考资料)和 XSLT 的结合,能够把数据导出到文本文件的任何工具都可以准备 SOAP 交易。从我的经验来看,多数小型企业使用的业务管理工具都能导出文本文件,也可能仅仅是集成到一个办公软件包中。轻量级 XML 客户机就利用了这种方法。





回页首


敢于怀疑

不同的应用程序以不同的格式导出数据,因此需要做一些工作为 SOAP 交易重新组织数据。这个过程称为 数据映射,因为您是把导出文件中的信息映射到 XML 文档中。不幸的是,应设对于每个应用程序都是不同的。

在一个最近的项目中,我的公司在数百个办公地点部署了类似的轻量级 XML 客户机。我们发现映射对每个业务管理应用程序都是专门的。所幸的是,这种映射非常简单,一小组初级程序员经过非常少的 XSLT 培训后就足以应付。多数情况下它们可以在一天或更短的时间内准备好一个映射。因此,这种代价对用户是可以接受的。

通常,业务管理应用程序很少描述它的导出文件。这就是忠告:“敢于怀疑”。假设文档不完整或者已经过期了(可能是这样),那么反复试验就是成功的良方。

为了说明如何为这个轻量级客户机建立映射,我已经结合实际项目中的元素准备了一个典型的案例。这家小型企业使用两个市场上出售的应用程序管理订单,程序运行在一台 IBM eServer (以前称为 AS/400)上。每天,它都把两个应用程序中的新订单合并到一个文件中,发送到一台 Windows 工作站上,在那里一个秘书将它们导入一个桌面出版工具包打印(每周大约有 20 到 50 个订单)。尽管不是最直观的结构,但至少有一个导出文件可供轻量级客户机使用。

SOAP 服务器

首先让我们看一看目标是什么。交易是为部署在一台 AXIS 1.1 上的 SOAP 服务器准备的。这个服务器有一个方法, processOrder() ,它需要一个 Order 对象数组。 Order 对象由图 1 中所示的 UML 定义:


图 1. SOAP 数据模型
SOAP 数据模型

导出文件

现在让我们看看您从 eServer 中得到了什么。表 1 显示了从客户收到的文档:

表 1. 导出文件格式

字段 长度 说明
HDR_OTYP3“HDR”表示头记录
HDR_ORFF5订单引用
HDR_ODTE8订单日期
HDR_ODTC8创建订单的日期
HDR_OTOT9订单总价值
LIN_OTYP3“LIN”表示行记录
LIN_ODEP3部门代码
LIN_ORFF5订单引用
LIN_OCOD5产品饮用
LIN_OFI15未用
LIN_ODES35描述
LIN_OQTY2数量
LIN_OPRI9产品价格

基本上还要要求(或者取得)其他一些示例文件。同样,这里的描述也可能是不完整或不精确的。

从描述来看,很清楚导出文件中包含两个记录类型:HDR 和 LIN。HDR 记录包含头部信息(如订单引用),而 LIN 记录包含产品的描述。显然,每个订单最多只能有一个 HDR 记录,但是订单中有多少产品就有多少 LIN 记录。这种带有两种记录的结构在订单文件中是很常见的。

映射分析

现在侦探工作开始了。下一步是比较导出文件和 SOAP 定义。目的是记录下两种定义之间不一致的地方。在这个例子中,通过分析发现:

  • 导出文件中有两个日期,而 SOAP 服务器中只有一个。
  • 日期是 8 个字符长,因此推测不适合用 xsd:date 表示。
  • SOAP 服务器不需要部门代码。
  • 需要检查“未用”字段。
  • 没有找到买主和地址。

进一步的分析有几种选择:研究示例文件、会见用户、创建测试案例,或者 —— 在最好的情况下 —— 和应用程序开发人员交谈。当然,很少有机会与应用程序开发人员交谈,但是用户可以提供大量的信息,因为他能够识别输出文档中的字段,并可以解释文档是如何准备的。

个别情况下,您可能必须创建一个测试案例 —— 用常见的值伪造文档。通过导出这些值并在导出结果中查找它们,您可以记录下每个字段所起的作用。清单 1 是一个示例导出文件:


清单 1. 示例导出文件
HDRAZ5251029200309252003  1899.00
HDRAZ5281029200310272003   149.95
LINWEBAZ525THPRE     IBM ThinkPad R Series Economy          1099.00
LINDITAZ525THPRV     IBM ThinkPad R Series Value         2   400.00
LINWEBAZ528BKXBE     XML by Example                      5    29.99

通过检查这个文件并和用户交流,情况比较清楚了:

  • 订单创建日期和部门代码仅供内部使用。
  • “未用”字段总是空的,因此可能是以前的应用程序留下来的,完全可以忽略。
  • 数量字段可能不含任何数据。进一步的测试发现,当只订购一种产品时, 前述的两个应用程序之一会产生空字段。
  • 买主和地址是不变的,即示例公司的名称和地址。

很少出现映射分析发现缺失信息的情况 —— 即服务器需要的信息既不在导出文件中,也不是一个常量。这是因为业务关系阻碍了电子商务系统。换句话说,两个业务伙伴已经进行了多年的交易,因此他们已经存储和处理了需要的所有信息。这种轻量级客户机只不过是以新颖的方式利用这些信息。

表 2 总结了上述映射分析,并指明如何把导出文件转换成 SOAP 请求:

表 2. 分析总结

SOAP 元素 导出字段 注释
Order/ReferenceHDR_ORFF-
Order/DateHDR_ODTE转换成 xsd:date 格式
Order/Buyer-“Example Corp.”
Order/Address-“Example Street 5, 45202 Cincinnati, OH”
Order/TotalHDR_OTOT-
Item/CodeLIN_OCOD-
Item/DescriptionLIN_ODES-
Item/PriceLIN_OPRI-
Item/QuantityLIN_OQTY如果没有则为 1




回页首


处理遗留数据

新设计的应用程序完全支持 XML,但是所有现存的应用程序转换完成还需要几年的时间。在这期间您能做什么呢?一种有利可图的方法是利用附件(比如这种轻量级 XML 客户机),在已有应用程序功能上建立对 XML 的支持。

这种方法对于商业很有吸引力,因为它提供了一种向新的服务如电子商务的迁移途径。对于开发人员来说不幸的是,这常常意味着要处理过去的、编档不完善的文件格式。对这些文档的广泛分析是成功的唯一保证。

在本文的第 2 部分,我将展示如何把这种分析转化成实际的 XSLT 样式表,用以准备 SOAP 请求。



参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 请在 讨论论坛参与有关本文的讨论。(您也可以单击本文顶部或底部的 讨论来访问论坛。)



  • 下载本文所用的 XI 轻量级 XML 客户机



  • 阅读 使用 XML 中关于轻量级客户机的往期文章:
    • 一种轻量级的 XML 客户机”( developerWorks, 2003 年 9 月)启动了该项目 —— 一种用于电子商务的 XML 客户机,来源于作者在过去两年中从事 B2B 电子商务的经验。
    • 轻量级客户机的第一个版本”( developerWorks, 2003 年 10 月)展示了如何通过 XSLT 创建 SOAP 交易。


  • 看一看 XI,一个以前的 使用 XML项目,解决了在一种 XML 发布方案(或者这一类的 XML 方案)中导入文本文档的问题( developerWorks, 2002 年 4 月)。



  • Dietmar Kuebler 和 Wolfgang Eibach 的“ 将旧应用改造成 Web 服务”( developerWorks, 2002 年 1 月)更多地专注于服务器端的问题,尽管也讨论了把遗留应用程序转化进入电子商务的新时代。



  • 如果您在处理遗留数据,可以通过 Scott W. Ambler 的“ Challenges with legacy data”( developerWorks, 2001 年 7 月)了解您可能遇到的各种问题。



  • 看看 XML Lightweight Extractor,一种 IBM alphaWorks技术,简化了从关系数据库中提取数据的过程。



  • 试一试 XML Data Mediator,另一种 IBM alphaWorks 技术,用于把数据转换成 XML 或者把 XML 转换成数据。



  • 使用 XSLerator 工具可视化地创建 XSL 样式表,这也是 IBM alphaWorks的一部分。



  • 如果不熟悉正则表达式,试一试 The Regex Coach这个工具。



  • 试一试 Unidex 的 XML Convert,把遗留文件映射成 XML 的另一种工具。



  • 进一步了解 IBM eServer 和 IBM WebSphere Application Server,就在 developerWorks



  • 您可以从 developerWorks XML 专区 找到更多有关 XML 的资料。您也可以在 专栏汇总页面 中找到 Benoit的 使用 XML 专栏中发表的所有往期文章。



  • 了解如何才能成为 IBM 认证的 XML 及相关技术的开发人员




关于作者

Author photo

Benoit Marchal 是一位比利时籍顾问。他是 XML by Example, Second Edition 以及其他几本 XML 书籍的作者。Benoit 能够为您的 XML 项目提供帮助。可以通过 bmarchal@pineapplesoft.com 或者他的个人站点 marchal.com 和他联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款