• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

在各种情况下, 如果解析器不能识别特性或属性名, 它就必须产生一个
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.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(68)