曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
程序清單1 0 - 3 1
388使用XML 高級編程
下載
注意,這個片段數(shù)據(jù)交換文檔顯示在同一層次的元素為需要上下文的元素,但是它不會為這些
元素的內(nèi)容來浪費空間。所以你可以看到,所有在< A u t h o r >元素中的元素都被命名了,但是沒有內(nèi)
容。同樣,所有其他在數(shù)據(jù)庫中的表示其他作者的< A u t h o r >元素也沒有內(nèi)容,盡管屬性仍然被傳遞
給了每個元素,而不管它在什么位置上。查詢結(jié)果數(shù)據(jù)通過在U R I的< f r a g b o d y >處被引用。為了讓
這個機制工作,你需要創(chuàng)建一個腳本,用來輸出象上面格式的X M L,并且按以下方式進行引用:
這個片段參考了前面的< x m l A u t h o r s >腳本。
前面關于片段數(shù)據(jù)交換的提議的草稿允許片段和它的內(nèi)容包裝到一個X M L文檔中。
盡管可以實現(xiàn),但是這個提議不堅持把它標準化。相反它宣布一個包裝工作組將解決這
個問題。
2. SOAP和X M L - R P C
我們可以返回結(jié)果的另外一種方法是通過S O A P或X M L - R P C,它們將在第11章被深入討論。
這兩個協(xié)議都提供了包裝對一個服務器調(diào)用結(jié)果的方法,盡管它們不包含上下文信息。增加上
下文信息到返回文檔是一件簡單的事情。
10.3 圖書目錄的例子
理論已經(jīng)足夠了。我們已經(jīng)了解數(shù)據(jù)庫可以保存X M L并且可以通過X M L在不同的數(shù)據(jù)庫之
間交換數(shù)據(jù)。是到了作為一個數(shù)據(jù)庫實現(xiàn)圖書目錄的時候了。
在下面的例子中,假設Wrox Press已經(jīng)有了一個關于作者信息的關系數(shù)據(jù)庫,但是我們需要
創(chuàng)建新的數(shù)據(jù)庫用于出版商和圖書信息。在后面,將使用模式來定義一個關系數(shù)據(jù)庫表結(jié)構(gòu)。
10.3.1 處理存在的數(shù)據(jù)和應用
假設我們擁有一個數(shù)據(jù)庫,其中包含作者的名字、地址和他們的一些記錄。出于這個演示
的目的,我已經(jīng)簡單地創(chuàng)建了一個圖書數(shù)據(jù)庫,使用了Microsoft Access創(chuàng)建數(shù)據(jù)庫向?qū)А_@個
例子的數(shù)據(jù)入口表單有兩頁,如圖1 0 - 1 5所示。
圖10-15
第10章XML和數(shù)據(jù)庫使用389 下載
關于這個例子有幾點要弄明白。第一個就是數(shù)據(jù)已經(jīng)存在了。在計劃一個可能基于X M L的
項目時把它提到臺面是很重要的。試圖讓公司的每一個人把在他們存儲介質(zhì)上的現(xiàn)有的數(shù)據(jù)庫
應用程序移到X M L上應非常慎重。同樣因為這些應用程序,所以使用X M L處理可能不是最好的。
在這種情況下,我們需要簡單的數(shù)據(jù)錄入表格,用它可以很容易地增加新記錄和修改記錄。用
戶應該被要求這樣編輯嗎?
程序清單1 0 - 3 2
即使提供給用戶X M L的編輯器來進行數(shù)據(jù)維護—在市場上有一些很不錯的產(chǎn)品—它仍
然在某些地方不同具備簡單的Microsoft Access表單所具有的功能。例如,當光標停留在家庭電
話號碼域上時,點擊撥號按鈕,將產(chǎn)生如圖1 0 - 1 6所示的對話框:
圖10-16
轉(zhuǎn)換數(shù)據(jù)到X M L意味著弱化我們的應用,而不是增強它,簡單地說,我們已經(jīng)有了一個相
當適合的應用和數(shù)據(jù)存儲介質(zhì)。讓我們離開那,但是看一下是否我們可以按X M L抽取這個數(shù)據(jù)。
1. XML記錄集
我們需要確定的第一件事是當我們以X M L輸出現(xiàn)有的數(shù)據(jù)時,應該采用什么樣的格式。在
前面我們看到,很多數(shù)據(jù)庫的產(chǎn)品已經(jīng)被擴展了,允許數(shù)據(jù)作為一系列相關的記錄輸出。數(shù)據(jù)
仍然是一個X M L文檔,但是所使用的X M L的語法反映了數(shù)據(jù)存儲在關系數(shù)據(jù)庫中。這里有一個
390使用XML 高級編程
下載
例子,顯示了我們的作者地址信息是如何以這種結(jié)構(gòu)類型被輸出的:
程序清單1 0 - 3 3
為了與使用結(jié)構(gòu)輸出X M L相區(qū)分,我們把從數(shù)據(jù)庫中輸出的X M L叫做X M L記錄集。它對于
我們有用—主要是因為它用的是X M L。一旦我們用X M L來記錄數(shù)據(jù),顯然可以使用所有以前
在這本書中的操作X M L部分中學到的工具;可以使用X S LT來將信息轉(zhuǎn)換成為一系列的使用
H T M L的表,或者可以改變列的名字,這樣數(shù)據(jù)就可以插入到別的數(shù)據(jù)庫中了。
但是讓我們誠實一點,使用這個方法有一個主要的缺點。最明顯的就是,唯一能夠執(zhí)行的
驗證是保證一個< R e c o r d S e t >元素只包含R e c o r d元素,并且從順序上它們只包含< C o l u m n >元素。
如果我們希望轉(zhuǎn)換這個信息到另一個服務器上去,數(shù)據(jù)將被存放在那里,服務器沒有一個簡單
的方法來知道被突出顯示的列不應該顯示在這里:
程序清單1 0 - 3 4
當然,我們能夠包括帶有數(shù)據(jù)的信息,這些數(shù)據(jù)是用來說明什么列是所要求的。M i c r o s o f t
的活動數(shù)據(jù)對象( A D O,Active Data Objects)采用這種方法。下面顯示了存在我們的A c c e s s數(shù)
據(jù)庫的數(shù)據(jù)將如何被輸出,如果A D O的新特性被用于持續(xù)一個記錄集:
第10章XML和數(shù)據(jù)庫使用391 下載
M i c r o s o f t的A D O現(xiàn)在版本為2 . 5。更多的信息可以看h t t p : / / w w w. m i c r o s o f t . c o m / d a t a / a d o。
程序清單1 0 - 3 5
392使用XML 高級編程
下載
但是即使使用了這個額外信息,仍然有一個普通的數(shù)據(jù)版本在數(shù)據(jù)庫中;我們已經(jīng)按記錄
集表示數(shù)據(jù),要好于使用一些結(jié)構(gòu)。那就是說,在數(shù)據(jù)需要被轉(zhuǎn)換成其他的關系數(shù)據(jù)庫的情況
下,這個技術將可能被大量地應用。因為所有的R D B M S可以按照表、行、列來轉(zhuǎn)換,所有的都
可能識別該格式。使用模式元素提供的附加信息來表示列的定義,這種方法是一個相當有力的
技術。下面的代碼使用A D O來生成輸出結(jié)果也是簡單的(下面用的是Visual Basic):
程序清單1 0 - 3 6
這種簡單性所帶來的好處可能就是你的應用所需要的。
2. XML數(shù)據(jù):使用轉(zhuǎn)換
然而,假設我們需要在單調(diào)的信息上增加一些結(jié)構(gòu),最簡單的方式是將結(jié)構(gòu)放在將要轉(zhuǎn)換
輸出的數(shù)據(jù)上。下面是一個X S LT樣式表的例子,這個例子可以將這種單調(diào)的圖書格式轉(zhuǎn)變?yōu)閳D
書目錄例子使用的格式(如果我們想將一個單調(diào)結(jié)構(gòu)融合到結(jié)構(gòu)化的目錄中):
程序清單1 0 - 3 7
第10章XML和數(shù)據(jù)庫使用393 下載
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(128)