DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 應用 XML 管理層次結構的數據
應用 XML 管理層次結構的數據
編輯:XML詳解     
引言

  現實世界中大量的數據都具有層次結構,常見的例子包括組織機構序列(如公司機構、部隊編制、作戰編成)、分類體系(如中圖分類法、裝備體系)、家族譜系等等。因此,層次結構數據的管理,在軟件開發過程當中經常會遇到,是個具有共性的問題。

  數據管理是指如何對數據進行分類、組織、編碼、存儲、檢索、控制和維護,是數據處理的中心問題。關系數據庫管理系統通過索引、查詢優化、事務處理、並發訪問控制、觸發器、錯誤恢復等強大的機制,有效地確保了海量數據存取的高效性,保證了數據的完整性和一致性,並提供了數據的可靠性和安全性,從而具有其它數據管理方式無法比擬的優勢。因此,在企業計算的環境下,對於數據管理,尤其是對於大規模商業數據的管理,關系數據庫占據著主導地位。當前,大量的大型信息系統都是建立在關系數據庫平台之上的。然而,在管理層次結構的數據,以及日益普遍的半結構化、非結構化數據方面,關系模型也暴露出了一些固有的不足。

  關系模型在管理層次結構數據上的不足

  關系數據庫的理論基礎是關系理論,它的數據模型是關系模型。在用戶看來,一個關系模型的邏輯結構是一張規則的二維表,由行和列組成。隨著新的計算機技術的不斷湧現,以及數據的分布性、異構性和半結構化特性以及非結構化特性程度的不斷加強,關系數據庫系統在數據管理上也已經顯示出了一些不足:

  • 現實世界被強制性地映射成為一系列表的集合(即一組二維關系),因此,復雜對象的許多語義,例如,聚合和特化,均被丟棄。
  • 對於現實世界中數據具有的次序語義,必須通過關系表當中額外的附加字段進行描述,以能夠索引同屬元素的次序(在關系數據庫的記錄集中,記錄的次序是沒有意義的。當然,次序沒有意義是關系理論所要求的。這樣,通過建立索引,搜索記錄就變得更為容易,在性能上得到了優化)。並且,要維護這種次序語義也是比較麻煩的。
  • 類似地,對於現實世界中數據具有的層次結構(如父/子、祖先/後代等層次結構),也必須通過關系表當中額外的附加字段進行描述。實際上,也可以把層次結構當作是一種特殊的次序語義。
  • 關系模型要求關系必須是規范化的。為了提高關系模型的規范化程度(目前的最高層次為第五范式),以降低數據冗余度和避免數據的更新(包括插入、修改和刪除)異常,必須在設計時(design-time)人為進行關系的分割(即規范化設計);在運行時(run-time)再進行連接(join)。這就增加了系統設計的難度,而且會影響系統的運行性能,這是因為,連接是關系數據庫當中最為耗時的操作。因此,需要在數據庫的設計時性能和運行時性能之間取得平衡。
  • 一旦數據庫模式發生變化,可能需要重新編寫接口程序。
  • 每條記錄包含固定數目的字段,每個字段占據定長的存儲空間。這樣在存儲敘述性資料時,會浪費空間。此外,
  • 數據庫的結構應該具有相對的穩定性,不太容易被改變,數據庫結構上的改變(即數據庫的重構造,不同於數據庫的重組織)可能導致極其高昂的代價,即可擴展性較差。這也在一定程度上說明了為什麼數據庫的分析和設計具有如此重要作用的原因。這同 XML 在結構上具有的柔性形成了鮮明的對比。

  為此,有必要探討數據管理的新思路和新方法。XML 所具有的一些獨特的優點和功能,使得它在層次結構數據的管理方面嶄露頭角,並已經引起了多方廣泛的關注。

  應用 XML 管理層次結構的數據

  應用 XML 管理層次結構的數據有幾個顯著的優點:便於構建並維護數據的樹狀結構;便於保持數據的次序語義;以及便於與開發平台的樹狀控件相結合等。

  XML 數據模型的特點

  XML 是 W3C 制定的標准,被設計為混合語(lingua franca),以便在用戶和程序之間交換信息。它具有一系列優良特性,如可擴展性,簡單性,自描述性,結構、內容和表現分開等。因此,XML 在自由軟件以及商業軟件業界均獲得了強有力的支持,從而能夠為開發人員提供極大的靈活性。

  從數據建模方面來看,XML 提供了兩種手段:DTD 和 XML Schema。它們可以使開發人員將他們的思想具體化,為成組具有相同邏輯結構的文檔(而不僅僅是單個文檔)制定規范。正是通過這兩種建模手段,XML 承諾幫助創建更加智能的文檔,如提供某種程度的查錯功能,易於從中提取出有用的信息,並將它們按照人們的需要展示出來。

  XML 數據模型的優點

  XML數據模型本身就是樹狀模型,一篇格式良好(well-formed)且有效的(validated)XML 文檔經過 DOM 解析之後,就會在內存當中建立一棵樹。因此,對於現實世界中數據具有的次序語義和層次結構,XML 數據模型能夠很好且方便地由XML文檔解析器予以保持,開發人員不必費什麼力氣。並且,這種次序語義和層次結構的動態維護也是比較簡單的。

  此外,XML 解析器是組件,具有標准的接口,開發人員從而可以避免接口程序的重復開發和分發,以及降低相應的接口程序測試和維護開銷。

  XML 與樹狀控件的結合

  XML 是國際標准,樹狀控件是常用而重要的界面元素,兩者在業界均獲得了廣泛支持;而且,如前所述,XML 數據模型本身就是樹狀模型,這種結構上的內在相似性,使得兩者具有天然的良好的結合性。

  由於在軟件開發過程當中經常會遇到層次結構數據的管理,為避免重復勞動和避免重新開發可能引入的錯誤,從而提高軟件開發的效率和質量,削減開發費用和縮短開發周期,筆者利用組件技術,將XML與樹狀控件相結合,綜合應用 OLE、用戶自繪制等技術,開發了一個組件,在組織機構編碼系統、任務空間概念模型(CMMS)管理系統等多個項目當中得到了復用,取得了預期效果。

  該組件具有如下特點和功能:

  • 便於構建樹狀結構,同時保持數據的次序語義和層次結構
    • 數據源是 XML 文檔。
    • 可在 IE 當中快捷地判斷數據的次序語義和層次結構是否符合要求。
    • 如果組件加載 XML 文檔成功,應用程序便用樹狀控件顯示樹狀結構;否則,給出錯誤提示,便於用戶修改。
    • 支持持久化(Persistence),將用戶的修改回存到 XML 文檔當中。
  • 以圖形化方式,直觀地維護層次結構
    • 增加節點,可在指定位置增加子節點或者兄弟節點
    • 刪除節點。
    • 修改節點。
    • 節點的快速查找和定位。
  • 與 OLE 緊密結合
    • 修改項目時,支持在位編輯(in-place edit)。
    • 修改項目時,支持對特定字符的過濾。
    • 支持以拖-放(drag & drop)方式,在樹之間或者樹自身完成節點的復制操作或者移動操作。
  • 節點的編碼是樹狀結構與關系數據庫結合的關鍵,為此,該組件提供了十分靈活的編碼方式
    • 節點的編碼采用可打印字符形式。
    • 編碼的長度可任意擴展,允許樹有足夠的高度(樹中各節點的最大層次數目)。
    • 每位碼的取值范圍大約為100,允許樹有足夠的度(樹中各節點擁有的最大子樹數目)。
  • 采用用戶自繪制(custom draw)方式,使得樹狀控件具有強大的表現功能
    • 可直觀地調整節點的字體和字號。
    • 可直觀地為每個節點設置不同的顏色。
    • 可打印輸出樹狀結構。

  示例

  為清晰起見,清單1給出了 A 銀行組織機構序列的示例數據(XML 文檔格式):

  清單1. A 銀行組織機構序列示例(XML 文檔格式)
