曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費(fèi)者
的整個(gè)目錄(關(guān)于所有書籍的詳細(xì)資料),而這會(huì)迫使使用者從整個(gè)目錄中搜索自己感興趣的
一本書的信息,相反發(fā)送方僅發(fā)送這一本書的程序段給使用者即可。這樣就會(huì)減少傳輸消耗的
帶寬,進(jìn)而使接收段的剖析更為快捷,直接得到需求的信息,而根本不用去考慮濾除不必要的
信息。
2. 收集信息子集
讓我們擴(kuò)展一下本章前面的例子。假定Wr o x在X M L目錄文檔中包含了關(guān)于特權(quán),分布數(shù)量
等的私人信息。不過,如果信息不是鄰近的, X F I不允許我們將其作為一個(gè)段來傳送信息, X F I
這里顯然不是一個(gè)好的解決辦法。讓我們看下面的例子:
第8章鏈接和查詢使用279 下載
程序清單8 - 6 1
如果一個(gè)人索要關(guān)于《IE5 XML Programmer's Reference》這本書的信息,就會(huì)產(chǎn)生一個(gè)僅
僅包含兄弟元素作為該書的公有信息的程序段,但不包括私有信息:
程序清單8 - 6 2
然而,程序段對(duì)信息編輯來說不是個(gè)好的選擇(編輯待打印的信息子集),因?yàn)橹挥朽徑?br />
章節(jié)被指定—如果我們想發(fā)送除去私有信息的整個(gè)目錄,利用程序段的方法將不能達(dá)到這個(gè)目
的。對(duì)這類操作一個(gè)更好的辦法是X P a t h和X S LT,在我們討論那些技術(shù)的時(shí)候?qū)?huì)看到這一點(diǎn)。
3. 實(shí)時(shí)編輯和版本控制
仍然看上面的例子,我們假設(shè)目錄文檔內(nèi)容更深入一點(diǎn),實(shí)際包含了正被討論的每本書的
文本:
程序清單8 - 6 3
280使用XML 高級(jí)編程
下載
下面讓我們看一下如何為該書每個(gè)章節(jié)實(shí)現(xiàn)一個(gè)實(shí)時(shí)編輯和版本控制的簡單表單。
我們需要某一類數(shù)據(jù)庫來記錄跟蹤樹中每章的當(dāng)前狀態(tài)(參見表8 - 7)。
表8 - 7
書章狀態(tài)
IE5 XML Programmer's Reference 1 Not checked out
IE5 XML Programmer's Reference 2 Checked out to “jond”
IE5 XML Programmer's Reference 3 Checked out to “kevinw”
IE5 XML Programmer's Reference 4 Not checked out
當(dāng)然,如果我們對(duì)每章實(shí)施控制,就可以把它作為< C h a p t e r >元素上的一個(gè)狀態(tài)屬性達(dá)到這
個(gè)目的。
然后我們編寫一段應(yīng)用程序允許不同的作者和編輯檢驗(yàn)并對(duì)每一章進(jìn)行檢查。當(dāng)對(duì)一作者
來說某一章被檢查過了,僅把那一個(gè)程序段發(fā)送給作者:
這就允許一個(gè)作者對(duì)一個(gè)章節(jié)進(jìn)行操作,同時(shí)另外一個(gè)作者可操作另外一章。而不會(huì)相互
改寫和覆蓋對(duì)方的工作。當(dāng)一個(gè)作者對(duì)某一章的修改完成之后,他就可以把修改程序段發(fā)送回
Wr o x,然后集成到整個(gè)原始文檔。在數(shù)據(jù)庫中指定更新一個(gè)版本表單,指明何人何時(shí)編輯過文
檔將會(huì)是一個(gè)較簡單的事情,現(xiàn)在一些商業(yè)X M L服務(wù)器已經(jīng)可以實(shí)現(xiàn)這類功能。
8.5.3 問題:Bare文檔程序段并不總是充分的
前面提到我們可利用X F I檢索到X M L文檔的細(xì)節(jié),但是經(jīng)常接收方需要比此文檔程序段所包
含的更多的信息來完成工作;它經(jīng)常需要一些上下文的信息。下面我們要考查一些文檔程序段
不足以提供充分信息的情形,然后再看一下W 3 C對(duì)這個(gè)問題的解決辦法。
1. 描述什么
經(jīng)常在一個(gè)設(shè)計(jì)好的X M L文檔中,元素根據(jù)它們?cè)谖臋n結(jié)構(gòu)中的不同位置以不同的含義被
重復(fù)使用,看下面的例子:
程序清單8 - 6 4
第8章鏈接和查詢使用281 下載
現(xiàn)在,假如收到了如下的文檔程序段:
這是一本編程書的價(jià)格還是一對(duì)mocha latte的價(jià)格?由于沒有充分的信息,所以很難講。發(fā)
送方可以發(fā)送完整的父元素:
程序清單8 - 6 5
但是現(xiàn)在我們收到一些不想或者不必知道的信息。如果我們知道一些程序段的環(huán)境信息,
而不必接收上下文所有的內(nèi)容,這樣就非常好了。
2. 利用I D R E F和I D R E F S
前面的例子中已經(jīng)提到了Wr o x已經(jīng)發(fā)布了它的版本控制管理軟件。一位作者正在寫作第四
章,這時(shí)她意識(shí)到應(yīng)該為第一章寫的內(nèi)容引入一個(gè)索引,她記得為那一段加了一個(gè)I D,但記不
起來是什么了。由于僅僅有第四章程序段可以利用,而不能利用I D R E F映射到第一章的I D,如
果她能有些關(guān)于第一章的某類信息就好了—例如利用I D R E F S標(biāo)識(shí)的各部分的標(biāo)題—而不必
要下載整本書。
3. 驗(yàn)證處理器
假設(shè)我們用D T D來指定目錄例子中的內(nèi)容:
程序清單8 - 6 6
而且,一位作者想對(duì)一個(gè)章節(jié)進(jìn)行檢驗(yàn)。如果該作者利用驗(yàn)證處理器來查證章節(jié)結(jié)構(gòu),利
用原始的D T D去做會(huì)產(chǎn)生一個(gè)問題—原始D T D期盼的是一個(gè)< C a t a l o g >元素、< B o o k >元素等
等。一個(gè)理想的文檔版本會(huì)包含占位符來滿足D T D,但不包含占位符的內(nèi)容,從而使帶寬消耗
和處理時(shí)間達(dá)到最小化。
282使用XML 高級(jí)編程
下載
8.5.4 解決辦法:環(huán)境信息
幸運(yùn)的是W 3 C在制定X F I時(shí)已經(jīng)預(yù)計(jì)到會(huì)產(chǎn)生這些問題,所以提供了向接收方傳輸程序段的
同時(shí)附加傳輸環(huán)境信息的機(jī)制。
1. 什么是環(huán)境信息
環(huán)境信息是發(fā)送到接收方用于幫助描述原始文檔中程序段結(jié)構(gòu)位置的信息。X F I規(guī)范在允許
為使用者提供什么樣的環(huán)境信息方面有很大靈活性;發(fā)送的信息應(yīng)該基于使用者的需求。是和
直達(dá)文檔的程序段祖先一樣少,或者和原始文檔中所有不同的元素標(biāo)識(shí)一樣多,這些由X M L服
務(wù)器來決定什么樣的環(huán)境信息對(duì)用戶處理器有用。
然而規(guī)范沒有為環(huán)境信息如何傳輸作出明確的解釋,它提出了兩條建議。第一個(gè)建議是向
需求方發(fā)送兩個(gè)文件:
• 程序段上下文規(guī)范文件,它包含了有關(guān)這個(gè)元素的所有必要的信息,和包含該程序段的文
件索引。
• 程序段本身作為一個(gè)獨(dú)立的文件。
這樣就需要產(chǎn)生兩個(gè)文件,其中一個(gè)以某種方式隱藏起來(通過存儲(chǔ)在磁盤的文件或者其
他機(jī)制),它意味著接收處理器能夠提供圍繞該程序段的信息。
另外一個(gè)建議是僅傳輸一個(gè)文件,利用命名空間從真正的程序段內(nèi)容中分離出環(huán)境信息。
為了舉例說明程序段交換,我們采用前一條建議(稍后我們?cè)賮砜春笠粭l建議)。
2. 什么可以是環(huán)境信息的組成部分
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(98)