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