在 SOA 架構中,程式員經常使用 XML 在應用程式之間交換結構化和半結構化的資料。XML 及其相關技術 — 文件物件模型(Document Object Model,DOM)、XPath、HTTP、XQuery 和可延伸樣式表語言轉換(Extensible Stylesheet Language Transformations,XSLT) — 為快速應用程式開發提供了一個強大的環境。構建在這些技術之上的應用程式將佔用更小的記憶體空間,需要更低的維護成本,同時又擁有更高的品質和靈活性。
DB2 和其他關聯式資料庫的 XML 方面的特性已經相當成熟,因此除了儲存和管理關聯性資料之外,它們還是儲存和管理 XML 資料的理想選擇。DB2 9 XML 支援(稱為 pureXML)提供了以純 XML 的形式(換句話說,就是帶注釋的、樹型的階層式存放區)儲存 XML 的能力。在 DB2 9 中,XML 資料可以用 XML 模式索引,可以從關係資料群組合而成,可以分解為關係資料,可以查詢和轉換,可以獨立發布,或者通過混合使用 SQL/XML 和 XQuery 與關係資料群組合起來。
網頁瀏覽器也正在為客戶機指令碼提供更多的功能來有效地處理 XML。通過使用非同步 JavaScript 和 XML(Asynchronous JavaScript and XML,Ajax),Web 頁面現在可以直接對應用伺服器進行遠端程序呼叫,並且可以在任何返回的 XML 資料上使用 DOM API。
本文將展示如何利用 DB2 XML、Ajax 和 PHP Hypertext Preprocessor (PHP) 提供的功能來編寫簡單的基於 XML 的應用程式。通過樣本情境的協助,您將學習如何在 JavaScript 中調用 PHP 應用程式;如何使用 DOM 和 SimpleXML API 修改 XML 資料;如何將 XML 從客戶機傳送到應用程式再到資料庫;以及如何建立 PHP Web 服務來使用 SQL/XML 和 XQuery 發布關於 XML 資料的報告。
XML 優點
大多數應用程式都用於建立、儲存、操縱和呈現業務資料。對象封裝是指將業務資料綁在一起,使商務邏輯更容易處理它們。這些封裝器對象的很多功能都是根據關係和格式化規則來提供業務資料的結構,並使商務邏輯能夠操縱、發布和序列化封裝的資料。
圖 1. 基於對象封裝器的應用程式
圖 1 闡釋了使用對象封裝器的一個樣本人壽保險應用程式。每個方框表示一個對象,每個對象至少有:
·一個建構函式
·Getter 和 Setter 方法
·驗證代碼
·內部對象層次的序列化
這些對象與實際的商務邏輯沒有關係。對象封裝是為了使商務邏輯更容易管理業務資料。封裝資料所需的代碼比商務邏輯要多得多。更多的代碼將導致更多的 bug、更大的固定性、更多的維護和更高的成本。
如果對象中的資料變數可以格式化為 XML 結構,並且對象的主要作用是將這些資料暴露給商務邏輯並讓商務邏輯操縱它們,那麼可以用 DOM 代替對象。
圖 2. 基於 XML 的應用程式
圖 2 展示了一個使用 XML 和 DOM 封裝器的樣本保險應用程式。圖 1 中的所有資料封裝器對象都用一個 DOM 對象代替。業務資料是用 XML 建模的,DOM 提供了必要的 API 來:
·建立新的 XML 對象。
·更新 XML 對象的值。
·導航 XML 對象。
·使用 XPath 在對象層次中搜尋。
·序列化和反序列化 XML 對象層次(換句話說,就是內建持久性)。
通過使用 XML,可以避免使用大多數用於管理業務資料的封裝器對象。應用程式將變得更加簡潔,並且更多地將重點放在商務邏輯上,而不是資料管理上。
XML 和架構
將 XML 引入架構中可以為表示業務資料帶來一種標準化的方式。XML 可以提供資料的結構;XML 模式施加結構和格式化規則;DOM API 和 XQuery、XPath 及 XSLT 之類的語言使商務邏輯可以有效地操縱、發布和序列化資料。由於業務資料的 XML 表示在客戶機、中介層和資料庫中都是一致的,因此操縱這些對象的代碼也是類似的。
我將展示如何在三層環境中構建基於 XML 的應用程式,這個三層環境由以下幾個部分組成:
·Web 客戶機:Asynchronous JavaScript and XML (Ajax),DOM
·應用伺服器:PHP 和 SimpleXML
·資料庫: DB2 9 和 SQL/XML,XQuery