曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
息中包含許多相關信息是因為:它使得接收者能夠更方便地從消息中提取信息,而不必使用單
獨的A P I;更重要的是,如果消息是為了審計等用途而進行的歸檔,將所有內容放在一起便于存
儲。
2. 用于永久性數據的X M L
消息的設計主要是由動態信息模型決定的。相反,當將X M L用于永久性數據時,靜態模型
是至關重要的。
(1) 一個文檔有多大
在設計過程中,最困難的部分莫過于決定數據的粒度:一個文檔中應該包括多少內容?
對于有些應用來說,一個包含幾千兆字節的X M L文檔是比較適宜的,而有些應用寧愿使用
小文檔。X M L不太適于直接訪問;就當前技術而言,如果要訪問這樣一個大文檔的任何部分,
都必須解析整個文檔,這可能要耗費幾個小時。
從另一個極端看,擁有許許多多小文檔也不太理想,因為它不可能利用X M L豐富的結構來
表示信息模型中的關系。
有時,當業務對象非常大而且內部結構很復雜時,自然會將每個對象映射為一個X M L文檔。
例如,在人力資源系統中,自然要為每個職員的記錄使用一個X M L文檔,或者在病歷系統中,
每個病歷都對應一個X M L文檔。
當你使用X M L保存永久性數據時,尋找信息的過程通常可以分為以下兩個步驟:首先找到
正確的文檔,然后找到你所感興趣的內容。這兩步用到的工具和技術截然不同,因此決定在每
個文檔中放置哪些信息是相當關鍵的。
要定位正確的文檔,主要有以下可選的四種方法:
• 利用操作系統文件存儲中的目錄結構通過名稱定位文檔。文檔的文件名可能與系統中使用
的對象標識符相關,人事文件可能以職員的人事編號命名。
• 利用文檔之間的相互索引,這種方法類似于傳統的We b站點,文檔總是通過鏈接找到的,
不過在此通常采用更加結構化的文檔組織方式。舉例來說,如果有一組足球比賽報道,每
個報道都是由一個X M L文檔構成的,可以建立另一個文檔作為它們的索引,列出所有比賽
第4章數據建模與XML使用91 下載
—日期、地點和參賽的球隊。當然,不必手工維護這個索引。可以將它設置為自動更新:
提交新的比賽報道后,系統自動對它進行分析,并將相關信息添加到索引文檔中。X S LT
非常適于編寫這類應用。
• 利用關系數據庫索引文檔。還可以選擇將X M L文檔保存為文件形式,并通過數據庫引用,
或者將X M L文檔也存儲在數據庫中。越來越多的數據庫明確表示支持該功能,如果必要的
話,還可以使用“ b l o b”(Binary Large Object,二進制大對象)字段。如果利用關系數據
庫索引X M L文檔,就可以通過任意S Q L語句識別它們,但是只能使用那些數據庫直接包含
的特性。要深入了解如何使用X M L和關系數據庫,參見第1 0章。
• 利用自由原文搜索引擎索引文檔。越來越多的搜索引擎提供對X M L的支持。通過這種方法,
可以根據在文檔的任何位置出現的關鍵字搜索文檔。雖然自由原文搜索通常被定位為支持
用戶對非結構化數據的查詢,但是由于X M L文檔中的標記使得文檔具有更強的結構性,因
此將使這種查詢方法變得更加有效。對于數據更新量不太大的應用來說,這種方法比使用
關系數據庫查詢更加高效。
另外,你還可以使用所謂的“ X M L服務器”。X M L服務器通常不以未解析的純文本形式保
存X M L數據,而是將它們存為D O M形式—即:它將文檔對象模型中的節點保存為對象數據庫
中的對象。這樣,不必首先從磁盤讀取整個文檔,然后再解析它,而可以直接通過D O M接口訪
問數據。這種方法的主要優點體現在它使得數據訪問變得更加平滑,避免使用一個A P I定位正確
的文檔,使用另一個A P I在文檔中搜索信息。然而, X M L服務器將每個D O M節點保存為一個獨
立的數據庫對象,這使得它的性能受到一定影響,特別是當加載或更新大型數據庫時。另外,
由于標準的D O M接口只能通過遍歷來尋找數據,因此具體的查詢方法是每個廠家所特有的。
另一種能夠降低解析大型文檔的代價的方法是將文檔緩存到內存中。例如,對于M i c r o s o f t
的A S P頁面或Java Server Pages,你可以在應用程序范圍內保存數據,這意味著當We b服務器啟
動時,將數據讀入內存,當服務器關閉時,從內存讀出數據。對于幾千兆字節的文檔,這種方
法的代價過于昂貴(就大多數D O M實現而言,源X M L文件中每字節的內容大約會占用1 0個字節
的內存),但是對于幾兆字節的數據來說,這種方法還是切實可行的—添置內存或許比購買
X M L服務器軟件更便宜。
憑經驗而論,我習慣于根據一個稱為“整屏”的概念決定合適的文檔大小。從理論上講,
這種方法是不能令人滿意的,畢竟X M L應該是獨立于表示的,以每次要顯示給用戶的信息量作
為設計決策的主要依據似乎不太恰當,然而實際上,這是一種很好的測試方法。如果存儲的
X M L文檔所包含的數據量超過了一個用戶愿意在屏幕上看到的內容,最終你所解析的大量數據
可能永遠得不到用戶的青睞;相反,如果你需要訪問幾百個存儲的X M L文檔才能夠形成一屏信
息,在訪問每個用戶頁面時都會產生大量處理開銷。
但是,如果用戶希望每次看到不同的一小部分數據呢?可以將整個D O M文檔作為應用程序
的一個對象保存在服務器的內存中,根據用戶請求對D O M文檔進行過濾,產生能夠更精確地滿
足用戶請求的較小的X M L文檔。
我們將在第1 0章詳細介紹X M L和數據庫。
(2) 需要多少種文檔類型
92使用XML 高級編程
下載
令人驚訝的是,這個問題并不像看上去那么簡單,因為X M L并沒有嚴格定義文檔類型的概
念。特別是有兩個獨立的概念,它們并不一定是一一對應的: D T D和頂級元素類型。
但是從概念角度講,模型中可以包含幾種不同的文檔類型,在X M L中可以通過以下幾種方
式表示它們:
• 每種文檔類型對應于一個不同的D T D。如果不同的文檔類型中有部分內容是公共的,可以
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(39)