Using 
xml as a data storage format 用XML做為數據存貯格式
 
問題提出:
在本地應用程序使用XML有什么意義?
 
回答:
介紹
WEB工業的發展導致開發人員通過傳統科技致意和在面向客戶端和服務端之間漸漸保持平衡。瀏覽器,協議,和腳本語言的新標準替換了其它的每個地方。下一步是XML-可擴展的標記語言,相信它會替代HTML并且做為主要的WEB應用程序傳輸文件的格式。XML是為分別轉換數據到各客戶端設計的一種數據的格式。WEB服務器或網絡客戶端將要結合XML數據和一個樣式表和生成很清晰的HTML代碼去顯示數據。
在其它方面,你可以用XML語言去擴展你程序的功能。考慮到XML是一個通用的數據存儲格式,對這樣的問題實際上比DBF或其它關系
數據庫格式更靈活。
為什么你能用XML作為僅有的高級方法去創建WEB頁?XML比單一的標記語言通用性更強,更靈活。你可以用你自己發明的標簽和接口創建自己的數據格式或網絡協議。
下面你將看到一種不標準的XML用法的例子,是用Borland Delphi設計的。
 
分析
 
你的程序需要存儲一些數據在一個文件或傳輸數據到另外的電腦上。你可以保存你的數據在文本文件或一些定義的格式文件中。你要去寫代碼才能支持這種格式。當改變數據結構時,你必須要修改代碼。在一些案例中你不能考慮這個格式是否標準,并且其它開發人員可能不去支持你這種格式。
 
基于XML去設計你的數據存儲和轉換,你將獲得如下的好處:
 
l       確定并且被支持的語法標準;
l       讀寫XML文件的通用程序接口;
l       靈活的數據結構;
l       可用的WEB技術;
 
用XML做數據格式有不好的地方:
 
l       和通常的數據庫不太一樣,XML文本沒有預定的結構。
在很多情況下整個XML文件被裝進內存,所以它只適用于小文件;
l       XML里沒有安全設置,所以你不得不對XML文件進行加密和解密。
l       XML是以文本格式存儲的,所以你不得不在存儲到文本文件之前轉換所有的字段到文本格式。
 
在Delphi里有很多理想便利的途徑去執行這個協議是去設計一個Pascal對象和XML代碼之間的接口。目的是去存儲Pascal類的實例在XML格式并可以從XML文件中把實例恢復。
分開“Pascal對象到XML”的接口,改用兩個接口:“Pascal對象到數據對象”和“數據對象到XML”是一個好辦法(見圖一)。
我想不出一個簡單的解決方案去擴展一些帶XML接口的Pascal類。那就用麻煩點兒的吧,讓我們創建一個新類去存儲和管理一個對象的屬性和數據字段。一個開發人員會需要去寫附加的代碼才能在Pascal對象和數據對象之間移動數據。
 
圖一、XML數據接口
 
設計
我們的任務是去執行兩個不受限制的接口:“Pascal對象到數據對象”和“數據對象到XML”的接口。
 
第一個接口要能夠使一個開發人員可以復制SPO類的一些類和實例的數據結構。“SP0”是標準Pascal對象。SPO類提供數據容器并設置方法去存儲和接收數據。
 
第二個接口要執行實現一個常規的設置去轉換SPO對象到XML文本和visa versa。
 
設計SPO的接口
 
SPO類的主要目的是去存儲和提供訪問數據字段和屬性。因為這樣,去創建一個方便的數據訪問接口要比優化數據存儲方法更加重要。之后,我們將要實現改變數據存儲方法后不影響接口。
 
最開始讓我們定義數據類型,才能被我們的接口支持。我們要考慮的只有五種數據類型在我們的模型里:
l       String(字符串型)
l       Numeric(數值型)
l       Date(日期型)
l       Boolean(布爾型)
l       Object(對象)
 
“Object(對象)”數據類型允許我們使用嵌套一個對象到另一個對象來建立complex(復數)數據結構。在圖二中你可以看到一個數據對象結構的例子:
 
圖二、數據對象模型
 
要在我們的對象里訪問數據我們可以用傳統的方法——取得主工程特性,從中重新讀取對象,從而得到對象特性:
  var 
    O: TspoObject; 
    P: Tspo
PRoperty; 
    S: string; 
  begin 
    P := AnObject.PropByName['Career position']; 
    O := P.TheObject; 
    S := P.PropByName['Title'].Value; 
  end;