本文示例源代碼或素材下載
簡介
由於 XML 的簡單性、易讀性、可擴展性以及整個 IT 行業的認同,XML 正被廣泛用作很多軟件系統之間交換消息的媒介。XML 技術已被證明獲得了巨大成功,以致其他行業(例如銀行、保險、醫療和零售等)也正在開發 XML 標准,以便使系統之間的通信更容易、互操作性更強並且更加簡便。
軟件行業也正在改進構建應用程序的標准和工具,以便跨越多學科的應用程序創建和移動 XML 消息和文檔。
本文向您展示快速創建用於 XML 消息的 pureXML 數據庫、與這些 pureXML 數據庫交互的 Universal Web Services 以及 XForms 的一些技巧,其中 XForms 可以用於查詢存儲的 XML 消息並使用一種基於客戶機的浏覽器向用戶顯示其中的數據。
目標
本文的目標是幫助您快速創建一個基於 XML 的應用程序 — 應用 XML 標准,在實現 XForms 的浏覽器與原生存儲 XML 數據的 DB2 pureXML 數據庫之間交換 XML 文檔。
設置場景
本節提供必要的背景信息,以便您理解本文展示的方法。
圖 1. 設置場景
IRS e-File 1120 消息
Internal Revenue Service(IRS)是 United States Department of the Treasury 的一部分,它支持個人和公司報告他們的收入、信用和其他信息。因此,IRS 定義了基於可擴展標記語言(Extensible Markup Language ,XML)的 e-file 消息。e-file 消息是紙質報告的電子替代品。而 IRS e-File 1120 消息是特別為公司確定稅賦而設計的。
XForms
XForms 是一個 W3C XML 標准,用於提供和收集基於表單的數據。它與 XML 緊密集成,並實現表示控制與數據之間的嚴格分離。請參閱本文的 參考資料 小節,獲得更多關於 XForms 的 developerWorks 文章和其他參考資料。
XML Forms Generator
XML Forms Generator 工具是一個 IBM alphaWorks 包(Eclipse 插件),用於輔助 XForms 開發。它可以生成有效而實用的表單,其中包含嵌入在 XHtml 文檔中的 XForms 標記。生成表單的輸入可以是一個遵從某個 XML 模式的 XML 消息(可選)或者是一個 WSDL 文檔。該工具還可以從一個 WSDL 文檔生成響應處理模板和組合請求/響應表單。
XML Forms Generator 產生的任何文檔都可以作為下一個表單、布局和樣式定制的起點。通過擴展點,可以對生成的表單進行後期處理。
DB2 pureXML
IBM DB2 支持存儲、管理和查詢整個 XML 文檔或文檔片段。應用程序開發人員現在可以直接將 XML 數據存儲在 DB2 數據庫中,並從事務、高級數據彈性(advanced data resilIEncy)、安全訪問中獲益,並能夠使用 XQuery 搜索大量 XML 數據。
DB2 pureXML 提供對 XML 的簡單有效的訪問,並具有與關系數據相同級別的安全性、完整性和彈性。
DB2 pureXML 行業包
行業包(industry bundle)示例包和 demo 包含各種行業的示例 XML 文檔、相關 XML 模式的鏈接和可以幫助各種行業的數據庫管理員、軟件開發人員和架構師學習 DB2 9.x pureXML 特性的示例代碼。如果您需要更多信息,或者有興趣下載這些示例,請參閱 參考資料 小節。在本文中,您將使用 IRS e-File 1120 pureXML 行業包。
Universal Services
Universal Services 可用於在很短的時間內在一個 pureXML 數據庫之上建立一組固定的數據庫操作。這些數據庫操作被進一步公布為 Web 服務操作。公布的 Web 服務操作可用於插入、更新、刪除和查詢存儲在 DB2 數據庫的 pureXML 列中的數據。
Universal Services 基於 Data Web Services 機制,通過這種機制可以將數據庫操作、存儲過程和用戶定義的函數公布為 Web 服務。
場景
本節對場景設置作一個概述,並描述需要預先設置的一部分場景。如 圖 2 所示,本文采用的方法由三個層組成 — 數據層、Universal Services 層和用戶交互層。圖 2 進一步說明了這種方法的一個優點:端到端的 XML 數據,這意味著以 XML 的形式存儲數據、交換數據和向用戶提供數據。
如 圖 1 所示,為了通過 XForm 進行顯示,對同一個 IRS e-File 1120 XML 消息進行存儲、交換和使用。
圖 2. 架構概圖
每個層的作用如下:
數據層:數據層表示一個 DB2 pureXML 數據庫,其中包含一個具有 XML 類型的列的表。pureXML 列使數據庫可以以原生格式存儲 XML 消息。存儲在這個數據庫中的數據就是要為之設計 XForms 的數據 — IRS 1120 e-File 消息。為各種不同的基於 XML 的行業標准設置示例數據庫的一種便捷方法是使用 DB2 pureXML Industry Bundles。本場景中使用的行業包是為 IRS e-File Form 1120 創建的。
Universal Services 層:Universal Services 層使 DB2 pureXML 數據庫中的 XML 列可以通過 Web 服務操作來訪問和修改。
用戶交互層:用戶交互層是本文的主要目的。該層表示通過 XForms 的用戶交互。這些 XForms 允許檢索、修改和更新 DB2 pureXML 數據庫中的數據。XForms 通過 Universal Services 訪問 pureXML 數據庫中的數據。
文章 “通過 Data Web Services 使用面向 pureXML 的 Universal Services” 中描述了用於存儲 IRS e-File 1120 XML 消息的 DB2 pureXML 數據庫的設置和 Universal Services 的設置。
XForms
本節描述創建可以與 DB2 pureXML 數據庫進行端到端的 XML 交換的 XForms 的基本步驟。這些步驟是:
步驟 1: 獲得 WSDL 文件
步驟 2: 構建與 Universal Services 交互的 XForms
步驟 3: 構建顯示 IRS e-File Form 1120 XML 消息的 XForms
步驟 4: 將這些 XForms(來自步驟 2 和 3)合並,創建一個交互式的端到端 XML 應用程序
步驟 1: 獲得 WSDL 文件
設計 XForm 的第一步是通過訪問 URL http://localhost:8080/UniversalServices/wsdl 生成用於 Universal Services 的 WSDL 文件,如文章 “通過 Data Web Services 使用面向 pureXML 的 Universal Services” 所述。 取決於本地系統的設置,主機名和/或端口可能需要調整。本地保存這個文件,將其作為 .wsdl 文件導入或復制粘貼到一個 Eclipse 項目中。在本文中,WSDL 文件被保存為 universalservices.wsdl。
步驟 2: 構建與 Universal Services 交互的 XForms
可以使用 XML Forms Generator(XFG)工具生成交互(請求和響應)XForms 和相應的 XML 文件,以便與 pureXML 解決方案中的 Universal Web Services 通信。XML Forms Generator Eclipse 插件處理上一步導入到 Eclipse 項目中的 Universal Services Web 服務描述。
選擇 universalservices.wsdl 文件,在這個 WSDL 文件上單擊右鍵,選擇 XML Forms Generator 菜單項下的 Generate Request/Response XHtml/XForm 向導(如圖 3 所示)。
圖 3. 從 WSDL 文件生成請求/響應 XHtml/XForm
從該向導中,選擇要生成的 XForms 所需的 Web 服務操作。
XML Forms Generator 向導為選中的每個 Web 服務操作產生兩個文件。其中一個操作是 getXMLDocumentByKey。向導生成的兩個文件分別是 getXMLDocumentByKey.xHtml 和 getXMLDocumentByKey.xml。如清單 1 所示,getXMLDocumentByKey.XML 是將在 IRS e-File 1120 應用程序中提交的一個 SOAP 消息:
清單 1. 生成的 SOAP 消息
<?XML version="1.0" encoding="ASCII"?>
<soapenv:Envelope
soapenv:encodingStyle="http://schemas.XMLsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.XMLsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soapenv:Header
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<soapenv:Body
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UniversalServices:getXMLDocumentByKey
XMLns:UniversalServices="UniversalServices">
<id xsi:type="xsd:string" />
</UniversalServices:getXMLDocumentByKey>
</soapenv:Body>
</soapenv:Envelope>
生成的另一個文件 getXMLDocumentByKey.xhml 是交互 XForm。如果在浏覽器中呈現生成的交互 XForms,則效果如圖 4 所示:
圖 4. 呈現的 getXMLDocumentByKey Web 服務視圖
後面您將使用這個交互 XForm 的一部分,如清單 2 所示。
清單 2. 用於 Universal Services 的 XForms 提交
<xforms:submission id="submit_model_Envelope"
action="http://localhost:8080/UniversalServices/services/UniversalServices"
method="post"
mediatype="text/XML"
replace="instance">
<xforms:toggle ev:event="xforms-submit-done" case="response"/>
</xforms:submission>
步驟 3: 構建顯示 IRS e-File Form 1120 XML 消息的 XForms
將一個 IRS 1120 e-File XML 消息從行業包(如文章 “通過 Data Web Services 使用面向 pureXML 的 Universal Services” 所述)導入到 Eclipse 項目。使用 XML Forms Generator “Generate XHTML/XForms” 向導生成顯示 XForms。該向導使用來自 IRS 1120 e-File XML 消息的數據產生一個 XHtml/XForms 文件(顯示 XForms)。圖 5 展示了經過生成和定制,並在 Firefox 中呈現的顯示 XForms:
圖 5. 呈現的 IRS e-File 1120 XML 示例消息視圖
步驟 4: 將 XForms(來自步驟 2 和 3)合並,以創建交互式的端到端 XML 應用程序
通過合並交互 XForms 和顯示 XForms(參見 清單 3),可以創建一個應用程序,該應用程序可以在 pureXML DB2 數據庫中查詢 IRS e-File 1120 XML 消息,選擇不同的消息,以及使用 XForms 表示控件顯示消息。為了合並交互 XForms 和顯示 XForms,需要完成以下步驟:
確保所有名稱空間設置正確。
建立步驟 3 創建的 XForms 模型,以表示返回的數據。
修改相關的 XPath 引用,以允許訪問一個 SOAP 信封中的數據。
清單 3. 組合後的 XForms 的基本結構
<xforms:switch>
<xforms:case id="request" selected="true">
<!-- Start Page for XForms demo -->
<!-- Create Trigger to get all IRS e-File 1120 messages -->
</xforms:case>
<xforms:case id="primaryKeys">
<!-- Select from list of documents -->
<!-- Copy/Paste from the XForms generated for the
getXMLDocumentByKey web service -->
</xforms:case>
<xforms:case id="request_xforms">
<!-- Form and data of an IRS e-File 1120 message -->
<!-- Copy/Paste from the XForms generated from the
IRS e-File 1120 XML Document -->
</xforms:case>
</xforms:switch>
本文的 下載 小節提供了一個完整的例子,該例子演示了如何合並交互 XForms 和顯示 XForms。
結束語
按照文章 “通過 Data Web Services 使用面向 pureXML 的 Universal Services” 中的說明,您創建了一個數據庫,並安裝了通過 Universal Services 與該數據庫交互的 Web 服務。接著,按照本文的說明,您構建了利用 Web 服務接口檢索、存儲和刪除 DB2 數據庫中的 XML 文檔的 XForms。
這個從 XForms 到 DB2 pureXML 的解決方案提供了支持 XForms 的浏覽器與數據庫之間的端到端的 XML 數據交換(參見 圖 1 和 圖 2)。通過 SOA 接口將 XML 數據從 XForms 集成和提交到數據庫,這意味著用戶與數據庫之間的步驟更少,服務器處理也更少,並且可以更快地從支持 XForms 的浏覽器中檢索和處理 XML 數據。