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