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