InfoPath 使用和生成的输入与输出文件都符合 XML 标准,以提供与其他系统(包括应用程序、操作系统以及中间层和后端系统)的互操作性。综合地使用这些标准(例如 SOAP)使得与启用 XML Web 服务的系统共享数据变得非常简单。
XML 标准用于创作从属于自定义 XML 架构的单个 XML 文档,以及设计 InfoPath 表单模板。例如,如图 1 所示,使用 XML 架构可以提供验证和结构化编辑,而使用 XSLT 可以提供能够以不同于 XML 文档的布局来表示 XML 数据的多个视图。
图 1. 在编辑过程中如何使用 XML 标准
可扩展标记语言 (XML) 1.0 第二版
XML 文档中使用的标记没有进行预定义。相反,万维网联合会 (W3C) XML 推荐指定了一套规则,用于创建自己的有意义的元素和属性集。例如,销售报表、法律表单以及卫生行业的报告都对数据内容和结构有不同的要求。使用 XML 可以针对每个行业的需要适当地定义该数据内容和结构。
InfoPath 使用 XML 作为其原生数据格式进行输入和输出。在编辑 XML 文档时,InfoPath 允许您添加和删除从属于自定义 XML 架构的有效 XML 元素和属性。当您保存或提交 InfoPath 表单时,XML 文档会根据架构保持有效。使用 XML 标准可以打开和编辑由 XML Web 服务和启用 XML 的系统所使用的 XML 文档。
XML 输入或输出文档可以是 XML 文件或 SOAP 数据包的一部分。XML 文档指定它基于的表单模板的位置。表单模板包含将 XML 文档用作表单所需的所有信息。
XML 文档可以本地保存或者作为附件通过电子邮件发送给其他用户。例如,您可以从服务器获得 InfoPath 表单、添加或编辑数据、保存表单并通过电子邮件将其发送给某人以供查看,然后向服务器提交结果。这就启用了集中的端对端工作流,可支持各种业务方案。
XML 中的命名空间
InfoPath 支持在一个 XML 文档中使用多个命名空间。例如,下面的 XML 文档是一个名为 Contoso 的虚拟公司的简化销售报表,说明了使用两个命名空间的情况。 和 元素定义在默认的命名空间中,该命名空间映射到 URI http://schemas.contoso.com/salesReport。 和 元素定义在独立的命名空间中,该命名空间使用 pricing 前缀并映射到 URI http://schemas.contoso.com/pricing。
<salesReport xmlns="http://schemas.contoso.com/salesReport"
xmlns:pricing="http://schemas.contoso.com/pricing"
<customer
<productPentosel</product
<pricing:unitsSold100</pricing:unitsSold
<pricing:pricePerUnit35</pricing:pricePerUnit
</customer
</salesReport
在另一个示例中,XML 命名空间用于多信息文本字段。多信息文本字段绑定到引用 XHTML 架构命名空间的 XML 数据元素。有关详细信息,请参阅本文的 XHTML 部分。
XML 架构 (XSD) 1.0
InfoPath 支持 XML 架构 1.0,包括第 1 部分:结构和第 2 部分:数据类型。InfoPath 可以读取和使用自定义的 XML 架构。在设计表单模板时,InfoPath 在三种方案中使用现有的自定义 XML 架构或创建自定义 XML 架构:
使用现有架构。您可以通过指向由遵循 XML 架构标准的工具所创建的自定义 XML 架构,来开始设计表单。XML 架构显示在 Data Source 任务窗格中。当您从架构节点拖放到布局区域(称为表单区域)时,会自动建议相应的用户界面 (UI) 控件。基于该架构,InfoPath 会生成用于结构化编辑和验证的规则。
使用 Web 服务的现有架构。使用“数据源安装向导”,您可以从 WSDL 信息读取的 XML 架构开始设计一个表单模板。在读取 XML 架构后,用户界面使您能够创建一个表单模板,该模板可以生成遵循 SOAP 消息中的架构的 XML。当最终用户创建基于表单模板的表单时,该表单将生成适用于架构的 SOAP 消息。
派生或定义架构。如果使用“数据源安装向导”打开一个 XML 文件,则 InfoPath 将生成一个说明该 XML 文件的 XML 架构。然后,您可以基于该架构创建一个表单模板。或者,您可以从头开始创建一个表单模板,在定义视图的同时定义架构。当您将一个 UI 控件映射到正在设计的架构的节点时,InfoPath 将自动提示您适合该架构节点的数据类型。InfoPath 将生成可用于其他业务进程的简单的标准 XML 架构。
将数据输入表单时,XML 架构标准用于支持 XML 数据的验证并启用结构化编辑,如以下段落中所述。
在编辑过程中,对自定义 XML 架构进行验证可以帮助用户创建结构化的 XML 数据,以供需要架构验证的 XML 数据的系统重复使用。InfoPath 可以交互式地对架构进行 XML 文档验证,并防止用户将其提交到处于无效状态的 Web 服务或其他数据源。要提交 XML 文档,它必须是完全有效的,包括数据类型。数据验证错误是由红色虚线框围起来的字段、验证屏幕提示(称为内嵌警报)或验证错误对话框(称为对话框警报)表示的。
基于自定义 XML 架构的结构化层次编辑提供了一个简单的用户界面,用于添加和删除 XML 元素和属性,而不显示这些元素和属性。InfoPath 用户界面提供了一种编辑 DOM 树的简单方法,包括插入可选的子树、重复子树或者用一个子树代替另一个子树(其中,架构使用 )。在 InfoPath 中,DOM 树的结构始终是有效的。基于 XML 架构,InfoPath 可显示适用于选定字段或字段组的编辑操作。用户可以通过添加重复或可选的字段组、在字段中输入值或输入多信息文本,来编辑 XML 文档。如果架构允许向 DOM 树的节点添加节点,则视图中的字段组将具有一个下拉菜单,用户可以通过此菜单添加字段组或字段。
XML 路径语言 (XPath) 1.0
XPath 标准的使用贯穿于整个 InfoPath,包括用于自定义验证、XSLT 视图、结构化编辑以及脚本化 DOM。
InfoPath 具有三个验证级别。在编辑 XML 文档时,InfoPath 可根据关联的自定义架构确保文档始终有效。除了这种基于架构的验证以外,InfoPath 还允许您定义使用 XPath 的其他自定义验证规则。您还可以使用脚本编写来定义其他规则和业务逻辑。
作为使用 XPath 标准定义自定义验证的一个示例,假设在某个销售报表中,您要求 Price 字段中的值不能大于 Maximum Price 字段中的值。假设基本的 XML 数据如下:
<salesReport
<customers
<customer
<price1230.00</price
</customer
<sales
<maxPrice1000.00</maxPrice
</sales
</customers
</salesReport
您可以在 Price 字段上自动为自定义验证定义 XPath 表达式。自定义验证规则存储在表单模板的清单文件中。要定义该自定义验证,请在视图中选择 Price 字段,然后使用 Data Validation 对话框来选择 架构节点。然后,自定义验证的 XPath 表达式会自动且透明地进行构造,如下所示:
<xsf:customValidation
<xsf:errorCondition match="/salesReport/customers" expressionContext="customer/price"
expression=". > ../../sales/maxPrice"
<xsf:errorMessage type="modeless" shortMessage="Price exceeds maximum"</xsf:errorMessage
</xsf:errorCondition
</xsf:customValidation
可扩展样式表语言转换 (XSLT) 1.0
XSLT 用于定义和显示 InfoPath 表单中 XML 数据的多个视图。一个表单可以包括多个视图,如概览视图和详细视图。一个视图可以包含字段组,而字段组又可以包含字段、多信息文本字段和其他字段组。字段组表示为嵌套部分,而字段表示为 UI 控件,例如文本框、复选框或下拉列表。InfoPath 生成的每个视图均被存储为独立的标准 XSLT 文件,该文件可以由其他业务进程重复使用。
视图是基于 XSLT 的 DOM 数据树视图。当最终用户打开表单时,XSL 转换 (XSLT) 就会应用到 DOM 树,生成为用户显示 XML 文档的适当表现形式的各种视图。位于 XML 文档开头的元素可能会显示在视图的底部,也可能会以不同的排列方式显示在另一个视图中。
当最终用户编辑 XML 文档(如添加可选或重复的字段组)时,DOM 中的数据将被修改。通过只将必需的 XSLT 部分应用到 DOM,InfoPath 能够以一种优化的方式重新显示已更改的视图部分。
因为由 InfoPath 生成的 XSLT 严格遵循 XSLT 标准,所以任何标准的 XSLT 处理器都可以用来处理服务器上的 XSLT 文件,并且将 InfoPath 表单的只读视图作为 HTML 文档(可以在任何 Web 浏览器中显示)来提供。
XSLT 作为视图的理想基础
视图的内容可以组织得与 XML 数据的结构迥然不同。要以对用户最有意义且易于读取和编辑数据的方式来提供数据,表单模板的设计人员必须能够以不同于 DOM 数据树中的顺序显示数据、忽略视图的某些数据、将相邻的数据树节点重新组织为独立的视图,以及将数据树不同部分的数据收集到单个视图中。
因此,视图内容的顺序和结构必须独立于 DOM 树节点的顺序和结构。这种表现形式和数据的结构独立性要求视图中的分组字段和 DOM 树中的节点之间具有复杂、动态的绑定或映射关系。
为了提供视图和数据之间的这种复杂映射,InfoPath 大量使用了 XSLT。XSLT 是一种强大的样式表语言,它支持复杂的数据转换,并用动态、灵活的内容表现形式提供了丰富的视图。在 SGML 和 XML 创作工具中,使用样式表是一种常见