曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
夠產生包含許多源的數據的X M L文檔嗎?
• 我們想在文檔中無縫地集成其他的外部數據。
2. 解決問題
用普通的文件系統來解決這些問題是非常困難的。盡管大部分的操作系統允許許多用戶同
時打開一個文件,目前大部分的文本和X M L編輯器不能很好地控制這些文件,讓用戶編輯同一
文檔的不同部分,并且不會影響他人的工作。另外,操作系統所應用的安全機制通常是在文件
級的。這就意味著不同的人可被賦予不同的處理權限處理不同的文檔,但是不能處理同一文檔
的不同部分。
為了解決上面所提出的問題,需要理解關于X M L文檔的不同觀點。實際上,我們需要從我
們基本的X M L單元是一個文檔的想法中脫離出來,而把它考慮成可操作的節點集。
文檔和節點
對于那些剛接觸X M L的人來說,經常困惑的是假設存儲X M L文檔的基本單元必須是在一個
文件中的普通文本。因為一個文檔必需是人可讀的,所以假設就是文件必需被存儲為一個文本
文件,或者在一個文件系統內,或者也許在一個數據庫的一個字段里。這個實際上是對XML 1.0
規范的一種錯誤理解。
一個應用程序—你或我可能寫的一個計算機程序—不是想要直接處理X M L文件,而是
作為一個解析器運作,或X M L解析器。XML 1.0規范的介紹(第一部分)中說:
稱為X M L處理器的軟件模塊是用于讀取X M L文檔和提供對他們的內容和結構的處理。一
個X M L處理器的工作基于另一個稱為應用的模塊的行為。這個規范[XML 1.0]描述了一個
X M L處理器應具備的行為,根據它應該如何讀X M L數據,并且信息是如何提供給應用
的。
換句話說,盡管我們花費了大量時間來看X M L文檔和羨慕它們的結構,現實是我們應該考
慮的文檔應根據文檔所能夠表示的節點結構。D O M的角色—是否是用J a v a或V B寫的;是否是
I B M或S u n寫的—都向我們隱藏了分級結構和讓我們操作一棵樹的節點。當然,當我們在討論
數據或在打印頁面中表現它們時,就如同在本書中,做到這一點的最容易的方法是使用X M L標
記語法;然而,我們應該記住這種分離(參見圖1 0 - 1)。
這些沒有一個對你來說是新的—定位這些節點的方法是D O M的任務,并且已經在第5章中
討論過—那么你可能會問為什么我要重復它。嗯,這意味著我們對X M L文檔的存儲的理解有
些改變。比起簡單地尋找處理文本的機制—比方說,文件系統或數據庫的文本字段——我們
需要理解不同的工具和產品是如何處理分級節點集的。X M L作為文本,僅僅變成一種在它們的
節點上從一個系統到另一個系統轉載信息的便捷的方法(參見圖1 0 - 2)。
第10章XML和數據庫使用357 下載
圖10-1
圖10-2
然而,傳送節點的方法仍然是X M L文檔;然而,對于解析器來說,一個X M L文檔不過是一
個輸入單元。以上圖中的文檔為例:
程序清單1 0 - 1
358使用XML 高級編程
下載
沒有理由說,為什么我們不能取出這個文檔的地址信息,并且創建兩個更完美的可接受的
X M L文檔。這就是在討論X M L時必然想到的。例如,我可能說Wrox Press的U K地址是:
程序清單1 0 - 2
并且U S地址是:
程序清單1 0 - 3
盡管我們沒有設計出將如何做到這樣,通過處理節點,至少我們已經創建了為兩個人對同
一個X M L文檔進行工作的可能性—通過允許他們處理分離的節點。倘若我們可以建立一個系
統,它允許獨立的節點控制,我們就可以創建一個系統,它看上去允許處理一個X M L文檔的不
同部分。不同的用戶可以指定不同的節點集進行處理—以一種有效的X M L文檔的形式。繼續
考慮我們的兩個地址,將包括如下部分(見圖1 0 - 3)。
一個服務器,按這種方法被設計成保證節點的有效—或者X M L文檔,它可能是某個大的
X M L文檔的一部分—我們將它稱為X M L服務器。把這些概念記住是很重要的,在評估不同的
產品時,因為很多的應用程序聲稱能夠處理X M L,但是可能不允許像我們所期待的控制方法。
我們將在后面討論一下這些應用程序。
某些人爭辨說,這個“節點模型”沒有什么名氣,因為節點本身與它們所表示的元素無
關。例如,為了處理<Address>元素的headquarters屬性,我們應該能夠使用:
在使用D O M的地方我們必需使用:
第10章XML和數據庫使用359 下載
圖10-3
每個節點從本質上說是一個有著自己的屬性和方法的對象。這個方法叫做樹林范式。參考
Robin Cover的站點得到更多的細節,在h t t p : / / w w w. o a s i s - o p e n / c o v e r / t o p i c s . h t m l # g r o v e s。同
時這個方法產生一些重要的問題,被激烈地討論,但不太可能會很快出現在你的系統里。
3. 小結
為了真正地取得對X M L文檔的控制,我們需要解決在文件系統的局限性中所遇到的問題:
• 我們想處理極大的文檔,并且想檢查同其他部分分離的部分文檔。
• 我們想允許許多人在同一時刻處理同一文檔。
• 我們想使用最適合處理數據的工具來維護文檔的各個部分。
• 我們想能夠記錄一個文檔不同版本的軌跡。
• 我們想控制一個文檔的某一部分只有某人可以查看或修改。
• 我們想在文檔中無縫地集成其他的外部數據。
為解決這些問題,我們必須有在文檔中處理任何節點的能力。
10.1.2 文檔管理
在了解節點的操作之前,有必要花些時間在中間技術上—在數據庫中存儲文檔。我們已
經確定,使用文件系統來處理文檔不是一個用來解決安全問題和用戶數量的有效方法。我們也
看到,在節點級進行操作—比起對文檔來—可能需要某種方法來解決。在解決這些問題之
前,我將簡要地談到“在中間( in between)”的方法,用于改善處理文檔的方法。這個方法要
比文件系統復雜得多。
360使用XML 高級編程
下載
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(118)