曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
(8) minOccurs屬性
在< A u t h o r >元素中的M I元素可以為N U L L。這是因為m i n O c c u r s在模式中被設成了0,意味
著如果需要可以完全忽略那個元素。不能被忽略的元素有一個給定的空串作為缺省值,它與
N U L L不同。在輸出數據的時候,我們可以檢查是否它為N U L L,如果是就不會輸元素。否則,
盡管字段為空,它也得輸出。為此我們增加一條規則:
• 規則6—如果一個元素有一個為0的m i n O c c u r s值,設置允許列為空。
(9) 擁有指定數據類型的屬性
< C a t a l o g >中的最后的項級元素是< B o o k >元素。定義的開始使用屬性類型,我們在以前已經
404使用XML 高級編程
下載
看過,除了一點:
屬性類型被指明了,要好于把它當作一般的文本。另一個例子是在< P r i c e >元素中:
因此我們需要創建一個元素的正確類型的列。這就要求修改規則3:
• 規則3—對于每個屬性節點:
• 創建一個與屬性節點同名的列:
- 如果屬性是一個正常的屬性使用前綴a t t r _。
- 如果屬性是一個枚舉類型使用前綴a t t r _ e n u m _。
- 如果屬性是i d類型使用前綴a t t r _ i d _。
• 數據類型應該是一個長度為2 5 5的v a r i a b l e - l e n g t h字符串,除非用d t : t y p e屬性指出數據類型。
• 如果要求屬性,那么列不應該允許為N U L L值。
(10) 擁有i d r e f s數據類型的屬性
下面這個屬性集也是我們以前沒有遇到的,但是這些不能被簡單地模擬為數據庫存儲類型:
這兩個屬性的目的是指供一個用空白進行分隔引用了< A u t h o r >和< T h r e a d >元素的列表。沒
有什么可以簡單地在用數據庫的列對它進行維護,所以我們將通過創建與屬性同名的表來模擬
這種關系,使用外鍵來指向A u t h o r和T h r e a d表。我們將以創建元素表的方法來創建這個表,所以
A u t h o r將如圖1 0 - 3 3所示。
圖10-33
并且t h r e a d s將同圖1 0 - 3 4所示。
圖10-34
第10章XML和數據庫使用405 下載
我們需要定義的規則如下所示:
• 規則7—如果一個屬性是i d r e f s類型那么:
• 創建一個與屬性同名的表。
• 在其中創建一個列,名字與元素名字首字母大寫的單數形式一樣,加上前綴a t t r _ i d r e f _。
• 創建一個與首字母大寫的單數形式同名的表的外鍵,對于要處理的表使用a t t r _ i d _列。
因為它有一點復雜,讓我們用a u t h o r s屬性來進行一步步地檢查。首先,創建一個名為
a u t h o r s的表,擁有一般的特性。然后,在表中增加一列,名字為a u t h o r s的單數形式,且第一個
字母為大寫—A u t h o r—并且加上一個前綴a t t r _ i d r e f _。最后,創建一個外鍵,將這個列與在
目標表中的a t t r _ i d _列連接(在這個例子中是A u t h o r表的a t t r _ i d _ a u t h o r C i t e I D)。注意這個規則假
設i d r e f s屬性擁有一個元素名字的復數形式,它的I D被引用—在設計X M L模式時一個普通的習
慣。
一個迄今為止我們已經看到的允許的模式設計數據可能是:
程序清單1 0 - 4 9
你可以看到a u t h o r s和t h r e a d s屬性是在文檔中任何地方出現的i d s的簡單列表。
注意如果我們創建的表結構對你來說是很熟悉,那么你走對路了;我們將正確地建立同樣
的表和關系,用來生成下面的X M L:
程序清單1 0 - 5 0
406使用XML 高級編程
下載
然而,請注意這種方法,因為每一本書都包含它的作者,所以會重復很多次—如果一個
作者寫了兩本書,那么就會重復兩次。這個i d r e f s技術允許元素包含其他的元素,而沒有不必要
的重復。
( 11) 擁有i d r e f數據類型的屬性
另一個我們還沒有給它定義規則的屬性是i d r e f。一個使用這個類型的例子是當引用一本書
的地址名稱時:
不像i d r e f s,在這個屬性中只能有一個引用可以出現,所以我們不需要使用一個額外的表。
所需要做的是用一個合適的名字創建一個列,然后創建一個與I m p r i n t表的這個列相連的外鍵。
我們的規則將是:
• 規則8—如果一個屬性是i d r e f類型,那么:
• 創建一個與屬性同名的列,加上前綴a t t r _ i d r e f _。
• 創建一個在這個列與對應的屬性同名表的a t t r _ i d _ c o l u m n間的外鍵關系。
在這個例子中, 我們在B o o k 表的a t t r _ i d r e f _ i m p r i n t 列與表I m p r i n t 表的
a t t r _ i d _ s h o r t I m p r i n t N a m e間的外鍵關系。注意這個規則假設i d r e f屬性有著與i d所指的元素相同的
名字—再一次指出,這是一個在設計X M L模式時的普通的習慣。
(12) 結構
圖1 0 - 3 5是將使用我們的規則創建P u b l i s h e r分層信息的表和關系的表示。
圖1 0 - 3 6是將使用我們的規則創建B o o k分層信息的表和關系的表示。
(13) 小結
使用X M L通過X M L模式來定義我們的X M L文檔的好處表明我們能夠自動地完成許多任務。
在這個例子中,我們已經創建了一系列的規則,這些規則將允許從模式中創建一個關系數據
庫。
在查看代碼之前,將總結一下迄今為止所創建的規則。注意我已經增加了一些子句用來明
確地顯示規則的優先級(后面的規則在某種情況下要更先一些):
• 規則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—對每一個與規則4不匹配的元素節點類型,創建一個與元素相同名字的表,然后:
第10章XML和數據庫使用407 下載
圖10-35
圖10-36
• 如果元素節點是一個子節點,創建一個與父元素節點同名的列,但是使用前綴f k _。
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(132)