您的位置:首页 > 编程语言 > Java开发

Java and XML_读书笔记_2010-5-18

2010-05-19 09:48 218 查看
2010-05-18
五、验证XML
l 属性了特征方法
方 法
返回类型
参 数
语 法
setProperty()
void
String propertyId,
Object value
parser.setProperty(“[Property URI]”,
”[Object parameter]”);
setFeature()
void
String featureId,
Boolean state
parser.setFeature(“[Feature URI], true”);
getProperty()
Object
String propertyID
String separator =
(String)parser.getProperty( “[Property URI]”);
getFeature()
boolean
String featureID
if(parser.getFeature(“[Feature URI]”)) {
doSomething();
}
l 约束使数据具有了可移植性,而验证则保持了数据的一致性
l 警告:请求验证的结果中几乎没有警告产生。所有正在被验证的XML如果不符合作为引用的DTD均被作为错误处理。XML文档中的非法调用都是很严重的,并且很可能会发生错误。由于这个原因,特别是使用SAX2.0解析器时,很难产生警告。如果验证解析器被用于解析一个并未明确声明DTD的文档,就会产生警告信息。
l 非致命错误:验证XML时,最常遇到的SAX问题是非致命错误的产生。当违反了XML约束时错误就会产生。
l 致命的错误:非良构的文档会导致解析过程的终止,无效的文档通常是指明了那些能够被纠正的错误或客户端应该了解的错误。在未验证文档中使用无法接收的DTD时,可能遇到的唯一的致命错误是与引用DTD有关的语法错误。
l DTDHandler接口:在读取和分析XML文档DTD的过程中,SAX提供的组后一个核心文档管理器handler定义了回调方法。这个接口并未定义在验证的过程中所产生的事件,而只是定义了再读取DTD过程中产生的事件。(不重要)
n 未解析实体的声明:unparsedEntityDecl()只有当一个实体声明注明XML解析器不能解析一个特定实体时才会被使用。在引用图像或其他二进制数据,例如媒体文件时,未经解析的实体在XML文档中的使用非常普遍。这种方法接收实体的名字、公用变量和系统ID号以及实体的符号名字(notation name)
<document>
<myLogo>&CompanyLogo;</myLogo>
</document>
*******************************************
<!ENTITY CompanyLogo SYSTEM “images/logo.gif” NDATA gif>
关键字NDATA指示XML解析器不去处理实体引用。如果DTD经过了一个已注册的DTDHandler的处理,在实体声明中的信息被传递给回调函数。另一关键点是当实体声明在DTD中产生时将会使用回调方法,而不是在XML文档中解析时产生。这意味着即使实体不在XML文档中,回调方法也会产生。因此需要明确的是,回调方法是DTDHandler接口的一部分而不属于ContentHandler接口
n 符号声明:符号声明的产生总是和一个或多个未经解析处理的尸体声明有关,并且是第二种调用方法DTDHandler的主题。
<!NOTATION gif SYSTEM “http://www.gif.com”>
这些声明的产生通过notationDecl()回调方法报告给已注册的管理器。
l 注册管理器:parser.setDTDHandler(handler)
l 处理模式的SAX接口比使用DTDHandler更可靠
l 一个DTDHandler执行并不需要验证XML,但设置属性或使用一个不同的分析类时却需要
l 在开发中验证,在产品化中反复更新
关闭产品验证功能这一原则不适用的唯一场合是应用程序客户端积极的参与XML创建的时候或者从其他应用中接收XML
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: