曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
這個樣式表簡單地從< z : r o w >中取出每個屬性,并且把它們輸出成元素,盡管使用了不同的
名字。轉換的結果為下面的簡單的X M L文件:
程序清單1 0 - 3 8
在小型系統中可能很少會在這種技術或一種不需要中間介質的X M L記錄集的數據而直接編
寫為不同目標的不同腳本的技術中間進行選擇。然而在一個大一些的系統中,它可能需要為許
多的用戶提供很多種格式的信息,這種技術可能更有用。例如,如果我們想輸出信息,以這樣
一種方式,它能夠被一個完全不同的系統所理解,或者我們以單調格式輸讓目錄系統來處理它,
或者我們可能生成另一種樣式表用它再次地轉換單調格式。
因為這些映射類型不總是一對一的,甚至可能設計出一種文檔結構,用來說明如果將記錄
和字段映射到要求的模式格式。像上面的樣式表可能被自動生成,甚至可能提供信息讓低層的
數據庫對其進行修改。
3. XML數據:使用腳本
把信息看成一種結構化的X M L的方法是生成一個作者的列表,作為在We b服務器上的X M L
頁面。在前面我們已經看到是如何做的,所以在這里我只顯示主要的循環部分,并做了一點修
改,允許現有的作者數據庫能夠使用:
程序清單1 0 - 3 9
4. 結論
從現有系統提取數據帶給我們很多問題。盡管最完美的解決方案是以一種普通的格式取回
數據—關系結構的X M L表示—然后轉換成希望的格式,這可能很充分地表現出性能問題。
如果對于數據所要完成的目標不多,那么特定的腳本可能就是答案。如果對于數據有很多的目
的格式,那么將數據的中間X M L表示進行緩沖可能是最好的,然后可以按照要求進行轉換。
394使用XML 高級編程
下載
10.3.2 圖書目錄模式
現在已經確定如何使用已經存在的作者數據,但是仍然需要在一個數據庫中表示圖書目錄
的其他部分。在這一部分,我們將研究圖書目錄模式定義的一些關鍵部分,并且隨著發展,我
們將勾勒出一些創建關系數據庫的關鍵點。在數據庫中,將保存數據并且與模式相一致。在做
這個的過程中,我們將建立一些規則,可以在后面使用它們來使從一個模式創建一個關系數據
庫的處理自動化。最后,我們將討論用來進行自動轉化代碼的主要特點。代碼將用來執行自動
轉換,關于源代碼的全部有效的清單,從h t t p : / / w w w. w r o x . c o m下載。
1. 定義目錄數據庫
在這個討論中,我們將經常轉換每一個模式定義為一個節點結構。我將通過下面的簡單轉
換來表示節點結構(參見圖1 0 - 1 7)。
圖10-17
結構通過節點的位置被指出。例如,在圖1 0 - 1 8中指出一個A類型的節點有一個請求的屬性
叫做B,一叫C類型的節點和零個或多個D類型的節點:
圖10-18
滿足這個節點結構的X M L文檔的例子包含如下結構:
程序清單1 0 - 4 0
第10章XML和數據庫使用395 下載
讓我們開始轉換模式定義為關系數據庫,通過例舉出一般的模式的一些關鍵特性—明顯
的X M L文檔—它們是:
• 分層。
• 屬性。
• 純文本元素。
• 純文本元素的多發性。
• 枚舉。
• 擁有i d數據類型的屬性。
• 作為容器的元素。
• minOccurs屬性。
• 擁有指定數據類型的屬性。
• 擁有i d r e f數據類型的屬性。
• 擁有i d r e f s數據類型的屬性。
(1) 分層
第7章的圖書目錄模式開始部分如下所示:
程序清單1 0 - 4 1
其中描述了一個< C a t a l o g >元素,它只能包含其他元素。這就意味著不允許有其他的文本,
它包括在< C a t a l o g >元素中但是沒有包括在< C a t a l o g >所包括的元素中(你可能還記得第7章的這
個意思,< C a t a l o g >不能包含混合的內容)。這個特性極大地簡化了數據庫的實現。
< C a t a l o g >元素可以包含< P u b l i s h e r >,< T h r e a d >和< B o o k >這類的元素。所以這些元素可以出
396使用XML 高級編程
下載
現任意多次,但是至少有一個< P u b l i s h e r >,并且至少一個< B o o k >。由這種模式定義所表示的
X M L文檔的例子包括:
程序清單1 0 - 4 2
節點結構如圖1 0 - 1 9所示。
你可能會回憶起對關系數據庫的特性的討論,這個模式可以容易地用四個表來表示。你可
能會問“為什么不是樹?”,因為這里只有一個< C a t a l o g >,并且我們
可以隱藏其他的表與< C a t a l o g >之間的關系。然而,因為我們想產生
一個可以被容易生成的解決方案—也可能該數據庫在將來會擴展
—我們將創建一個C a t a l o g表。
這些表之間的層次關系可以通過在低層次的表與包含它的表之間
創建連接來建立。例如,為了產生一條P u b l i s h e r表中的P u b l i s h e r記錄
與一條C a t a l o g記錄(在這種情況下只有一條)的連接,我們將需要
如圖1 0 - 2 0所示的結構。
為了找到< C a t a l o g >的所有< B o o k >子節點,我們將簡單地查詢
B o o k表得到所有f k _Ca t a l o g列被設置成了與我們正在搜索的< C a t a l o g >值一樣的值。
現在我們能夠定義最初的兩個規則(規則1僅用來節省在后面的規則中重復自身使用):
• 規則1—無論何時我們創建一個新表,創建一個與表名相同的主鍵,但是使用一個p k _的
前綴。這一列將是一個a u t o m a t i c a l l y - i n c r e m e n t e d(自動增加)的整數。
• 規則2—對每一個元素節點類型,創建一個與元素相同名字的表,然后:
第10章XML和數據庫使用397 下載
圖10-19
• 如果元素節點是一個子節點,創建一
個與父元素節點同名的列,但是使用
f k _的前綴。
• 創建一個在剛創建的列和與其父元素
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(129)