曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
但是段落中大多數文本并沒有額外的標注。如果你過去習慣于利用數據對象工作,這多少會造
成錯覺—為了在關系型數據庫中描述上述信息,一些語義構造有必要添加進關系型數據庫中
(如B o o k表中v a l u e 1、v a l u e 2、v a l u e 3列)。如果X M L有更加靈活的結構,問題就更深入了:
程序清單8 - 9 6
在這種情形下,我們在< B o o k >元素中可以有任何數量的文本塊。
我們用于訪問XML 的任意一種查詢語言必須能夠處理像這樣的內容規范。因此,了解了
什么是基本的查詢語言所必須解決的問題之后,讓我們看一下X M L查詢能力進展到什么程
度。
8.6.3 XML查詢語言的發展歷史
早期的X M L使用者很快就認識到查詢語言的必要性。為了達到這個目的,兩個研究小組在
1 9 9 8年開始研究并對X M L文檔查詢機制,并向W 3 C提出方案。在我們討論查詢語言目前的狀況
之前,讓我們看一下X M L查詢語言的發展歷史。
1. XML-QL
W 3 C提交了一種稱為X M L - Q L的查詢語言。這個方案的作者按照數據庫的思路來解決問題,
采用了用于訪問層次型數據庫和關系型數據庫的相同技術。X M L - Q L指定了一個X M L文檔的樣
本程序段,提供了構建機制允許輸出同類信息,而不用考慮開發者的愿望。在繼續討論之前,
讓我們先看一個例子。
設想要創建一個文檔,在樣本X M L目錄中列出所有書籍的標題,輸出結果按如下形式:
第8章鏈接和查詢使用295 下載
程序清單8 - 9 7
在X M L - Q L,我們將使用下面的查詢:
程序清單8 - 9 8
這里你可以看到和S Q L的相似之處。利用W H E R E子句我們可以對正在操作的信息進行限制,
C O N S T R U C T子句可以用來創建產生的輸出。這些子句是可以嵌套的,為我們的信息提取和信
息描述提供很大的靈活性。
盡管X M L - Q L是靈活的,但它有兩個缺點:
• X M L沒有規定保持次序—在X M L - Q L處理器中結果輸出并不保證和原始文檔具有相同的
順序。這對于X M L數據文檔來說可能不是一個大問題,然而對于X M L文本標識文檔來說
就相當嚴重了(我們可以想象閱讀一本段落順序混亂的書!)
• X M L沒有規定保持結構—你可以注意在前面的例子中,必須通過指定使用的標識來產生
結果文檔的整體結構—實際上,在查詢中重新產生結構。如果我們嘗試將大的文檔減至
為我們所感興趣的那一部分(例如,一個給定作者的所有著作),將結構信息保持下來就非
常好了—我們就不用建造書籍的整體子結構,僅僅把原始文檔的結構鏡像下來就可以了。
在X M L - Q L方案提交到W 3 C的同時,另外一種建議也被提出來了,這是一種采用更多方向
標識的辦法:X Q L。
2. XQL
X Q L從結構化文檔的前景考慮來解決問題。它在設計時考慮盡可能在提供方法減少內容的
同時保持原始文檔的結構和順序。讓我們回顧一下前面一部分的例子。(若熟悉M i c r o s o f t的X S L
的安裝使用,請記住該討論僅針對原始X Q L版本—我們會逐漸過渡到流行狀態。)
利用X Q L,通過查詢從目錄中生成一列標題將是下面這種形式:
輸出結果如下:
程序清單8 - 9 9
296使用XML 高級編程
下載
注意,利用X Q L原始文檔的順序能夠保證得以維持。上面所示的文本文檔由包容器
< x q l : r e s u l t >包起來。用于返回節點集的X Q L處理器簡單地返回一列有序的< Ti t l e >元素節點。
X Q L同時保持了層次信息。例如,如果我們選擇抽取稱為“ IE5 XML Programmer's
R e f e r e n c e”的書,我們可通過如下查詢實現:
查詢輸出如下:
程序清單8 - 1 0 0
注意所有被選B o o k元素的嵌套內容得以保持下來,然而如果利用X M L - Q L我們必須在子句
中指定所有的子元素。
X Q L能夠解決利用X M L - Q L所產生的一些問題,不過它在下面兩個方面存在缺陷。
• X Q L不能提供信息區分—X Q L的設計是以節點操作,而不是依靠信息,當兩個元素具有
相同的內容時,它就沒有自身解決辦法進行鑒別。例如,利用X Q L不能在X M L目錄中產生
作者的不同列—X Q L會對原始文檔中的每個< A u t h o r >節點產生一個< A u t h o r >節點,而不
理會節點的內容。
• X M L不能關系—處理關系型信息一個普通的技術就是p i v o t關系。例如,我們有一列書
籍和它們各自的作者,但是我們希望產生一列由所有作者和他們出版的書的列表。由于
X Q L能夠對層次保持,利用X Q L進行查詢是不可能的,它最初設計時就是這樣。
雖然對于訪問層次型信息, X M L是最自然的方法,它不能像X M L - Q L一樣靈活地處理數據。
綜合的靈活性和結構化訪問機制將是較理想的查詢語言。
3. XSLT 和XPa t h
盡管缺少查詢標準,利用W 3 C現有的兩種推薦方案: X S LT和X P a t h,來產生解決問題的辦
法還是可能的。你無疑認識了X Q L的查詢模式—X Q L是XPa t h的最直接的祖先。XPa t h維持了
原始文檔的層次性和結構,適用于訪問X M L文檔的獨立節點。X S LT(下一章我們將會詳細學習)
第8章鏈接和查詢使用297 下載
適用于對查詢結果進行處理,構建新的元素,在有必要的時候(采用和X M L - Q L很類似的方法)
從新組織結果元素。我們將會明白,綜合X S LT- XPa t h將允許開發者隨意而方便地對源文檔的信
息進行操作和重組。
8.6.4 使用XPath和XSLT查詢XML文檔
目前可以使用的用于查詢X M L文檔最好的技術是X S LT,X S LT使用XPa t h從文檔中濾除結點,
不過X S LT用來以任何數目的形式來描述數據。如果你熟悉利用X S LT進行X M L到H T M L的轉換
(將會在第9章學到更多關于X S LT和轉換的知識)的話, X S LT也可以用來對任何結構進行轉換
—包括X M L。這一部分我們將看一下如何利用X S LT將一個X M L文檔轉換成另一個,表達了
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(102)