级别: 中级 Bryan Patterson, DB2 Data Server 解决方案架构师, IBM Dexiong Terry Zhang, 软件工程师(带薪实习), IBM
2009 年 7 月 13 日 在许多国有或私有企业中,表格处理都是一项主要的日常任务。基于纸张的流程常常需要占用大量资源和时间,得到的数据往往不准确,也不完整。本文将介绍如何构建一个有效的电子解决方案来解决数据捕获、提交和管理问题。本文将用三步构建一个有效的 XML 电子表格数据收集解决方案,使用 Lotus® Forms 捕获数据,使用 DB2® pureXML® 进行数据存储和查询,并使用 Data Studio Developer 创建一个简单的 Web 服务建立两者之间的联系。只需三步,您就可以拥有一个立即可用的电子表格应用程序,可以将其作为有效、快速、准确收集和管理数据的基础。
简介
当今企业的日常运营在收集数据时严重依赖表格,包括设立账户、索赔、服务请求甚至纳税申请等活动都是如此。许多数据收集流程仍然依赖于纸制表格,但国有和私有企业都在向在线电子表格 (eForms) 转变。与基于纸张的系统相比,eForms 解决方案速度更快、效率更高、使用更容易、得到的数据更佳。World Wide Web Consortium (W3C) 推荐的 eForms 是基于 XForms 技术的 eXtensible Markup Language (XML)。
XML 被认为是最适于在线数据传输的一项技术,许多行业的在线业务中广泛使用 XML。XML 易于理解、灵活、易于扩展,这使它成为构建电子表格数据捕获和提交数据模型的最佳选择。以 XML 为基础构建的 XForms 能够有效地展示和捕获电子表格数据。XForms 可以根据 XML 架构(包含 ACORD、HL7 和 NIEM 等行业标准)验证表格数据。XForms 还支持直接将 XML 数据提交给服务器。XML 数据直接提交减少了数据传输之前的数据格式转换流程。XForms 与平台无关,这意味着开发一个表格就可以部署在多个客户端设备上。IBM® Lotus Forms 提供了一个基于 XForms 的 eForms 解决方案,并带有展示和安全功能,极大地改进了数据捕获流程。
表格捕获数据之后,需要一个有效的方法来管理 XML 表格数据。在关系数据库中,XML 数据通常被视为大型对象,或者分解为几个关系列。如果将 XML 视为数据库中的大型对象,那么任何针对数据的查询都需要完整的 XML 文档检索而不仅仅是检索所需的数据,而且不能使用数据内容确定要检索哪些文档。另一方面,将 XML 数据分解为关系列是一个复杂的流程,成本太高,而且它移除了 XML 中的自我描述语义信息。分解流程还破环了 XML 的灵活性和可扩展性。如果更改了原 XML 文档的结构(在表格应用程序中偶然会发生这种情况),则原来对关系结构的映射将不再有效,需要更新才能反映更改。
IBM 在 IBM DB2 中引入了 pureXML 特性,能有效管理关系数据库中的 XML 数据。使用 DB2 pureXML,您可以将 XML 数据按原来的层次结构存储到数据库中,并可从中检索数据,无需进一步处理或进行格式化。
结合 DB2 pureXML 和 Lotus Forms 为简单而有效的电子表格解决方案提供了基础。
解决方案概述
IBM Intelligent eForms 解决方案以 DB2 pureXML 和 Lotus Forms 为基础构建。Lotus Forms 根据 XML 结构在前端捕获数据,DB2 pureXML 在后端管理表格 XML 数据。前端和后端使用 IBM Data Studio Developer 创建的 Web 服务连接起来,并寄存到应用服务器上,比如 IBM WebSphere® Application Server。该解决方案通过可靠、可扩展的 IBM 软件产品提供端到端的 XML 数据捕获、提交和管理功能。图 1 中的解决方案架构展示了开发时和运行时使用的工具。
图 1:IBM Intelligent eForms 解决方案架构
以下几节简要介绍了组成该解决方案的几个主要产品的功能。有关这些产品的更多信息,请参考 参考资料 小节。
DB2 pureXML
pureXML 特性是在 IBM DB2 Version 9 中第一次引入的。它能够以关系数据库系统中的层次格式在本机存储 XML 数据。这意味着 XML 文档的存储方式可以反应出文档的内部层次结构及其各个元素和属性。使用 pureXML,您可以有效地存储、控制、查询、更新 XML 数据以及存储在同一个表格和数据库中的关系数据。
与其他关系数据一样,DB2 pureXML 中的 XML 数据在表格中以列的形式展示,数据类型为 XML。DB2 支持以行业标准 SQL/XML 和 XQuery 语言编写的查询语句来访问和操作 XML 数据。优化、编制索引、并行控制之类的 DB2 服务和实用程序都可以进行扩展,以支持 XML 数据以及关系数据。图 2 描述了如何使用 pureXML 和 DB2 组成的混合数据库以同样有效的方式访问和管理关系数据。
图 2:内置关系数据和 XML 数据支持的 DB2 架构
使用 pureXML 的本机 XML 存储,您可以利用 XML 的灵活性,并降低 eForms 解决方案的应用程序开销。使用 pureXML,您可以将完整的表格 XML 数据插入单个 DB2 XML 列中,同时维护对各数据元素的有效访问。您可以根据需要返回整个文档或文档子集。存储在 DB2 中的 XML 表格数据无需进一步处理即可直接通过 Intranet 或 Internet 进行传输,以便处理、分析或信息共享。
注意:pureXML 从 Version 9 DB2 for Linux®, UNIX®, and Windows® 和 DB2 for z/OS 时开始可用。本文中的解决方案使用 DB2 Express-C 版 Version 9.5 for Linux, UNIX, and Windows,该工具可以免费下载和使用。下载页面的链接请参考 参考资料 小节。
Data Studio Developer
IBM Data Studio 是一个基于 Eclipse 的工具集合,它包括了一全套设计、开发和管理数据、数据库,以及数据驱动应用程序的功能。它提供了一个开发和测试环境,您可以用来构建数据库对象和应用程序。Data Studio Developer 使您能利用 SQL、SQL/XML、XQuery 和 Java 创建和执行数据库查询、存储过程、Web 服务以及 Java 数据访问层。您可以直接通过 SQL 语句和存储过程生成 Data Web Services,无需编写任何应用程序代码。该 Web 服务支持 SOAP 和 REST 绑定,您可以立即将它们部署到支持的应用服务器,比如 WebSphere Application Server。
本文将介绍如何使用 Data Studio Developer 创建简单的 Data Web Service,以便从 eForm 中检索 XML 数据,并将其直接存储到 DB2。
WebSphere Application Server
IBM WebSphere Application Server 是一个基于 Java、J2EE 和 Web 服务的应用服务器。它提供丰富的应用程序部署环境和完整的应用程序服务集合,包括事务管理、安全性、群集、性能、可用性、连接性和可扩展性等方面的功能。本文中介绍的解决方案使用 WebSphere Application Server Community Edition 进行 Web 服务部署。WebSphere Application Server Community Edition 是免费的。下载页面的链接请参考 参考资源 一节。
Lotus Forms
IBM Lotus Forms 可以自动化基于表格的业务流程,可以促进数据与现有 IT 系统的集成。Lotus Forms 的基础技术是 W3C 开放标准 XForms 和 Extensible Forms Description Language (XFDL)。高级的 XForms 提供一个 XML 数据模型(表格数据和外观分离),还提供一个 XFDL 来控制表格表示层和业务逻辑。通过使用 Lotus Forms,您可以创建具有纸制表格外观的 eForms,也可以创建使用问答风格的 eForms。Lotus Forms 可以基于定义的标准验证数据项,还可以基于输入的数据应用业务逻辑。Lotus Forms 还提供数字签名支持以确保安全。Lotus Forms 可以作为客户端桌面软件部署,也可以作为基于 Web 服务器的表格部署,后者可以通过 web 浏览器访问。
本文介绍如何使用 Lotus Forms Designer 和 Lotus Forms Viewer。Lotus Forms Designer 是构建基于 XForms 的电子表格的开发工具。它以 Eclipse 平台为基础构建,提供了一个 WYSIWYG 环境以及一些可以快速开发 eForms 的高级功能。Lotus Forms Viewer 是一个功能丰富的桌面运行时客户端,支持查看、完成和提交 eForms。
构建解决方案
本节向您介绍创建 Electronic Forms 解决方案的步骤。创建一个完整的电子表格解决方案有三个主要步骤(图表请参考上文图 1):
-
创建数据库和表格以在 DB2 pureXML 中存储表格数据 - 使用 DB2 Command Editor
-
创建和部署 Data Web Service - 使用 Data Studio Developer
-
创建电子表格 - 使用 Lotus Forms Designer
只要安装了必要的软件,很快就能完成整个过程。之后就只需要填充表格并使用 Lotus Forms Viewer 提交数据。本文也将指导您完成这一过程。
最后,本文将向您展示如何对存储在 DB2 中的 XML 表格数据进行查询。
先决条件
在开始构建解决方案之前,您需要在系统上安装和配置以下软件:
-
DB2 9 或更高版本,包括 pureXML
-
Data Studio Developer V2.1,可免费下载试用版
-
WebSphere Application Server Community Edition V2.1
-
Lotus Forms Designer V3.5
-
Lotus Forms Viewer V3.5
有关下载链接以及每个产品详细的安装和配置指南,请参考 参考资料 一节。
本文将向您介绍构建电子表格解决方案的步骤。如果您计划在自己的系统上创建解决方案,那么最好了解数据库系统、DB2 和 SQL 语句的基本知识。对 XML 技术和 Web 服务概念有基本的了解也将很有帮助。
创建存储表格数据的数据库和表格
根据以下步骤为 DB2 中的 eForms 解决方案创建数据库和表格。
-
打开 DB2 Command Editor 窗口并输入以下命令创建数据库:
create database eformdb using codeset utf-8 territory us |
-
输入以下命令连接数据库:
-
输入以下命令创建表格。为了简单起见,此解决方案的表格只有一个列,但要注意该列包含 XML 数据类型。
create table eformtable (form xml) |
创建和部署 Data Web Service
根据以下步骤使用 Data Studio Developer 创建 Data Web Service。Data Web Service 接收 XML 表格数据并将其插入数据库。该解决方案只需要简单的 Web 服务,尽管更复杂的服务也是有可能的。
-
启动 Data Studio Developer。
-
在 Data Source Explorer 窗口,双击 Database Connections > EFORMDB [DB2 Alias] 打开属性窗口(见图 3)。如果您没有在列表中看到 EFORMDB 数据库,请右键单击 Database Connections 项并选择 New... 创建连接。
-
在属性窗口,从 Drivers 下拉菜单选择 IBM Data Server Driver for JDBC and SQLJ Default。输入 DB2 用户名和密码并勾选 Save password 对话框。可以单击 Test Connection 按钮测试连接。单击 OK 完成设置。
图 3:EFORMDB 数据库连接属性
-
在 Data Project Explorer 窗口任意地方右键单击,并选择 New > Data Development Project 打开 New Data Development Project 窗口。输入 eFormProject 作为项目名称。单击 Next,从 Select Connection 窗口的 Connections 列表中选择 EFORMDB(图 4),然后单击 Finish。
图 4:New Data Development Project 窗口
注意:项目名称之类的信息将在 Web 服务 Data Studio Developer 创建的 WSDL 中使用,因此要注意它是区分大小写的。
-
在 Data Project Explorer 窗口中,单击加号 (+) 展开 eFormProject,右键单击 eFormProject > SQL Scripts,然后选择 New > SQL or XQuery Script 创建一个新的 SQL 语句。输入 insertForm 作为名称(图 5)并单击 Finish。
图 5:New SQL or XQuery Script 窗口
注意:该解决方案使用 SQL 和 XQuery 编辑器(默认选项)创建 SQL 语句。您还可以使用向导通过 SQL Query Builder 构建语句。
-
在 insertForm.sql 窗口中,输入以下脚本:
insert into eformtable (form)
values (:document)
|
关闭并保存 insertForm.sql。您现在应该能够在 Data Project Explorer eFormProject 下的 SQL Scripts 中看到该脚本。
-
在 Data Project Explorer 窗口,右键单击 eFormProject > Web Services 并选择 New Web Service... 创建 Web 服务。输入 eFormWebService 作为名称,输入 eForm 作为 namespace URI(图 6)。再次提醒您输入值时注意拼写和大小写。单击 Finish。
图 6:New Web Service 窗口
-
在 Data Project Explorer 窗口中,将 eFormProject > SQL Scripts > insertForm.sql 拖放到 eFormProject > Web Services > eFormWebService*。这将在 eFormWebService 中创建一个名为 insertForm 的新操作。
图 7:拖放以创建 Web 服务的操作
-
在 Data Project Explorer 窗口中,右键单击 eFormProject > Web Services > eFormWebService* 并选择 Build and Deploy... 打开 Deploy Web Service 窗口(图 8)。选择 Server 单选按钮并从下拉菜单中选择 IBM WASCE v2.1 Server at localhost。勾选 Launch Web Services Explorer after deployment 然后单击 Finish(这将启动 WASCE —— 如果还没有启动的话)。
图 8:Deploy Web Service 窗口
-
在 Web Services Explorer 窗口中(图 9),在 Navigator 面板中单击 WSDL Main 下的 URL,然后向下滚动到 Actions 面板选择 Import WSDL To File System。在硬盘上将文件保存为 eForm.wsdl。
图 9:Web Service Explorer 窗口
现在完成了创建并开始部署 Web 服务。
创建电子表格
按照以下步骤创建一个简单的电子表格。
注意,本文的 下载 一节包含示例表格的链接。示例表格处理您在上一节中创建的 Web 服务,但是您应该使用在这些步骤中描述的命名约定。您可以使用附件中的示例表格,也可以创建自己的表格,然后使用这两个表格了解简单表格和复杂表格的示例。两种表格都适用相同的 Web 服务和数据库表格。
-
启动 Lotus Forms Designer 并选择 File > New Lotus Form... 打开 New Lotus Form Wizard。选择 A blank form(默认选择)然后单击 Finish。(如果窗口弹出询问是否切换透视图,请选择 No)。选择 Window > Open perspective > Other...,从列表中选择 Advanced Lotus Forms Designer,然后单击 OK。
-
在 Enclosures 窗口中(图 10),右键单击 WSDL > WebServices 并选择 Enclose WSDL File。选择之前在硬盘上选择保存的 eForm.wsdl 作为表格附件。
图 10:将 WSDL 插入表格
-
在 Instance 窗口(图 11),单击 Creates a new Instance from a WSDL message 按钮。
注意:Instance 窗口显示一个名称为 Instance: Generated 的实例。但是,在此解决方案中,您可以通过封装的 WSDL 文件创建自己的实例,以便将表格提交到 Web 服务。
图 11:在 Instance 窗口中根据封装的 WSDL 创建实例
-
在 WSDL 消息窗口中(图 12),勾选 insertFormSoapInput 复选框并单击 OK。创建一个名为 INSTANCE 的新实例。
图 12:在 WSDL Message 窗口选择需要的操作
-
单击画布底部的 Source 选项卡切换到 Source 视图(图 13)。查找根据 WSDL 消息创建的 xforms:instance
id="INSTANCE" 标签。如图 13 所示,更改 <document> 元素的子元素,以包含以下内容:
<document>
<data>
<name>
<firstname></firstname>
<lastname></lastname>
</name>
</data>
</document> |
图 13:在 Source 视图中更改 INSTANCE
-
单击画布底部的 Design 选项卡切换回 Design 视图。在 Instance 窗口中(图 14),展开 Instance: INSTANCE 项,然后将 data 元素拖放到画布。该操作可以自动为数据元素及其下属元素创建相应的标签和输入字段。每个元素旁边高亮显示的 Refs 列表示该元素绑定到表格上的某个输入字段,上面的数字表示该元素被引用的次数。
图 14:拖放元素以创建标签、输入字段和绑定
-
在 XForms 窗口中(图 15),右键单击 XForms > Model: Default > instance: INSTANCE 并选择 Create Submission for Instance。该操作将创建一个名为 SUBMISSION 的新提交,这是一个将表格数据提交到 Web 服务的过程。
图 15:创建表格提交功能
-
切换到 Source 视图。找到并更改 xforms:submission 标记,如下所示:
<xforms:submission id="SUBMISSION" replace="none" method="post"
action="http://localhost:8080/eFormProjecteFormWebService/Services/eFormWebService"
mediatype="application/soap+xml action=eForm/insertForm">
</xforms:submission>
|
上文的 action 属性的值是 Web 服务 SOAP 绑定的 URL。该 URL 位于封装的 WSDL 消息的 soap:address 标记中,如图 16 所示。
图 16:在封装的 WSDL 中查找 soap:address
mediatype 属性中的 action 是 SOAP 操作的名称。它位于封装的 WSDL 消息的 soap:operation 标记中,如图 17 所示。确保 mediatype 属性中的 action 值没有使用引号。
图 17:在封装的 WSDL 中查找 soap:operation
注意:对于复杂的 Web 服务,可能有多个 soap:operation 项。找到用来创建实例的 soap:operation。在本例中,因为您创建实例时选择了 insertFormSoapInput(图 12),因此在图 17 中可以选择 eForm/insertForm 操作。
-
切换回 Design 视图。在 Advanced Library 的 Palette 窗口下(图 18),选择 Button (Submit) 并单击画布创建提交按钮。
图 18:使用 Palette 创建提交按钮
您可能会遇到一个弹出 Properties 对话框(图 19),该对话框可以为刚刚创建的对象设置属性。根据需要更改属性并单击 OK。
图 19:创建新对象时可能弹出 Properties 对话框
-
在画布中选择提交按钮,展开 Properties 窗口的 XForms (Submit) 项(图 20)。使用下拉菜单将 submission 选项指向您在上一步中创建的提交,即 SUBMISSION。
图 20:将提交按钮指向我们创建的提交
-
在 Enclosures 窗口中(图 21),右键单击 WSDL > WebServices > eForm.wsdl,然后选择 Delete 从表格中删除 WSDL 消息。
图 21:需要删除封装的 WSDL
-
将表格另存为 eForm.xfdl 并关闭 Lotus Forms Designer。
提交 eForm 数据
现在可以使用 eForm 捕获信息并通过 Web 服务将数据提交数据库了。请按照以下步骤进行:
-
使用 Lotus Forms Viewer 打开 eForm.xfdl。输入一些示例数据并单击 Submit 按钮通过 Web 服务将表格发送到数据库。
-
再填写并提交一些示例表格。下一节中的查询示例将以表 1 中展示的样例数据为基础。
-
提交样例完成后,只需要关闭 Lotus Forms Viewer 即可。
表 1:样例数据
| 名 | 姓 | 用户 ID | 电话 |
|---|
| John | Smith | 6932 | (483)483-2838 | | Ted | Wilson | 4823 | (593)583-4824 | | Adam | Smith | 9583 | (284)099-8488 | | Charles | Brown | 4388 | (483)238-2273 | | Jeff | Gordon | 7447 | (558)387-3112 |
从数据库中查询 eForm XML 数据
提交了表格数据之后,您可以查询插入到 DB2 中的 XML 表格数据。DB2 Version 9 支持使用 SQL/XML 和 XQuery 查询 XML。本例使用 SQL/XML 查询。有关 SQL/XML 和 XQuery 语句的详细说明,请参见 参考资料 一节。
打开 DB2 Command Editor 窗口或 Command Line Processor(或者使用 Data Studio,为这次查询创建一个新的 SQL 脚本)。输入并执行以下 SQL/XML 语句。
-
以下查询从提交的所有表格中查询用户 ID 并将它们以 varchar 形式返回:
select xmlcast(xmlquery('$f/data/userid/text()'passing form as
"f") as varchar(15)) as ID
from eformtable
|
假设使用表 1 中的样例数据,那么在 DB2 Command Editor 窗口中执行上述语句返回的结果如图 22 所示。
图 22:示例查询 1 的查询结果
-
以下查询查找所有姓为 Smith 的用户信息,并以关系格式返回数据:
select t.fname as "First Name",
t.lname as "Last Name",
t.id as "User ID",
t.phone as "Phone"
from eformtable, xmltable('$d/data' passing form as "d"
columns fname varchar(20) path 'name/firstname',
lname varchar(20) path 'name/lastname',
id varchar(20) path 'userid',
phone varchar(20) path 'phone') as t
where xmlexists('$d/data/name[lastname="Smith"]'
passing form as "d")
|
假设使用表 1 中的样例数据,那么在 DB2 Command Editor 窗口中执行上述语句返回的结果如图 23 所示。如果使用的不是该样例数据,那么需要移除或更改 xmlexists 的谓词。
图 23:示例查询 2 的查询结果
注意:IBM 还提供高级商业智能工具(比如 IBM DataQuant 和 Cognos)来生成 DB2 中 XML 数据的完整报告。更多信息请参考 参考资料 一节中的 DB2 pureXML wiki 链接。
结束语
DB2 pureXML 和 Lotus Forms 可以通过 Web 服务连接起来,这两者的结合能够基于有效的电子表格收集和管理数据。本文演示了如何借助三个行业领先的 IBM 开发工具:DB2 pureXML、Data Studio Developer 和 Lotus Forms 轻松创建电子表格解决方案。该解决方案提供了各种领先的技术,包括 eForms 设计和提交 (Lotus Forms)、Web 服务开发和部署 (Data Studio Developer) 以及 XML 数据存储、控制和访问 (DB2 pureXML)。该 eForms 解决方案之所以简单,是因为它基于端到端的 XML 数据流:在 Lotus Forms 中以 XML 格式捕获数据,并以该格式提交到 Web 服务,然后直接存储到 DB2 pureXML,无需任何中间转换和操作。端到端的 XML 流不仅简化了解决方案开发流程,而且简化了执行过程。该解决方案的实现非常简单,但是极大地提高了国有和私有企业捕获、管理和分析信息的效率。
致谢
作者衷心感谢为本文提供素材和反馈的人们,尤其感谢 Eric Dunn 为我们提供了有关 Lotus Forms 的大量有价值的信息。
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| 使用数据库和 Web 服务的表格 | HouseholdCensusSurvey.zip | 376KB | HTTP |
|---|
参考资料 学习
获得产品和技术
讨论
作者简介  | 
|  | Bryan Patterson 是 IBM Silicon Valley Laboratory 的高级解决方案架构师,专门从事数据库管理方面的研究。他已经有 20 多年的软件行业经验,曾在开发、质量保证和生产规划方面担任管理职位。他的电子邮件地址为 bryanp@us.ibm.com。 |
 | 
|  | Dexiong Terry Zhang 是 IBM Silicon Valley Lab 的一名软件工程师(带薪实习)。他毕业于州立圣何塞大学
并获得计算机科学学士学位。他于 2008 年加入 DB2 pureXML Enablement 团队,目前在多个项目中负责 pureXML 解决方案集成方面的工作。 |
对本文的评价
|