<?XML version='1.0' encoding='GB2312' standalone='yes'?>
<A銀行總部>S
<B1省分行>SA
<C1縣支行>SAA
<D1鎮分理處>SAAA
<E1村儲蓄所>SAAAA
</E1村儲蓄所>
<E2村儲蓄所>SAAAB
</E2村儲蓄所>
<E3村儲蓄所>SAAAC
</E3村儲蓄所>
</D1鎮分理處>
<D2鎮分理處>SAAB
</D2鎮分理處>
</C1縣支行>
<C2縣支行>SAB
</C2縣支行>
</B1省分行>
<B2省分行>SB</B2省分行>
<B3省分行>SC</B3省分行>
<B4省分行>SD</B4省分行>
<B5省分行>SE</B5省分行>
</A銀行總部>

  作為對比,清單2給出了 A 銀行組織機構序列的示例數據(關系模型數據格式),由此不難發現 XML 文檔格式管理層次結構數據的優越性:

  清單2. A銀行組織機構序列示例(關系模型數據格式)

應用 XML 管理層次結構的數據圖片1

  請注意,上表當中的"是否葉子節點"、"層次"、"上一級編碼"、"上二級編碼"、"上三級編碼"、"上四級編碼"等字段均是為了描述數據的層次結構而附加的;同時,上表當中還不得不引入大量的空值(null)。

  A 銀行組織機構序列在該組件中的一種表現效果如下圖所示:


