曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
10.2.1 數據標準
正如我們在前面所討論過的,許多人都有從X M L的文檔視圖到數據結構視圖轉變的困難。
盡管X M L經常被作為一種有力的標記文檔的方法,也應該記住在XML 1.0規范討論“ X M L文檔”
時,它的意思是與一個字處理文檔或電子表格不同的東西。
字處理和電子表格文檔在你的硬盤上是清晰可辨的,它們保存在一個目錄下的文件里。一
個X M L文檔也可能以這種形式存在,并且許多正在開發的應用程序也使用這種方法來保存信息。
然而,這些應用程序最終有局限,通常調用一些在文本兩邊用一些標記來標識出的行,以便它
們能夠以一種有趣的方法來表示莎士比亞的著作。
然而,一個X M L文檔不需要存在這種固定的形式。它可以在需要的地方被創建,通過一個
We b服務器。然后,也可能對同樣的“文檔”有兩個需求,可能返回不同的結果。例如,生成
一個X M L文檔的頁面,其中包含一列Wr o x的作者,可能今天返回一個列表,明天就又增加了新
的作者了。
為了舉例說明它,讓我們創建一個基本的A S P腳本來輸出一個Wr o x作者的列表作為簡化的
X M L:
程序清單1 0 - 1 2
第10章XML和數據庫使用377 下載
X M L的結果文檔可能看上去像:
程序清單1 0 - 1 3
378使用XML 高級編程
下載
我們已經將相關的數據表示成一系列的節點,通過使用X M L,意味著現在可以發布這個數
據到任何感興趣的系統中,倘若系統可以首先轉化X M L。例如,我們可以輸出一個存在O r a c l e
中的作者列表,輸入到P O E T數據庫中,不需要寫任何的O r a c l e到P O E T的轉換程序。實際上,甚
至沒有人要編寫一個關系到對象的轉換程序。我們所要做的就是確保兩邊都可以讀或寫普通的
X M L語法。應該記住, O D B C是被設計用來在不同的數據庫系統上建起一座橋梁,然而我們擁
有X M L意味著更加先進。
一個應用程序,它可以像M i c r o s o f t的A c c e s s表格或一個J a v a應用程序一樣直接處理數據庫中
的信息—如果發生同I n t e r n e t的通信,它可以使用如圖1 0 - 1 2所示的結構。
圖10-12
然而在這個方法中有幾個問題:
• 僅有理解O D B C的系統可以接收這個信息。
• 很多防火墻不允許O D B C的交易。
• ODBC易被黑客攻擊。這些黑客可能發送一些需要被服務器驗證的未經授權的交易。
通過在通信管道的兩端加上X M L接口,我們去除了客戶端對O D B C的依賴(參見圖1 0 - 1 3)。
同樣,如果我們以某種方法封裝X M L,并且通過8 0端口(正常的H T T P端口)傳送它,可以
第10章XML和數據庫使用379 下載
服務器
客戶
數據
庫
解決防火墻的阻擋問題。實際上, M i c r o s o f t有一個新的技術, S O A P(簡單對象訪問協議,
Simple Object Access Protocol),它就是這么做的。想了解關于S O A P的更多信息,參見第11章。
圖10-13
10.2.2 查詢標準
如前所述,我們剛寫的用于返回一個包括作者信息的X M L文檔的A S P腳本,將返回所有在
數據庫中的作者。顯然,這個對我們很有用,我們想通過查詢這個數據的子集減少網絡流量和
響應時間。
為了開始,讓我們只是簡單地修改一下作者到X M L腳本,以便它可以在W H E R E子句中接收
一個參數。大部分的代碼仍然保留,所以我只顯示出新的行:
程序清單1 0 - 1 4
這個允許我們簡單地通過在U R L中指定一個參數而取回不同作者的X M L表示。例如,我們
要求返回的X M L被放在H T M L頁面中的數據島(Data Island)中,格式為:
程序清單1 0 - 1 5
380使用XML 高級編程
下載
網絡服
務器
目前只有M i c r o s o f t實現了數據島,但是對這個例子沒有什么影響。我將介紹如何用U R L來
要求X M L返回單個的作者。同樣的腳本也可以用來取回全部或幾個作者。
1. XML 查詢與數據庫查詢
然而,現在我們碰到了一個有趣的問題,我們是以相關數據庫的特殊格式來運行查詢,但
是得到的結果卻是X M L。這個現象非常重要,我們表現的輸出數據獨立于后面的數據存儲的格
式,如果也能夠使用一種獨立于后端的數據庫的方式查詢數據是不是更好呢?例如,我們用對
象數據庫來替換關系數據庫。剛才使用的查詢方法—L a s t N a m e = ' M o h r '—可能在一個對象環
境下就沒用了。如果我們用來取回數據的查詢不需要改變就會很理想了。
如前面所述,盡管我們已經在X M L的數據庫上創建了一個層,但仍需要按照處理下面的數
據庫的方式進行查詢。實際上,應用結構如圖1 0 - 1 4所示。
圖10-14
M i c r o s o f t已經明確表態;一個層位于SQL Server 7上返回指定的S E L E C T語句查詢結果為
XML。
2. XML查詢語言
我們已經建立了一個簡單的方法從任意的關系數據庫取回數據并且以X M L來表現它們。換
句話說,我們已經將關系數據映射到X M L的節點結構。至于外部的世界關系到我們的數據庫,
可能也包含X M L,用我們現在的實現方法查詢數據,外部世界將需要知道數據是以什么格式存
儲在這個例子中的關系數據庫。相反我們需要能夠查詢節點。
在寫這本書的時候,有許多關于分析X M L語法查詢的工作已經完成—這個我們在第8章已
經討論過。因為關于這方面不存在什么協議,專門為現在這個例子的目的,我們將把數據庫看
成一個大的X M L文檔,并且使用X S L語法來滿足要求。
第10章XML和數據庫使用381 下載
網絡
服務器
雖然我們的數據作為
XML返回,但我們仍
然使用對數據類型的
專門查詢方式
關于X S L的查詢語法已經從X P a t h中分離出來。可以在h t t p : / / w w w. w 3 c . o rg / T R / x p a t h上看到
一些介紹。
我寧愿使用X P a t h而不是其他的建議來查詢X M L,因為它允許一個查詢被表述成一個U R L。
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(125)