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