應用 XML 管理層次結構的數據圖片2

  XML 與關系數據庫的結合

  由上述討論可知,應用 XML 進行數據管理具有特殊的優勢,可以有效地彌補關系數據庫在層次結構數據的管理上的不足和存在的問題,有著十分廣闊的前景。

  當然,這個解決方案並不是完美無缺的,存在以下幾個問題。首先,XML 中所有的數據都以字符串進行存儲。這樣在文檔當中搜索或者在必須進行數據類型轉換的時候,可能帶來額外的時間開銷。當數據規模比較大、或者應用程序對時間的要求比較苛刻時,開發人員必須對這種額外的時間開銷給以足夠的重視。而解決這個問題的唯一途徑就是,建立一個典型的應用程序,並對它進行強度測試(stress test)。其次,XML 文檔在給人們帶來易讀性的同時,也具有潛在的安全性隱患。另外,XML 的許多相關標准和技術,還處於草案階段,沒有最終定型,不同技術廠商之間的利益紛爭也可能帶來比較嚴重的問題。

  因此,一個自然的想法就是將 XML 與關系數據庫結合在一起,以發揮各自的長處,揚長避短。具體來說,就是用 XML 管理小規模的層次結構的數據,而用關系數據庫管理大規模的商業數據,兩者通過樹的節點的編碼進行連接。

  例如,在組織機構編碼系統提供的組織機構序列的基礎上,可進一步利用關系數據庫技術完成組織機構的信息采集、查詢、統計、維護等功能。

  小結

  應用 XML 進行數據管理具有特殊的優勢,可以有效地彌補關系數據庫在層次結構數據的管理上的不足和存在的問題。但是,XML 技術和關系數據庫技術之間並不是相互競爭、相互排擠的關系,而是相互補充和相互促進的關系。實際上,XML 和關系數據庫具有很強的互補性,它們好像就是為在一起協作而設計的,將長期共存下去。一個綜合的數據管理系統幾乎都是需要同時使用 XML 和關系數據庫。一個好消息是,幾乎所有主要的關系數據庫產品都提供了對 XML 的支持。

  參考資料

  • 王珊等編寫的數據庫教程"數據庫系統原理教程"詳細論述了關系數據庫在數據管理上的特點和優點,並且著重分析了關系模型在管理層次結構的數據以及日益普遍的半結構化、非結構化數據方面暴露出來的不足。
  • 徐享忠等撰寫的論文"XML 在數據管理上的應用"詳細論述了 XML 在數據管理上的可能應用,包括數據的基本存儲、數據的歸檔和備份、中間數據交換格式、數據挖掘和數據表現等多個方面。

  • 基於 XML 的數據交換在仿真系統中的應用,可參見徐享忠等撰寫的論文"基於XML 的數據交換格式在先進分布仿真系統中的應用"。

  • XML 的特點、語法規則、組成部分及業界應用實例,可參見Simon St. Laurent編寫的"XML A Primer (2nd Edition)"。

  • Michael Morrison著的"XML Unleashed"詳細介紹了在各種開發平台(尤其是c++)上,利用組件技術訪問XML各個組成部分(如SAX、DOM、XSLT)的方法。

  • E.J.Lu等撰寫的論文"An Empirical Study of XML/EDI"詳細闡述了企業,特別是中小型企業在電子數據交換系統當中采用XML作為解決方案可能帶來的機遇和巨大的好處,以及可能存在的一些隱患。
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved