在 soa 架構(gòu)中,程序員經(jīng)常使用 xml 在應用程序之間交換結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)。xml 及其相關技術 — 文檔對象模型(document object model,dom)、xpath、http、xquery 和可擴展樣式表語言轉(zhuǎn)換(extensible stylesheet language transformations,xslt) — 為快速應用程序開發(fā)提供了一個強大的環(huán)境。構(gòu)建在這些技術之上的應用程序?qū)⒄加酶〉膬?nèi)存空間,需要更低的維護成本,同時又擁有更高的品質(zhì)和靈活性。
db2 和其他關系數(shù)據(jù)庫的 xml 方面的特性已經(jīng)相當成熟,因此除了存儲和管理關系數(shù)據(jù)之外,它們還是存儲和管理 xml 數(shù)據(jù)的理想選擇。db2 9 xml 支持(稱為 purexml)提供了以純 xml 的形式(換句話說,就是帶注釋的、樹型的分層存儲)存儲 xml 的能力。在 db2 9 中,xml 數(shù)據(jù)可以用 xml 模式索引,可以從關系數(shù)據(jù)組合而成,可以分解為關系數(shù)據(jù),可以查詢和轉(zhuǎn)換,可以獨立發(fā)布,或者通過混合使用 sql/xml 和 xquery 與關系數(shù)據(jù)組合起來。
web 瀏覽器也正在為客戶機腳本提供更多的功能來有效地處理 xml。通過使用異步 javascript 和 xml(asynchronous javascript and xml,ajax),web 頁面現(xiàn)在可以直接對應用服務器進行遠程過程調(diào)用,并且可以在任何返回的 xml 數(shù)據(jù)上使用 dom api。
本文將展示如何利用 db2 xml、ajax 和 php hypertext preprocessor (php) 提供的功能來編寫簡單的基于 xml 的應用程序。通過示例場景的幫助,您將學習如何在 javascript 中調(diào)用 php 應用程序;如何使用 dom 和 simplexml api 修改 xml 數(shù)據(jù);如何將 xml 從客戶機傳送到應用程序再到數(shù)據(jù)庫;以及如何創(chuàng)建 php web 服務來使用 sql/xml 和 xquery 發(fā)布關于 xml 數(shù)據(jù)的報告。
xml 優(yōu)點
大多數(shù)應用程序都用于創(chuàng)建、存儲、操縱和呈現(xiàn)業(yè)務數(shù)據(jù)。對象包裝是指將業(yè)務數(shù)據(jù)綁在一起,使業(yè)務邏輯更容易處理它們。這些包裝器對象的很多功能都是根據(jù)關系和格式化規(guī)則來提供業(yè)務數(shù)據(jù)的結(jié)構(gòu),并使業(yè)務邏輯能夠操縱、發(fā)布和串行化封裝的數(shù)據(jù)。
圖 1. 基于對象包裝器的應用程序
圖 1 闡釋了使用對象包裝器的一個示例人壽保險應用程序。每個方框表示一個對象,每個對象至少有:
·一個構(gòu)造函數(shù)
·getter 和 setter 方法
·驗證代碼
·內(nèi)部對象層次的串行化
這些對象與實際的業(yè)務邏輯沒有關系。對象包裝是為了使業(yè)務邏輯更容易管理業(yè)務數(shù)據(jù)。包裝數(shù)據(jù)所需的代碼比業(yè)務邏輯要多得多。更多的代碼將導致更多的 bug、更大的固定性、更多的維護和更高的成本。
如果對象中的數(shù)據(jù)變量可以格式化為 xml 結(jié)構(gòu),并且對象的主要作用是將這些數(shù)據(jù)暴露給業(yè)務邏輯并讓業(yè)務邏輯操縱它們,那么可以用 dom 代替對象。
圖 2. 基于 xml 的應用程序
·創(chuàng)建新的 xml 對象。
·更新 xml 對象的值。
·導航 xml 對象。
·使用 xpath 在對象層次中搜索。
·串行化和反串行化 xml 對象層次(換句話說,就是內(nèi)建持久性)。
通過使用 xml,可以避免使用大多數(shù)用于管理業(yè)務數(shù)據(jù)的包裝器對象。應用程序?qū)⒆兊酶雍啙?,并且更多地將重點放在業(yè)務邏輯上,而不是數(shù)據(jù)管理上。
xml 和架構(gòu)
將 xml 引入架構(gòu)中可以為表示業(yè)務數(shù)據(jù)帶來一種標準化的方式。xml 可以提供數(shù)據(jù)的結(jié)構(gòu);xml 模式施加結(jié)構(gòu)和格式化規(guī)則;dom api 和 xquery、xpath 及 xslt 之類的語言使業(yè)務邏輯可以有效地操縱、發(fā)布和串行化數(shù)據(jù)。由于業(yè)務數(shù)據(jù)的 xml 表示在客戶機、中間層和數(shù)據(jù)庫中都是一致的,因此操縱這些對象的代碼也是類似的。
我將展示如何在三層環(huán)境中構(gòu)建基于 xml 的應用程序,這個三層環(huán)境由以下幾個部分組成:
·web 客戶機:asynchronous javascript and xml (ajax),dom
·應用服務器:php 和 simplexml
新聞熱點
疑難解答