曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費(fèi)者
• 創(chuàng)建一個在剛創(chuàng)建的列和與其父元素節(jié)點(diǎn)同名的表中的列的外鍵關(guān)系,列的名字是父元素
的名字加一個前綴p k _。
• 如果元素節(jié)點(diǎn)的內(nèi)容只是本文,那么創(chuàng)建一個名字為p c d a t a的列。
• 規(guī)則3—對于每個與規(guī)則5、7或8不匹配的屬性節(jié)點(diǎn):
• 創(chuàng)建一個與屬性節(jié)點(diǎn)同名的列:
- 如果屬性是一個正常的屬性使用前綴a t t r _。
- 如果屬性是一個枚舉類型使用前綴a t t r _ e n u m _。
- 如果屬性是i d類型使用前綴a t t r _ i d _。
408使用XML 高級編程
下載
• 數(shù)據(jù)類型應(yī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ù)類型。
• 如果要求屬性,那么列不應(yīng)該允許為N U L L值。
• 規(guī)則4—如果一個元素的節(jié)點(diǎn)只包含文本,并且最大發(fā)生次數(shù)為1次,那么在它的父元素
表中創(chuàng)建一列,列的名字與節(jié)點(diǎn)一樣,使用前綴e l e m _。
• 規(guī)則5—對于每一個具有枚舉類型的屬性,用與屬性節(jié)點(diǎn)值相同的名字創(chuàng)建一個表,使
用前綴e n u m _。包含一個與屬性節(jié)點(diǎn)同名的可變長度字符串列,使用前綴p k _ e n u m _和
variable-length string數(shù)據(jù)類型。把枚舉的值填在表中。
• 規(guī)則6——如果一個元素有一個為0的m i n O c c u r s值,設(shè)置允許列為空。
• 規(guī)則7—如果一個屬性是i d r e f s類型那么:
• 創(chuàng)建一個與屬性同名的表。
• 在其中,創(chuàng)建一個列,名字與元素名字首字母大寫的單數(shù)形式一樣,加上前綴a t t r _ i d r e f _。
• 創(chuàng)建一個與首字母大寫的單數(shù)形式同名的表的外鍵,對于要處理的表使用a t t r _ i d _列。
• 規(guī)則8—如果一個屬性是i d r e f類型,那么:
• 創(chuàng)建一個與屬性同名的列,加上前綴a t t r _ i d r e f _。
• 創(chuàng)建一個在這個列與對應(yīng)的屬性同名表的a t t r _ i d _ c o l u m n間的外鍵關(guān)系。
2. 自動創(chuàng)建數(shù)據(jù)庫
下面的腳本出了我們前面章節(jié)設(shè)計和創(chuàng)建樹的一系列指令的規(guī)則。我們已經(jīng)講過了,因為
同等的X S LT樣式表轉(zhuǎn)換成X M L - D R模式是非常復(fù)雜的,所以,如果轉(zhuǎn)換過程太復(fù)雜,就應(yīng)該使
用腳本來實(shí)現(xiàn)。在關(guān)系型數(shù)據(jù)庫的兩個表之間創(chuàng)建關(guān)系,主要的問題是不僅需要這些表存在,
而且在目標(biāo)表上的主鍵要存在。為了做到這一點(diǎn),我們總是在創(chuàng)建表和鍵值之后創(chuàng)建關(guān)系。這
樣做的最安全的辦法是,在我們能夠?qū)懭氲娜魏螌哟吸c(diǎn),進(jìn)程的任何階段構(gòu)造表示這些結(jié)構(gòu)的
節(jié)點(diǎn)樹。
使用節(jié)點(diǎn)結(jié)構(gòu)構(gòu)造命令的另外一個優(yōu)點(diǎn)是,可以有機(jī)會優(yōu)化命令。例如,為每一個元素建
立一個命令創(chuàng)建表之后,我們能夠刪除這些命令,這些元素能夠容易地以列的形式存儲。
腳本(s c h e m a t o r d b . a s p)首先創(chuàng)建表單定義模式,然后,兩個D I V擁有處理結(jié)果。第一步提
供查看將被創(chuàng)建的表和列的快捷方式,第二步給出了將被產(chǎn)生的活動S Q L命令:
程序清單1 0 - 5 1
第10章XML和數(shù)據(jù)庫使用409 下載
腳本開始時創(chuàng)建XML DOM,處理X M L計劃輸入,產(chǎn)生SQL DDL輸出,產(chǎn)生樣式表的輸出。
在這個過程中包括兩個樣式表。第一個把創(chuàng)建的命令列表轉(zhuǎn)換成每一個列的屬性摘要,按照將
要顯示的列的次序排序。主鍵和外鍵將能夠看到。
第二個樣式表把相同的創(chuàng)建節(jié)點(diǎn)轉(zhuǎn)換成正確的S Q L語句,創(chuàng)建反映模式的數(shù)據(jù)庫。
首先,我們創(chuàng)建一些變量存儲輸出的各個部分:
程序清單1 0 - 5 2
當(dāng)按下按鈕時,函數(shù)被執(zhí)行:
程序清單1 0 - 5 3
首先裝入模式文檔,然后檢驗它是否真正包含模式節(jié)點(diǎn):
程序清單1 0 - 5 4
410使用XML 高級編程
下載
下一步,創(chuàng)建所有存儲計劃表的分析結(jié)果的元素:
程序清單1 0 - 5 5
我們實(shí)現(xiàn)模式的第一種途徑是創(chuàng)建需要的所有的表。這是一個包含每一種元素類型的表,
擁有i d r e f s類型的任何屬性類型的表和擁有枚舉類型的每一種類型的表。這兩種情況的表在元素
和屬性類型信息存儲之后被命名:
程序清單1 0 - 5 6
列舉的表被加以前綴e n u m _ t o確保不和別的名字沖突。我們不得不創(chuàng)建必要的結(jié)構(gòu),把列舉
的值加入到列舉的表中:
程序清單1 0 - 5 7
雖然我們?yōu)槊恳粋元素類型創(chuàng)建了表,但對元素之間存在的層次關(guān)系一無所知。因此,下
第10章XML和數(shù)據(jù)庫使用411 下載
一階段通過每一個元素和在匹配元素類型中定位它的定義的方式進(jìn)行:
程序清單1 0 - 5 8
如果元素不僅僅是純文本,或者不僅僅是元素的一個事件,或者是一些屬性,我們將把它
留在表中,并創(chuàng)建連接。然而,如果元素是純文本,或者是一個事件,或者它沒有屬性,它能
在父表中安全地當(dāng)作一個列:
程序清單1 0 - 5 9
介紹了所有的元素后,我們現(xiàn)在了解所有的屬性:
程序清單1 0 - 6 0
412使用XML 高級編程
下載
對每一種屬性,取得它們的定義:
程序清單1 0 - 6 1
不論是什么屬性類型,需要對父表做一些事情,現(xiàn)在取得它的名稱:
嚴(yán)格上來說,對屬性做的任何事情依賴于它的類型:
枚舉是依靠創(chuàng)建在屬性元素表上的列實(shí)現(xiàn)的。枚舉表在初期就已經(jīng)被創(chuàng)建了。
I D R E F也是加到父節(jié)點(diǎn)的一列:
I D R E F S需要建立一個連接:
I D意味著加入一列到父節(jié)點(diǎn)中:
指定數(shù)據(jù)類型意味著創(chuàng)建指定數(shù)據(jù)類型的列:
程序清單1 0 - 6 2
第10章XML和數(shù)據(jù)庫使用413 下載
現(xiàn)在我們在對列表的循環(huán)中創(chuàng)建或者刪除某一個表,來達(dá)到優(yōu)化的目的。注意,如果刪除
命令創(chuàng)建表,則不得不刪除相應(yīng)的結(jié)構(gòu)創(chuàng)建在表中的主鍵:
程序清單1 0 - 6 3
我們已經(jīng)創(chuàng)建了列表,因此把它加入到包含節(jié)點(diǎn)中。
把所有的限制、主鍵、外鍵和其他的內(nèi)容,放進(jìn)另一個容器,把它們放入包含節(jié)點(diǎn)中:
程序清單1 0 - 6 4
加入指令列表,用數(shù)據(jù)組裝一些表:
最后,為轉(zhuǎn)換存儲完整的文檔,裝入需要的樣式表( D B C r e a t e Vi e w. x s l,帶有這本書的可下
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(133)