赛迪网 > IT技术 技术应用子站 > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

模式验证结构-JAXP 1.3 的特性

发布时间:2005.10.28 15:33     来源:赛迪论坛    作者:E剑

XML 处理的Java API (JAXP) 1.3在Java 2 平台里已经首先引入了, 标准版(J2SE) 5.0 并且同样也在目前已可使用的Java Web Services Developer Pack (Java WSDP)中 。 JAXP 1.3 新增了一个模式验证结构(SVF), 也叫验证API, 它提供了依靠模式高效验证XML的高级能力。SVF同样也提供了比JAXP 1.2中更高的执行效率。
在考察SVF之前, 我们看看早期的模式验证方法。以下的代码片断示范了SAX解析的方法:

SAXParserFactory sf = SAXParserFactory.newInstance();
   sf.setNamespaceAware(true); 
   sf.setValidating(true);            
   SAXParser sp = sf.newSAXParser();
   sp.setProperty(
     SCHEMA_LANGUAGE, XMLConstants.W3C_XML_SCHEMA_NS_URI);
   sp.setProperty(SCHEMA_SOURCE, schema);
   sp.parse(new File(xml), dh);

基本的步骤是:

1.创建一个SAXParserFactory 对象。

2.配置SAXParserFactory对象来生成支持XML命名空间的分析程序, 以及需要解析的验证文档。

3.创建一个SAX 分析程序。

4.设置SAX 分析程序属性的模式语言和模式来源。在本例中为W3C XML模式。

5.解析文件。

注意,这个过程的耦合验证和XML处理。

作为比较, SVF方法中, XML文件模式验证从XML 处理中分离出来。SVP方法的第一步是编译模式:

final String sl = XMLConstants.W3C_XML_SCHEMA_NS_URI;
   SchemaFactory factory = SchemaFactory.newInstance(sl);
   StreamSource ss = new StreamSource("mySchema.xsd");
   Schema schema = factory.newSchema(ss);

SchemaFactory是一个模式编译器。它读指定的模式, 根据指定的模式语言的约束来检查模式语法和语义, 并且返回一个在内存中不变的Schema对象。不可变意味着一旦创建了Schema对象约束设置就不可改变。一个应用程序使用同一个Schema对象验证同样的文件两次也总会得到同样的结果。

然后,您使用模式验证一个XML文件。根据你的需要将有三个方法可供选择:

•在DocumentBuilderFactory 或SAXParserFactory上设置了Schema实例

•创建一个Validator

•创建一个ValidatorHandler (验证SAX流)

所有这三个方法都保证, XML文件只在从Schema实例中获得的模式中有效。

查看第一种方法, 在一个factory上设置Schema实例:

SAXParserFactory spf = SAXParserFactory.newInstance();
   spf.setSchema(schema);
   SAXParser parser = spf.newSAXParser();
   parser.parse(<XML DOCUMENT>);

在这里, 同一个Schema实例传输到所有的由SAXParserFactory创建的SAXParser实例中。SAXParser对象解析XML 文件并且同时验证它所依靠的Schema实例。 由于SAXParser并不为需要解析的每个XML文件都反复装载模式,这个方法可为整个模式处理提高相当的效率。与前面的方法比较,前面需要为每个需要验证的XML文件重复的装载指定的模式。

(T112)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 运用Tomcat5和PostgreSQL配置开发JSP详解 (10-27) · Java的垃圾回收机制详解和调优大全 (10-25)
· 说三道四之:JavaBean与EJB有何不同之处 (10-25) · 面向Java开发人员的Ajax:Java对象序列化 (10-25)
· EJB的核心技术应用总结之得心应手篇 (10-18) · 实战体会Java多线程编程的精要文集 (10-18)
· Java框架研究——JSF与Struts的异同 (09-20) · 在Eclipse 3.1中体验J2SE 5.0新特性三 (09-20)
· 播种菜园之一 Java几个常见错误简析 (09-16) · Java和JSP编程中应该注意的几个常见问题 (09-16)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管