|
|
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> <product>Pentosel</product> <pricing:unitsSold>100</pricing:unitsSold> <pricing:pricePerUnit>35</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> <price>1230.00</price> </customer> <sales> <maxPrice>1000.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 创作工具中,使用样式表是一种常见且容易建立的设计方法,而 XSLT 是用于这种复杂转换的样式表的 W3C 标准。 部分转换、XSLT 生成和聚集文档 为避免每次最终用户在视图中输入数据或单击多信息文本的格式化控件时都要运行整个 XSLT,因此需要使用算法来确定视图中需要刷新的部分。因而,只有 XSLT 样式表的相关部分会应用到 DOM,并且只有受影响的视图部分才会刷新。 您可以简单地设计 XML 信息的 XSLT 视图。InfoPath 会自动生成在复杂的 XML 数据与该数据的有用视图之间形成映射的 XSLT 代码。当您将 UI 控件拖放到表单区域时,InfoPath 将提示您数据结构与视图之间的相应转换。这样有助于避免由于不恰当的 XML 转换而影响表单的实现。 您可以定义将多个 XML 文档合并为一个聚集 XML 文档(如管理总结)的 XSLT 视图。该合并文档可以在 InfoPath 中直接访问,或者使用 Microsoft Windows_ SharePointServices 中的表单库进行访问。 可扩展超文本标记语言 (XHTML) 1.0 InfoPath 使用 XHTML 标准可以使最终用户利用多信息文本框将诸如详细注释这样的格式化文本添加到 XML 文档中。当最终用户选择该多信息文本框时,用户界面中相关的编辑功能变为可用,并允许最终用户输入多种数据,如字体格式、项目符号列表、超级链接、表格和图像。在多信息文本框中输入的数据存储为可导入 xhtml 命名空间的 XML 元素。 要使 XML 文档中的节点能够包含 XHTML 内容,该节点的架构定义必须导入 xhtml 命名空间。然后可以将文档节点绑定到多信息文本框,以使用户可以编辑 XHTML 内容。 例如,下面的 XML 文档片段说明了包含编号列表的 Notes 多信息文本字段是如何存储的: <notes> <ol xmlns="http://www.w3.org/1999/xhtml"> <li>Identify and check with the primary contacts.</li> <li>Schedule Paul to detail the issues.</li> </ol> </notes> 在 salesReport 架构中,<notes> 元素的类型是 xhtml,它可以包含导入 xhtml 命名空间的所有元素。 层叠样式表 (CSS) 在设计表单模板时,CSS 标准与 XSLT 结合使用来描述视图中的嵌套字段组和字段的格式。要显示一个视图并设置其格式,XSLT 文件将生成包含 CSS <style> 元素的 XHTML 输出。 例如,如果更改视图的配色方案,那么 XSLT 文件中的 CSS 标记将发生相应的改变。当您在 Color Schemes 任务窗格中选择“蓝色”配色方案时,该视图的 XSLT 文件会将以下标记包括在 <style> 元素中: H1 { MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; COLOR: #1e3c7b } .accentDark { COLOR: white; BACKGROUND-COLOR: #517dbf } .accentLight { COLOR: black; BACKGROUND-COLOR: #ebf0f9 } 如果您将配色方案更改为“红色”,则 XSLT 文件中的颜色值将进行相应地更改。 文档对象模型 (DOM) 1.0 InfoPath 会在您打开、编辑、保存或提交 XML 文档时使用 DOM。当您将 XML 文档作为 InfoPath 表单打开时,将在内存中创建一个 XML 文档的内部表示形式以作为 DOM 树。在编辑 XML 文档时,将根据 XML 架构来验证这些更改,然后将其保存在 DOM 中。当您保存 XML 文档时,将读取 DOM 树,并将其保存为 XML 文件。当您提交 XML 文档时,将读取 DOM,并将其作为 XML 文档发送。 您可以通过编程方式访问 XDocument.DOM 来更改表单中的值,同时还可以添加或删除符合该架构的字段组和字段。要编写访问 XML 数据的脚本,您可以使用熟悉的 W3C DOM 来访问数据树。DOM 提供了一个 XML 树的表示形式,以及一个您可以使用 Microsoft Visual BasicScripting Edition (VBScript) 或 Microsoft JScript创建脚本的对象模型。例如,以下代码片段将 LastName 属性设置为“Smith”: XDocument.DOM.documentElement.setAttribute("LastName", "Smith") XML 数字签名 (XML DSig) InfoPath 支持使用 W3C XML 数字签名标准进行签名的 XML 文档。一个 InfoPath 表单可以使用一个或多个 XML 数字签名进行签名。表单是在整个 XML 文档的级别上签名的。已签名的表单只能以只读方式打开。只要表单已签名,InfoPath 就不允许对 XML 文档中的任何数据进行编辑。 在打开一个 XML 文档时,InfoPath 会检查它是否经过数字签名。如果 XML 文档不包含签名,则立即打开表单,并显示给用户。如果 XML 文档包含签名,则 InfoPath 将对文档进行解码,以查看是否与签名相符。如果根据签名,XML 文档是有效的,则打开表单。如果根据签名,XML 文档无效,则显示一个警告对话框,同时打开表单。 用户在提交 XML 文档之前可以对其签名。在设计表单模板时,您可以指定是否允许对表单签名。您还可以指定如果表单缺少签名,当用户提交表单时是否显示对话框以提示用户对表单签名。要对表单签名,用户必须在自己的计算机上安装证书。 数字签名位于 XML 文档内部的某个节点中。在设计表单模板时,您可以指定在哪个节点中存储签名。签名节点的位置将作为 XPath 表达式存储在清单文件中。 XML Web 服务 InfoPath 是使用 XML Web 服务标准(包括 UDDI、WSDL 和 SOAP)设计的。对 Web 服务标准的集成支持使您能够轻松地定义用于编辑 XML 文档的视图和表单,而这些文档将按照 Web 服务定义进行交换。图 2 阐释了 Web 服务的集成支持。  图 2. InfoPath 中的 XML Web 服务的集成支持 InfoPath 有助于将 XML 表单与启用 Web 服务的后端和中间层系统(如数据库、工作流系统、企业资源计划和客户关系管理 (CRM) 系统)集成在一起。InfoPath 中对 UDDI、WSDL 和 SOAP 标准的支持将在以下部分中进行说明。 通用描述发现和集成 (UDDI) 1.0 InfoPath 用户界面为使用 UDDI 定位可用的 XML Web 服务提供了易于使用的集成支持。InfoPath 可以与在任何平台上实现 UDDI 1.0 的任何 UDDI 服务器进行互操作。 在您设计新的表单模板和使用“数据源安装向导”时,可以单击 Search UDDI 来搜索 Web 服务。Search Web Service 对话框(如图 3 所示)使您能够搜索指定的 UDDI Web 服务注册表。  图 3.“Search Web Service”对话框 Search the following UDDI server 列表使您能够选择或输入 UDDI 服务器的 URL(例如 http://uddi.microsoft.com/inquire)或者使用 UDDI 1.0 的任何其他服务器。Search in the following field 列表指定您是要按服务提供程序说明还是按 Web 服务说明进行搜索。在 Search for 框中,输入要使用的搜索字符串。 然后,UDDI 请求会由 InfoPath 自动构建,并且会发送到 UDDI 服务器,以返回可以从中进行选择的匹配 Web 服务的列表。匹配的 Web 服务以服务提供程序::Web 服务名称 的格式显示。当您选择一个 Web 服务时,WSDL 文件位置会出现在“数据源安装向导”中,如 http://www.contoso.com/Service.asmx?WSDL。 Web 服务描述语言 (WSDL) 1.1 InfoPath 使用 WSDL 读取 Web 服务的描述,使您能够设计可以从 Web 服务加载初始数据、将编辑后的数据提交到 Web 服务或具有这两个功能的表单。WSDL 文件定义 Web 服务所提供的操作以及每个操作所使用的参数。WSDL 文件还描述如何使用 SOAP 以及该 Web 服务的架构。 填写表单时使用 Web 服务操作 在设计表单时,“数据源安装向导”会读取 WSDL 文件,并使您能够指定表单如何调用两个 Web 服务操作(它们用于检索初始数据和提交表单)。当最终用户创建基于表单模板的表单时,您所选定的第一个操作将由查询视图 使用,它是默认的初始视图。当用户在查询视图中输入或选择一些值并单击查询按钮时,视图中的值将作为输入参数发送到第一个 Web 服务操作,这会将初始数据作为输出结果返回。 然后,会自动显示数据输入视图,包括生成的初始数据。用户可以编辑数据、输入其他数据,以及将表单数据作为 XML 文档提交到 Web 服务。当用户提交表单时,来自该表单的 XML 数据将作为参数发送到您在设计该表单时所选的第二个 Web 服务操作。提交的 XML 文档符合该操作的架构。 例如,在返回每月销售情况的销售报表中,用户可以在查询视图中设置一个值(如销售价格)、在数据输入视图中编辑结果数据,以及添加其他销售项,然后提交该表单。 为其参数选择操作和架构节点 要设计基于 Web 服务的表单,可以从使用“数据源安装向导”指定要使用的 Web 服务的位置开始,方法是通过搜索 UDDI 注册表来查找每个 WSDL 文件位置或者直接键入 WSDL 位置,如 http://www.contoso.com/Service.asmx?WSDL。 然后,该向导可让您选择要使用的每个 Web 服务的操作。InfoPath 使用 WSDL 提取与选定的 Web 服务操作相关联的 XML 架构,并将该架构作为您所设计的表单的数据源。您可以选择与操作的参数相关联的架构节点,以便为参数提供数据。某些情况下,InfoPath 将提示您输入示例值,然后使用这些值自动调用选定的操作,并根据接收到的输出结果设计数据结构。 当您在向导中为参数选择了 Web 服务、操作和架构节点后,InfoPath 将自动创建一个空的查询视图和数据输入视图。Data Source 任务窗格显示每个 Web 服务操作的架构子树,包括用于检索初始数据的 XML 架构和用于提交表单的 XML 结构。 简单对象访问协议 (SOAP) 1.1 InfoPath 非常适合松散耦合的 Web 服务模型,其中数据作为整个 XML 文档在计算机之间发送。这种不太优雅的通讯模型适合于 Web 的异步特性。作为 XML 文档的高级创作工具,InfoPath 支持文档/文字 SOAP 编码,但不支持远程过程调用 (RPC) SOAP 编码。 InfoPath 使用户能够查看、视觉化并有效地编辑通过业务工作流移动的 SOAP 数据包。InfoPath 是 Web 服务的理想客户端,因为它原本就可以读取由 WSDL 指定的 XML 架构,然后创建基于该架构的 UI,从而使最终用户能够轻松地查看和编辑由相应 Web 服务生成或接收到的 XML 文档。 当从 Web 服务请求和接收初始数据以及将 XML 文档提交到 Web 服务时,InfoPath 会使用 SOAP 数据包。例如,要检索初始数据,最终用户可以将销售人员的姓名输入到初始视图的文本框中。InfoPath 将生成的 XML 片段包装到 SOAP 信封中,作为 Web 服务操作的一个输入参数,然后将 SOAP 数据包发送到该操作。XML 片段符合检索初始数据的 Web 服务操作的 XML 架构。 Web 服务操作通过返回 SOAP 数据包作为响应,数据包中包含了作为 XML 片段的初始数据。XML 片段符合该操作的 XML 架构。返回的 XML 片段使用 XSLT 进行转换,并在数据输入视图中提供给用户。然后,用户可以编辑数据并提交表单。 表单可以通过 SOAP 协议将 XML 数据提交到 Web 服务。清单文件存储了表单如何从 Web 服务请求初始数据以及如何将 XML 文档提交到 Web 服务的定义。 超文本传输协议 (HTTP) 1.1 除了使用 HTTP 协议从 Internet 读取 XML 文档以外,InfoPath 还可以使用 POST 方法将 XML 文档提交到 HTTP。在设计表单模板时,您可以在视图中添加 Submit 按钮,或者启用 File 菜单上的 Submit 命令,然后指定要将 XML 文档提交到其中的 URL。 URL 可以指向服务器代码,例如可以处理 HTTP POST 请求的 CGI 脚本。当最终用户提交基于表单模板的表单时,InfoPath 将 XML 文档打包,作为要发送到指定 URL 的 HTTP POST 请求的主体。 术语 字段组:一个区段、重复的区段、可选的区段或重复的表格。区段和重复的表格是表单上的控件,此表单还含有其他控件,并且用户可以根据需要动态添加这种表单。用户在填写表单时可以插入多个区段或行。 DOM 树:表单数据源的结构。尤其指用来定义和存储 InfoPath 表单数据的字段和字段组的集合。 小结 InfoPath 是完全使用 XML 标准构建的,它为数据收集提供了灵活且结构化的 XML 编辑。例如,InfoPath 表单模板是使用诸如 XML、XML 架构、XSLT 和 XPath 这样的开放式标准创建的。XML 格式(包括命名空间)用于输入和输出。XML DSig 提供了在打开或提交表单时的安全性。 XPath 用于整个 InfoPath,例如用于引用 XML 数据结构中的节点的自定义验证规则。使用 XML 架构可提供验证和结构化编辑,从而使普通的最终用户能够创建从属于自定义 XML 架构的有效 XML 文档。 XSLT 可以使 UI 视图的内容以不同于 XML 数据的结构进行组织。将 XSLT 用于视图的优势在于,任何标准的 XSLT 处理器都可以用于处理服务器上的 XSLT 文件,并且将 InfoPath 表单的只读视图作为 HTML 文档提供,该文档可以在任何 Web 浏览器中显示。CSS 与 XSLT 结合使用来描述视图的格式。 多信息文本字段是使用 XHTML 实现的。DOM 树的元素和属性通过 XSLT 映射到包含文本字段和其他 UI 控件的嵌套字段组,提供了一个用于可视化和编辑分层 XML 数据的简单用户界面。 对 XML Web 服务(包括 UDDI、WSDL 和 SOAP)的支持可以为创作符合 Web 服务架构的 XML 文档简单地定义视图。XML 文档可以使用 SOAP 提交到 Web 服务,或者使用 HTTP POST 方法提交到 HTTP 服务器。 在整个 InfoPath 中集成使用 XML 标准,可提供与启用 XML 的系统(包括应用程序、操作系统以及中间层和后端系统)的完全互操作性。由 InfoPath 生成的所有 XML 文档都符合现有的自定义 XML 架构。对自定义设计的 XML 架构的支持使得与后端系统的集成非常简单,只需使用针对后端的现有架构即可,而不必对它们进行修改。
|
|