曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
將返回下面的節(jié)點(diǎn):
作為一個(gè)X M L文檔它是無(wú)效的,因?yàn)闆](méi)有根節(jié)點(diǎn)—或一個(gè)以上的根節(jié)點(diǎn),看你是怎么看
了!
然而,我們可以像以前一樣簡(jiǎn)單地用一個(gè)< A u t h o r s >節(jié)點(diǎn)包裝每件東西,因?yàn)榻Y(jié)果不一定是
作者。以前的查詢用< A u t h o r s >包裝后看上去將是:
程序清單1 0 - 2 4
它將打亂我們的D T D或模式,因?yàn)?lt; L a s t N a m e >只能作為< A u t h o r >的子節(jié)點(diǎn)而不是
< A u t h o r s >的。當(dāng)然可以說(shuō)結(jié)果只能返回作者,并且只能將結(jié)果放在一個(gè)< A u t h o r s >元素里,但
是這將極大地降低了腳本的靈活性。例如,如果有人想列出在數(shù)據(jù)庫(kù)中所有圖片的引用列表,
那樣他們就可以創(chuàng)建一個(gè)肖像長(zhǎng)廊,他們可能使用如下的查詢:
這個(gè)查詢要求我們的服務(wù)器查找所有的< P o r t r a i t >元素,元素要有p i c L i n k的屬性,它被賦了
一些值,那就是,它是非空的。另外,每個(gè)返回的< P o r t r a i t >元素必須是< A u t h o r >元素的子元素,
< A u t h o r >元素必須是< A u t h o r s >元素的子元素。那個(gè)查詢可能返回下面的結(jié)果:
程序清單1 0 - 2 5
第10章XML和數(shù)據(jù)庫(kù)使用385 下載
如果不將它包裝在< A u t h o r s >里,并且不能僅僅創(chuàng)建像希望中的新的如< L a s t N a m e >和
< P o r t r a i t s >這樣的包含元素(因?yàn)樗鼈円矔?huì)校驗(yàn)失敗),然后可能會(huì)考慮用一般的元素來(lái)進(jìn)行包
裝。例如,可以設(shè)計(jì)自己的包容器,并且也許在它的里面包括對(duì)到達(dá)的信息應(yīng)如何返回的信息:
程序清單1 0 - 2 6
甚至可以更進(jìn)一步,加入時(shí)間戳和其他的信息,用來(lái)輔助處理查詢結(jié)果。在下一部分,我
們將簡(jiǎn)要地看一下關(guān)于一些包裝數(shù)據(jù)的方法。現(xiàn)在只能返回所要求的數(shù)據(jù)—例如,可能有多
于一個(gè)的元素在文檔的根。讓我們完成腳本,把X S L查詢結(jié)果寫(xiě)出來(lái):
程序清單1 0 - 2 7
注意這次使用了循環(huán)。因?yàn)榭赡苡幸恍╉敿?jí)的節(jié)點(diǎn),需要在結(jié)果節(jié)點(diǎn)列表中循環(huán),為每一
個(gè)節(jié)點(diǎn)輸出X M L,要好于簡(jiǎn)單地把整棵樹(shù)輸出成為X M L。
3. 優(yōu)化
在前面所勾勒出的技術(shù)相當(dāng)?shù)托АT诎l(fā)覺(jué)只想要其中的一個(gè)之前,它要求我們讀出所有的
作者。在我們這個(gè)簡(jiǎn)單的例子中,它不是一個(gè)很大的處理,但是在一個(gè)有著成千上萬(wàn)記錄的數(shù)
據(jù)庫(kù)中可能會(huì)很慢。
為了提高效率,應(yīng)該利用其下的數(shù)據(jù)庫(kù)的查詢能力,并且使用X S LT和X P a t h的能力來(lái)合并
它們。假設(shè)想主要考查關(guān)系數(shù)據(jù)庫(kù),我們將快速地看一下X P a t h語(yǔ)句是如何被映射成S Q L語(yǔ)句。
例如:
要求所有叫M I的作者。這個(gè)可以直接被映射為:
選擇一個(gè)單個(gè)的作者應(yīng)該是:
將被映射成:
X P a t h也允許根據(jù)樹(shù)中其他部分的節(jié)點(diǎn)的值來(lái)選擇節(jié)點(diǎn)。例如,使用第7章的書(shū)目錄模式,
386使用XML 高級(jí)編程
下載
如果你想選擇所有的書(shū),這些書(shū)與一個(gè)特別的出版商相關(guān)聯(lián),則需要下面的X P a t h查詢:
這個(gè)意思是說(shuō),我們需要所有的< B o o k >元素,把它的i m p r i n t / @ I D設(shè)成與< P u b l i s h e r >的
< C o r p o r a t e N a m e >為“ Wrox Press Ltd. ” 下的< I m p r i n t s >元素下的< I m p r i n t >元素的
s h o r t I m p r i n t N a m e屬性一樣的值。
在S Q L中模擬分級(jí)的語(yǔ)句是很直接的。我們可以使用簡(jiǎn)單地連接語(yǔ)句來(lái)得到父/子關(guān)系,所
以/ C a t a l o g / B o o k將變成:
請(qǐng)求的指定出版商的查詢部分為:
也不是很困難:
程序清單1 0 - 2 8
(假設(shè)我們知道文本元素< C o r p o r a t e N a m e >已經(jīng)被存在一列而不是表中了。我們可以在后面
看到。)
在C a t a l o g / B o o k上的過(guò)濾很困難。為了做到這一點(diǎn),我們需要介紹關(guān)于S E L E C T語(yǔ)句的另一
個(gè)方面—子查詢。子查詢?cè)试S查詢結(jié)果被用作值的列表用于檢查另一個(gè)查詢。在我們的例子
中,想創(chuàng)建一個(gè)所有s h o r t I m p r i n t N a m e值的列表,并且查看哪一個(gè)與i m p r i n t元素的I D這個(gè)值相匹
配,在使用那個(gè)列表查找引用i m p r i n t的書(shū)之前。我們可以如下實(shí)現(xiàn):
程序清單1 0 - 2 9
請(qǐng)注意,我已經(jīng)方便地優(yōu)化了在以前建立的用來(lái)只選擇一個(gè)出版商的其他過(guò)濾器。然而,
我確信你可以看出,用S Q L查詢來(lái)模擬X P a t h查詢是可能的。但是存在兩個(gè)問(wèn)題。第一個(gè)就是
X P a t h仍然不是一個(gè)標(biāo)準(zhǔn),所以現(xiàn)在你所寫(xiě)的可能會(huì)改變。第二個(gè)就是你需要分析X P a t h語(yǔ)句,
并且能夠理解整個(gè)語(yǔ)法。這些問(wèn)題如何被完全解決還不是很清楚,但是我們可以看到X P a t h解析
第10章XML和數(shù)據(jù)庫(kù)使用387 下載
器的出現(xiàn)是位于特別數(shù)據(jù)庫(kù)層的頂端,就像O D B C站在不同低層數(shù)據(jù)存儲(chǔ)格式的頂端一樣。
10.2.3 結(jié)論
X M L提供了一個(gè)相當(dāng)強(qiáng)大的在不同數(shù)據(jù)間交換數(shù)據(jù)的方法。這個(gè)對(duì)于數(shù)據(jù)庫(kù)特別有用,因
為在不同類型數(shù)據(jù)間發(fā)生的數(shù)據(jù)相互交換是相當(dāng)困難的。
盡管數(shù)據(jù)可以以一種普通的格式被表示,并沒(méi)有什么用于取回的可以接受的標(biāo)準(zhǔn)。盡管不
像我們希望地那樣靈活,用X P a t h指定查詢說(shuō)明了使用標(biāo)準(zhǔn)查詢語(yǔ)法的潛力。
10.2.4 你可能需要的標(biāo)準(zhǔn)
我們已經(jīng)討論了用于選擇X M L數(shù)據(jù)的不同可能的查詢語(yǔ)法。對(duì)于查詢標(biāo)準(zhǔn)的問(wèn)題,我們也
討論了如何返回?cái)?shù)據(jù)結(jié)果的論點(diǎn)。提出幾個(gè)標(biāo)準(zhǔn)指示應(yīng)該如何去做。
1. 片段數(shù)據(jù)交換
最簡(jiǎn)單和可能最有效的是片段數(shù)據(jù)交換建議,在h t t p : / / w w w. w 3 . o rg / T R / W D - x m l - f r a g m e n t。
這個(gè)提議提供了一種機(jī)制,通過(guò)對(duì)它的松散的節(jié)點(diǎn)給出一些上下文。在第8章我們已經(jīng)看到了這
一點(diǎn),但是現(xiàn)在拿來(lái)在這里使用,并且看一個(gè)例子:取出一個(gè)作者的傳記。我們?cè)谇懊嫠鶎?xiě)的
代碼允許使用下面的語(yǔ)法:
來(lái)取回:
程序清單1 0 - 3 0
片段數(shù)據(jù)交換的提議建議,應(yīng)創(chuàng)建一個(gè)提供上下文的分離的文檔:
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(127)