基於 ACORD 人壽資料模型的情境
我們來考慮一個簡單的人壽保險情境,在這個情境中,首先建立一個表示新保單的 XML 文檔,然後查詢和操縱這個文檔,另外還將這個文檔從一層移動到另一層。這個文檔基於合作運營研究與發展協會(Association for Cooperative Operations Research & Development,ACORD)用於人壽保險規範的 XML,它定義了健康保險和年金保險需要交換的資料。
為了申請一個新的保險,客戶需要提供一些基本資料。部分資訊是在一個 PHP 應用程式中填寫的,還有一部分是在客戶機瀏覽器中填寫的。然後,保單儲存在一個 DB2 XML 列中。在 DB2 9 中,XML 類型的列在內部將 XML 資料存放區為一棵解析後的樹,與關係資料存放區在不同的地方。這種方法是 DB2 9 特有的,更早的 DB2 版本則使用關係儲存基礎設施來儲存 XML。
下面是保單 XML 文檔在客戶機與應用程式之間的流程:
·在 Web 客戶機中,客戶更新頁面並單擊 Submit。
·Web 客戶機向 PHP 發出一個 XMLHTTP 要求,以獲得新的空白保單文檔。
·PHP 應用程式開啟一個空白的保單文檔,用一個全域惟一標識符(GUID)更新它,然後將該文檔返回給 Web 客戶機。
·Web 客戶機使用 Ajax 捕捉返回的事件,並檢索 XML DOM,然後用 Web 頁面中輸入的資訊填充該文檔。
·Web 客戶機使用 XMLHTTP 將更新後的 XML 發送給 PHP 應用程式。
圖 3. 建立新的保單請求的 Web 網站。
圖 3 展示了用於建立新的保單請求的 Web 頁面。當使用者單擊 Submit 按鈕後,JavaScript 函數 submitPolicy() 被調用(見清單 1)。該函數向 PHP 應用程式 createNewPolicy.php 發出一個 HTTP 要求,以獲得一個空白的保單。它還設定一個回呼函數 fillPolicy(),用於捕捉從 HTTP 要求返回的事件。
當第一個請求到達中介層的 PHP 應用伺服器時,一個新的 XML 保單文檔被裝載到 SimpleXML 對象中。通過使用 SimpleXML API,用 PHP 應用程式中建立的 GUID 更新 TransRefGUID 元素。
header('Content-type: text/xml');
$fileContents = file_get_contents("$basedir/acord.xml");
$dom = simplexml_load_string($fileContents);
$dom->TXLifeRequest->TransRefGUID=$guid;
echo $dom->asXML();
然後,這個文檔被發送到客戶機。
對於本文,我們假設 GUID 是通過某種機制(例如時間和隨機數的組合)建立的。更重要的是理解如何將表示保單的 XML 文檔視作記憶體中的業務對象階層,以及如何使用 SimpleXML API (或 DOM/XPath)來導航和更新這個對象。
填充基本客戶資訊
在 Web 客戶機中,fillPolicy() 函數讀取返回的值。現在,包含返回 XML 的記憶體中表示的 DOM 對象可用於操縱保單文檔。客戶在 Web 頁面上輸入的資訊被直接用於更新 DOM。當使用客戶資訊更新了保單之後,使用 XMLHTTP 將修改後的 DOM 對象提交回 PHP 應用程式(見清單 2)。即使是 HTML 元件值也是用 DHTMLDocument Object Model (DOM) 讀取的。