曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
在各種情況下, 如果解析器不能識別特性或屬性名, 它就必須產生一個
S A X N o t R e c o n g i z e d E x c e p t i o n。這通常意味著應用程序不能確認解析器是否支持該特性。如果解析器
識別了特性或屬性名,但不能把它設置為指定值,它就必須產生一個S A X N o t S u p p o r t e d E x c e p t i o n。
更具體地說,考慮一個新的稱為h t t p : / / x m l . o rg / s a x / f e a t u r e s / v a l i d a t i o n的核心特性。該特性用
來修復SAX 1.0在應用程序不能發現或控制解析器是否有效時的問題。在S A X 2 . 0中,如果特性
第6章SAX 1.0: XML簡易API使用187 下載
是設置為打開的,解析器必須驗證X M L文檔;如果是關閉的,解析器必須不做驗證(換句話說,
只要文檔是規范正確的,解析器必須能夠正常工作)。
表6 - 4
方法描述
g e t F e a t u r e ( f e a t u r e N a m e ) 允許應用程序查詢解析器它是否支持一個特定的特性
s e t F e a t u r e ( f e a t u r e N a m e , b o o l e a n ) 允許應用程序要求解析器開關一個特定的特性
g e t P r o p e r t y ( f e a t u r e N a m e ) 允許應用程序獲取一些特定屬性的當前值
s e tPr o p e r t y ( f e a t u r e N a m e , o b j e c t ) 允許應用程序用提供的值設置一些特定的屬性
一個明確地要求解析器進行驗證的應用程序可以進行下列調用:
這是一個核心屬性,所以所有的S A X 2解析器應該能夠識別該屬性名。可以進行驗證的解析
器將正確地返回值,而不能進行驗證的解析器將產生一個S A X N o t S u p p o r t e d E x c e p t i o n。
同樣,一個明確地要求解析器不進行驗證的應用程序可以進行下列調用:
這時,堅持進行驗證的解析器必須用一個S A X N o t S u p p o r t e d E x c e p t i o n響應這個請求。
另一方面,僅僅想知道解析器是否進行驗證的應用程序可以進行下列調用:
6.5.2 核心的特性和屬性
表6 - 5是在S A X 2中定義的核心特性和屬性。特性只是B o o l e a n值屬性的簡稱。
表6 - 5
名稱(前綴為h t t p : / / x m l . o rg / s a x ) 值含義
/ f e a t u r e s / v a l i d a t i o n b o o l e a n 進行驗證
/ f e a t u r e s / e x t e r n a l - g e n e r a l - e n t i t i e s b o o l e a n 擴展一般的(解析過的)外部實體
/ f e a t u r e s / e x t e r n a l - p a r a m e t e r- e n t i t i e s b o o l e a n 擴展外部D T D子集和外部參數實體
/ f e a t u r e s / n a m e s p a c e b o o l e a n 處理命名空間聲明。帶前綴的元素名
和屬性名將使用命名空間的U R I代替前
綴
/ f e a t u r e s / n o r m a l i z e - t e x t b o o l e a n 通過確保字符數據的所有連續片段在
c h a r a c t e r s ( )方法的一個調用中被傳遞,
以規格化字符數據
/ f e a t u r e s / u s e - l o c a t o r b o o l e a n 通過調用s e t D o c u m e n t L o c a t o r ( )方法提
供給應用程序一個L o c a t o r對象
/ p r o p e r t i e s / n a m e s p a c e - s e p S t r i n g 當命名空間特性被設置時,被用于
URI和名稱本地部分之間的分隔符
/ p r o p e r t i e s / d o m - n o d e o rg . w 3 c . d o m . N o d e 只讀屬性:如果源文檔的D O M存在于
內存中,該屬性識別和當前事件有關的
DOM節點
188使用XML 高級編程
下載
(續)
名稱(前綴為h t t p : / / x m l . o rg / s a x ) 值含義
/ p r o p e r t i e s / x m l - s t r i n g S t r i n g 只讀屬性:對當前事件進行X M L方式
表達的字符串
/ h a n d l e r s / D e c l H a n d l e r o rg.xml.sax.misc. DeclHandler 設置一個處理器處理D T D中出現的元
素和屬性聲明
/ h a n d l e r s / L e x i c a l H a n d l e r o rg.xml.sax.misc. LexicalHandler 設置一個處理器處理詞法事件,包括
C D ATA項,實體和注釋
/ h a n d l e r s / N a m e s p a c e H a n d l e r o rg.xml.sax.misc. NamespaceHandler 設置一個處理器處理命名空間聲明
S A X 2中的核心屬性包括三個新的事件處理接口:特性、屬性和處理器。(然而,記住“核
心”僅僅指每個解析器必須識別這些特性的請求;解析器仍然可以拒絕請求。)
聲明處理器, D e c l H a n d l e r,滿足了訪問D T D中結構化定義的需求。作為應用程序必須解
析的一個字符串, D e c l H a n d l e r提供對元素聲明的訪問,而且這種訪問是可能的最簡單的方
式。
詞法處理器, L e x i c a l H a n d l e r,滿足了另一種訪問需求,這種訪問是針對SAX 1.0中禁止的
信息,因為這些信息被認為是應用程序不感興趣的。這包括內部實體的界限, C D ATA項的界限
和注釋的存在信息。因為允許應用程序盡可能減少在文檔被復制時對文檔的更改,很多應用程
序編寫者需要這些特性信息。同樣,基于其他一些原因也需要注釋信息:例如, X S LT建議稿允
許一個樣式指示應該對源文檔中注釋的操作,所以用S A X接口編寫的X S LT解釋器需要訪問這些
信息。
命名空間處理器, N a m e s p a c e H a n d l e r,滿足了比命名空間特性更高級的命名空間處理的需
求。命名空間特性僅僅使用目前有效的命名空間定義擴展元素和屬性前綴,相對而言,命名空
間處理器允許命名空間定義本身以它們自己的名義作為事件進行處理。在下面一些情況中,這
會有所幫助:
• 應用程序在上下文中而不是元素名和屬性名中使用前綴(例如,可能在屬性值中使用前
綴)。
• 應用程序需要知道使用的前綴(例如,用于錯誤消息中,或試圖復制部分源文檔時)。
如前面說明的, SAX 2.0規范還不能認為是穩定的規范,所以即使找到一個支持SAX 2.0的
解析器,也要小心使用該解析器。
6.6 小結
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(68)