适用于:
Microsoft® Office InfoPath™ 2003
摘要 Microsoft Office InfoPath 2003 是一个综合工具,它在传统文档编辑的最佳体验 (如文字处理程序和电子邮件应用程序) 基础上,结合了严格的表单包数据捕获功能。本文描述了 InfoPath 的设计初衷,即其需要处理的问题,同时还描述了解决这些问题所用的设计原则和 XML 行业标准。
| 简介 | |
| 编辑文档时如何使用 XML 标准 | |
| 理想的 XML Web 服务客户端设计 | |
| 术语 | |
| 结论 |
从技术上讲,Microsoft® Office InfoPath™ 是一个高级 XML 制作工具,它可以帮助普通的最终用户根据自定义 XML 架构创建 XML 文档。最终用户编辑 XML 文档时,对文档的修改受 XML 架构的控制。
通过对文档应用 XSLT 样式表单,程序可显示丰富的格式化视图,最终用户可通过这些视图与 XML 文档相交互。XML 文档中的叶节点或属性值显示为字段,如文本框或复选框,而节点的层次则表现为字段组。
通过显示当前所选字段或字段组的有效编辑操作,InfoPath 为 XML 数据提供了有效的结构化编辑。这种结构化编辑功能使最终用户可以对丰富的动态视图中显示的字段组进行处理,无需查看元素和属性便可添加和删除有效的 XML 元素和属性。
InfoPath 解决了在 XML 出现前一直未能解决的数据收集问题:通过提供能够随字段组 (使用了 XML 层次数据模型) 的添加而增长的表单,InfoPath 将文字处理程序文档的灵活性添加到了严格的表单应用程序验证功能中。复杂的 XSLT 转换是此解决方案不可缺少的一部分,它为 XML 数据提供了易于使用的动态视图。
收集企业数据时,用户通常希望使用比静态表单更灵活的数据收集方式,同时在对数据进行结构化编辑和验证处理时又希望比文字处理应用程序文档更富结构化。
传统的表单是静态的,而且受长度的限制。它们具有固定数目的重复行,同时在表单填满时不能够进行扩展。传统的表单由于缺乏丰富的编辑功能而不易于使用。用户通常需要一次提供所有信息。
另一方面,使用文字处理应用程序创建的传统文档可使用户轻松地添加和删除内容,但却没有提供多少指导,帮助用户输入完整有效的结构化信息;在此类程序中很难对文档中定义的任何字段进行数据值和数据类型的验证,或根本就没办法进行验证。字段中的数据因为缺少适当的标签而难以引用和自动重用。文档中的数据多是自由格式而非结构化的;您不能够将信息分组,如不能将 "Address" 标签用于 "Street"、"City" 和 "State" 字段组。
因此,需要这样一种数据收集方式:既灵活又富结构化;但由于这种技术尚不可用,因而开发人员不得不创建自定义应用程序,这通常需要编写大量代码。自定义应用程序十分昂贵且难于修改,同时还需要编写自定义进行验证。自定义应用程序通常还需要进行最终用户培训,而且其结果数据很难在其他业务流程中重用。
为了满足这种灵活的结构化编辑需要,InfoPath 应运而生,作为一个综合工具,它囊括了文字处理和表单程序各自的优点。要使普通最终用户能够轻松地编辑 XML 元素和属性,且保证 DOM 数据树始终有效,必须解决两个主要设计问题:如何在不显示 XML 元素和属性的前提下为用户界面提供结构化的 XML 编辑,以及如何以不同于 XML 数据结构的显著方式组织 UI 视图中的内容。要实现这种文档制作和表单制作的综合工具,必须满足的设计要求就是使用 W3C XML 标准从本质上解决这些设计问题。
一个必须解决的主要技术设计问题就是如何在不显示元素和属性的前提下在简单用户界面中提供添加和删除 XML 元素和属性的功能,同时还要保持 DOM 树对于自定义 XML 架构的有效性。用户界面需要提供一种简单方法来编辑 DOM 树,其中包括添加可选子树、替换子树选项和扩展现有子树。
要提供这种简单的用户界面,DOM 树应显示为字段组或节。字段组就是 UI 控件组,如文本框和下拉列表,其作为简单用户界面可使用户查看与编辑有层次的 XML 数据。字段组可包含其他字段组,且可以是可选的或重复的,就象 DOM 子树可以包含其他子树也可以是可选的或重复的一样。当用户将鼠标置于字段组周围,单击字段组上显示的下拉菜单,然后选择插入字段组名称时,就会向 DOM 树中添加子树。
InfoPath 通过使用特定的 XML 架构来约束和指导数据编辑,并以此提供 XML 数据的结构化编辑。架构可以控制是否在字段组的下拉菜单中显示插入和删除命令。架构还可用于验证。要对不具备 XML 架构的 XML 文档启用编辑时,InfoPath 可以从 XML 文档生成一个架构。
另一个需要解决的技术设计问题就是如何以完全不同于 XML 数据结构的方式对 UI 视图内容进行组织。若要以一种对用户有意义的方式呈现数据,使用户可以轻松地阅读和编辑数据,设计人员必须以一种不同于 DOM 数据数据树的顺序来显示数据、从视图中忽略某些数据、将邻近的数据树节点重新组织到单独的视图中,并将来自数据树不同部分的数据收集到一个视图中。
因此,视图内容的顺序和结构必须独立于 DOM 树节点的顺序和结构。以独立结构呈现数据需要一种复杂的动态绑定,或是在视图中的分组字段与 DOM 树中的节点之间建立映射关系。
为了提供这种视图和数据之间的复杂映射,InfoPath 广泛使用了 XSLT。XSLT 是一种强大的样式表语言,支持复杂的 XSLT 格式转换,同时还支持以灵活的动态表现形式提供丰富的内容视图。每个视图使用一个 XSLT。使用样式表单是 SGML 和 XML 制作工具中一种建构良好的通用设计方法,XSLT 是用于此类复杂转换的 W3C 标准样式表单。
为了避免每次用户修改 DOM 中子树的结构时都要运行整个的 XSLT 格式转换,InfoPath 采用了算法来确定需要更新视图的哪一部分。然后应用 XSLT 样式表单的相关部分,刷新视图的受影响部分。
InfoPath 构建于 XML 标准基础之上,包括以下内容:
| • | 可扩展标记语言 (XML) 1.0 第二版 |
| • | XML 中的命名空间 |
| • | XML 路径语言 (XPath) 1.0 |
| • | XML 架构 (XSD) 1.0 第一部分:结构;第二部分:数据类型 |
| • | 可扩展样式表单语言转换 (XSLT) 1.0 |
| • | 可扩展超文本标记语言 (XHTML) 1.0 |
| • | 级联样式表单 (CSS) |
| • | 文档对象模型 (DOM) 1.0 |
| • | XML 数字签名 (XML DSig) |
| • | 简单对象访问协议 (SOAP) 1.1 |
| • | Web 服务描述语言 (WSDL) 1.1 |
| • | 通用描述、发现和集成协议 (UDDI) 1.0 |
例如,InfoPath 使用并生成标准的 XML、XSLT 和 XSD 文件,这些文件可在不同的业务流程中重复使用。InfoPath 使用 MSXML 和 SOAP 工具套件支持这些标准,同时还为 XML Web 服务提供了全方位的集成支持。
图 1 显示了用于 customer 字段组的上下文下拉菜单,此菜单允许用户在该字段组中添加另一个 customer 字段组、删除该 customer 字段组、在采购货品表中插入一个 item 行,或在此字段组中插入一具可选 操作 的字段组。单击此处链接提供了另一种插入 actions 字段组的方法。每个采购货品行上都出现一个较短的下拉菜单。
图 2 阐释如何在编辑过程中使用 XML 标准。
下面是一个使用 InfoPath 编辑 XML 文件的典型方案。此方案显示了如何在编辑过程中使用 XML 标准。
1. | 在 InfoPath 中,用户基于 InfoPath 表单模板创建一个新的 XML 文档,或打开一个基于表单模板的现有 XML 文档。XML 文档是一个 XML 数据文件,其中包含对表单模板的引用,它可以使用 XML 命名空间。 表单模板是一组符合特殊自定义 XML 架构的文件,用于提供 XML 文档的结构化编辑。这些组成表单模板的文件可以打包成单独的文件放在常规文件夹中,也可以打包成文件存储在 cabinet 文件夹中。无论哪种情况,这些文件都是标准的 XML 文件,且可能支持诸如脚本文件一类的文件。 |
2. | 如果使用 XML 签名对 XML 文档进行了数字签名,则 InfoPath 在打开此 XML 文件前将确认其一致性。 |
3. | InfoPath 在内存中为 XML 文档创建一个 DOM 数据树。 |
4. | 对 DOM 树应用 XSLT 转换,为用户生成以适当形式呈现数据的文档视图。XML 文档的头部元素显示在视图底部,同时排列顺序因视图而异。视图由 UI 容器 (如包含字段的节)、格式文本字段和控件 (如下拉列表) 组成。容器可以包含其他容器。 |
5. | XSLT 转换将生成 XHTML 输出,并用 CSS 控制 XHTML 的外观表示。 |
6. | 如果 XML 架构允许向数据树的节点添加节点,则映射到节点的字段或字段组将会有一个下拉菜单,供用户添加或删除字段组。用户可通过添加重复或可选字段组、输入值、选择选项或输入格式文本对文档进行编辑。如果 XML 架构节点关联到 XHTML 架构,InfoPath 将会提供一个用于创建格式文本的 UI。用户输入格式文本时,XHTML 内容会作为 DOM 的子树被创建。 |
7. | DOM 树始终有效。用户编辑 XML 文档时,程序将根据与文档相关联的 XML 架构对编辑内容进行验证。根据 XML 架构验证对尝试的 DOM 结构和叶节点更改进行验证可确保其数据类型和值的有效性。如果尝试的更改无效,会打开一个验证对话框,且不会对 DOM 树应用这些更改。如果更改有效,将会更新 DOM 树。 |
8. | 视图的更改部分将被刷新,刷新的方法就是仅对 DOM 树应用 XSLT 样式表单中需要更新的部分。 |
9. | 用户可以保存 XML 文档,还可以通过纯 HTTP 或 SOAP 提交 XML 文档。除非文档对于 XML 架构是有效的,否则不允许用户提交文档。 |
设计表单的方式有若干种:启动现有的 XML 架构、连接一个 Web 服务并获得其 XML 架构,从新表单或 XML 数据文件自动生成架构等等这些方式都可用于设计表单。下面的过程介绍了这些表单设计方案。图 3 阐释了设计表单模板的基本用户界面。
通过启动现有 XML 架构设计表单:
1. | 在 InfoPath 中,单击设计表单加载现有 XML 架构,然后选择一个现有 XML 架构文件作为数据源。XML 架构被加载到任务窗格中,并作为树控件显示。 |
2. | 使用“设计布局”工具在一个或多个视图中放置 UI 控件,如行和背景设计。这将生成一些 XSLT 元素。XSLT 视图和 XML 架构会通过表单模板自动建立关联。 |
3. | 通过使用拖放将 XML 架构元素映射至视图中的 UI 控件。InfoPath 根据架构元素类型帮助您选择适当的 XML 架构元素控件。例如,如果 XML 数据类型为日期型,InfoPath 会建议您选择一个日期选取器控件。根据在 XML 架构中的选择,InfoPath 可以插入可选字段组或重复字段组。将 XML 架构元素映射至 UI 控件后便生成了 XSLT 结构。 |
4. | 保存表单模板。您可以将组成表单模板的文件打包成单独的文件放在常规文件夹中,也可以打包成文件存储在 cabinet 文件夹中。无论哪种情况,这些文件都是标准的 XML 文件。现在,生成的表单模板随时可供最终用户使用。 |
在 InfoPath 中打开表单时需要一些提供结构化编辑的语义信息,表单模板中包含有所需的全部语义信息。表单模板包括证明文件、定义视图的 XSLT 文件、验证数据所需信息,以及 XML Web 服务的可选资源标识符。
证明或表单定义文件,是组成表单模板的所有文件的通用中心和切入点。证明包含表单模板中对其他文件的引用,同时还包含验证数据和提供结构化编辑所需的信息。XML 架构验证信息根据生成的用户界面而自定义,并添加到证明文件中。例如,如果架构允许向指定子树中插入多个可选元素,则当用户执行单一 UI 操作时,您便可以设计 UI,使用户可以添加多个可选元素。这种自定义方法十分重要,它可为普通的最终用户提供绝佳的用户体验。
您还可以使用现有 XML Web 服务提供的 XML 架构来设计表单。要完成此操作:
1. | 使用 UDDI 定位到相关的 Web 服务。 |
2. | 选择要使用的 Web 服务。InfoPath 读取与此 Web 服务有关的 WSDL 文件,并标识所有要使用的 XML 架构。 |
3. | 打开 XML 架构并加载。 |
4. | 放置 UI 控件并将其与 XML 架构元素和属性相关联。 |
5. | 定义如何使用 SOAP 向 Web 服务提交 XML 文档。 |
如果您想从开始设计表单,并自动生成 XML 架构,则可以:
1. | 单击“设计表单”。 |
2. | 确保“控件”任务窗格上的“自动”创建数据源复选框处于选中状态。 |
3. | 放置 UI 控件。放置控件时,InfoPath 自动创建 XML 架构并将其元素和属性映射至 UI 控件。 |
通过任意已构建好的 XML 数据文件设计表单:
1. | 单击设计表单,然后选择作为数据源的 XML 文件。基于 XML 数据文件自动创建 XML 架构。 |
2. | 按上述操作放置 UI 控件。 |
现在各行各业都开始支持 XML Web 服务。很多后端和中间件系统可以配置为通过使用 Web 服务标准 (如 SOAP、UDDI 和 WSDL) 来进行通信。这些启用 Web 服务的系统包括数据库、工作流系统、企业资源规划 (ERP)、客户关系管理 (CRM) 以及一些其他系统。现在,InfoPath 提供了理想的 UI,可以查看和编辑通过 Web 服务发送的 XML 数据。图 4 阐释了对 XML Web 服务的集成支持。
InfoPath 可以很好地适应 Web 服务的松散耦合模型,在这种模型中,数据作为整个 XML 文档在计算机间发送。这种粗粒度通信很适合 Web 的异步性。作为 XML 文档的高级制作工具,InfoPath 支持文档/文字 SOAP 编码,不支持远程过程调用 (RPC) SOAP 编码。InfoPath 是一个理想的 Web 服务客户端,因为它能够自然读取 SOAP 信息中指定的 XML 架构,然后创建一个基于架构的 UI,使最终用户可以轻松地查看和编辑相应 Web 服务生成或接收到的 XML 文档。
字段组:节、重复节、可选节或重复表。节和重复表是表单中的控件,其中包含有其他控件,且可根据需要进行重复。用户在填写表单时可以插入多节或多行。
DOM 树:表单的数据源结构。特定情况下,是指定义和存储 InfoPath 表单数据的字段和组集合。
在进行数据收集时,InfoPath 使用开放的 XML 标准为最终用户提供灵活但富结构化的 XML 编辑功能。为了提供一种简单的用户界面以可视化显示和编辑 XML 层次数据,InfoPath 将包含 UI 控件的嵌套字段组映射至 DOM 树。XSLT 转换使 UI 视图的内容组织方式与 XML 数据结构存在显著不同。
InfoPath 提供了比静态表单更灵活,比文字处理程序文档更结构化的表单编辑和验证功能。结果就是产生了一种综合工具,此工具在传统文档编辑的最佳体验基础上,结合了严格的表单包捕获功能,就连普通的最终用户也可以创建属于自定义 XML 架构的有效 XML 文档。同时其对 Web 服务的集成支持可使用户轻松定义符合 Web 服务架构的 XML 文档编辑视图。