曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
W 3 C指定下面一些信息可組成程序段的環境信息:
• 用于原始文檔的D T D的U R I
• 文檔的內部子集的U R I
• 從中提取出程序段的原始文檔的U R I
• 原始文檔中程序段位置的詳細說明書
• 程序段體的祖先信息
• 程序段體的兄弟信息
• 每個祖先的兄弟信息
• 每個祖先或者兄弟的后代信息
• 上面所指的這些元素的屬性信息
要注意的是這覆蓋了節點樹中除包含特定的程序段以外的所有節點;X M L服務器的作者可
設計出程序段發生器,用于函蓋與接收方解釋程序段這個目的相關的信息的每個部分。
3. 如何描述程序段
W 3 C已經為申明程序段產生如下的命名空間:
h t t p : / / w w w . w 3 . o r g / X M L / F r a g m e n t / 1 . 0
< f c s >元素(Fragment Context Specifier的縮寫)是程序段上下文詳細說明的外包元素。所有
的程序段上下文都用< f c s >元素括起來,它具有下面四個屬性:
• extref—原始文檔D T D的U R I。
第8章鏈接和查詢使用283 下載
• intref—“擴展”內部子集的U R I。
• parentref—原始文檔本身的U R I。
• sourcelocn—原始文檔內程序段位置的規范。
值得注意的是此時W 3 C沒有為定位指定編碼方案,雖然我們希望W 3 C利用XPo i n t e r來指定
位置。
< f c s >元素的子結點應該是原始文檔元素樹的某一部分(可能會包含屬性)。并且,要描述的
元素數的部分由發送應用程序決定,而且是基于接收應用程序的需求。在子樹中程序段體應該
歸屬的位置,應該包含一個< f r a g b o d y >元素。這個元素具有屬性—f r a g b o d y r e f—應該是正確
程序段的U R I索引。
讓我們看下面的例子。假如說我們有如下的目錄文件:
程序清單8 - 6 7
我們僅把書的I S B N發送給接收方,我們會產生一個文檔塊上下文的詳細說明,如下所示:
程序清單8 - 6 8
這里你可以看到程序段上下文詳細說明文件包含< C a t a l o g >元素和< B o o k >元素,提供了程
序段的上下文和第二文件的索引,它準確包含了所需求的程序段。在以< f r a g b o d y >元素引用
“h t t p : / / w w w. w r o x . c o m / C a t a l o g / I S B N . X M L”的程序段自身文件中,我們可得到下面的程序
段:
284使用XML 高級編程
下載
程序清單8 - 6 9
8.5.5 回顧實例
下面再看一下我們的三個例子,了解如何利用程序段和上下文將信息發送給接收方的。
1. 我描述什么
前面我們試圖解決如何斷定發送到接收方的價格是和咖啡相關而不是書。如果我們傳輸下
面的程序段和上下文的詳細說明:
程序清單8 - 7 0
使用者將會知道下面的程序段是< C o ff e e >元素的孩子,< B o o k s t o r e >元素的孫子:
程序清單8 - 7 1
所以對于接收方來說P r i c e . x m l文件中< P r i c e >元素表示什么就變得很明顯了。
2. IDREF和I D R E F S
如果作者所編輯的內容全部在第四章的話,那么她如何為第一章的一個段落添加一個索引
I D呢?如果我們發送出下面的程序段上下文詳細說明:
程序清單8 - 7 2
第8章鏈接和查詢使用285 下載
作者會有一個到本章上下文的引用,它是I E 5 X M L C h a p t e r 4 . x m l文件的一個片段:
程序清單8 - 7 3
現在,作者在程序段上下文詳細說明文件中擁有可以反饋到每一章各位置的I D,可以發
送—也就是說可以為IntroChap4 添加一個I D R E F用于回指第一章中給出的關于第四章的信
息。
3. 驗證處理器
為了保證驗證處理器運行良好,我們引入一個除character 數據外的所有必備元素的副本—
最優元素將被剔除。這樣對這個例子來說,我們可以傳輸下面的程序段上下文詳細說明:
程序清單8 - 7 4
它提供了具有使下面程序段有效的所需元素的處理器:
程序清單8 - 7 5
需要指出的是我們去掉了< C a t e g o r y >元素(這是由于我們在D T D中聲明< C a t e g o r y >是可選
的)和附加的< C h a p t e r >元素(這是由于在D T D中< C h a p t e r >被指定具有一個或多個事件)。收到
這兩個文件時,處理器會在適當的位置分析程序段體,就好像它是一個外部解析實體,去掉上
下文塊的外包,并根據D T D來驗證文檔。
286使用XML 高級編程
下載
8.5.6 如何傳輸程序段
現在我們已經給出了一些程序段和程序段上下文詳細說明,那么如何將它們發送給接收方
呢?W 3 C沒有在X F I規范中強制程序段的傳輸方式,但它提供了兩種不同的方法使識別片段接收
處理器可以收到傳輸。
1. 分離文件機制
我們已經看了程序段處理兩個文件的方法。一個文件包含程序段本身,另外一個是程序段
上下文詳細說明文件。為了發送信息給接收方,發送了程序段上下文詳細說明文件。識別片段
接收處理器剖析了程序段上下文詳細說明文件,并到f r a g b o d y r e f屬性中的位置讀取程序段本身
信息(參見圖8 - 1 4)。
圖8-14
不過這種方式需程序段服務器應用程序產生兩個文件,其中一個文件被隱藏起來(通過將
文件存于硬盤或者其他機制)。而且,這需要在網絡上多一個來回,而這是我們盡可能要避免
的。
2. 計劃包機制
W 3 C聲明了程序段傳輸在X F I規范范疇之外,不過提供了非正式(建議采用但并不必須的
W 3 C碼)方法,令程序段和程序段體一起打包作為一個文件。最主要的一點就是建議采用一個
新的命名空間來提供包含程序段體的元素。就像如下形式來取代含有程序段上下文詳細說明的
兩個文件:
程序清單8 - 7 6
第8章鏈接和查詢使用287 下載
XML片段服務應用程序
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(99)