正 文

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


www.7dspace.com  更新日期:2005-10-29 4:55:30  七度空间


      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文件重复的装载指定的模式。

3页,页码:[1] [2] [3] 

上一篇:网管工具:Ghost的二十个实用参数
下一篇:微软不怕Google 6个月内升级搜索引擎技术
作者:  来源:Matrix ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