2011年计算机二级考试JAVA知识点整理(75)

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  catch (SAXException ex) {

  System.out.println(input + " is not valid because ");

  System.out.println(ex.getMessage());

  }

  }

  }

  如果用普通的 Sun JDK 不增加其他库,运行该程序时可能会看到如下所示的结果:

  Exception in thread "main" java.lang.IllegalArgumentException:

  http://relaxng.org/ns/structure/1.0

  at javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java:186)

  at DocbookRELAXNGCheck.main(DocbookRELAXNGCheck.java:14)

  这是因为,JDK 本身没有带 RELAX NG 验证程序。如果不能识别模式语言,SchemaFactory.newInstance() 就会抛出 IllegalArgumentException。但是如果安装了 RELAX NG 库,比如 Jing 和 JAXP 1.3 适配程序,就会与 W3C 模式显示同样的结果。

  确定模式语言

  javax.xml.constants 类定义了几个常量来标识模式语言:

  XMLConstants.W3C_XML_SCHEMA_NS_URI:http://www.w3.org/2001/XMLSchema

  XMLConstants.RELAXNG_NS_URI:http://relaxng.org/ns/structure/1.0

  XMLConstants.XML_DTD_NS_URI:http://www.w3.org/TR/REC-xml

  这是一个不完全的列表。实现可以随时向该表增加其他 URL 来标识其他的模式语言。URL 通常是模式语言的名称空间统一资源标识符(URI)。比如,URL http://www.ascc.net/xml/schematron 标识了 Schematron 模式。

  Sun 的 JDK 5 仅支持 XSD 模式。虽然也支持 DTD 验证,但是它不能通过 javax.xml.validation API 使用。对于 DTD,必须使用常规的 SAX XMLReader 类。不过可以另外安装支持不同模式语言的其他库。

  如何定位模式工厂

  Java 编程语言没有限制模式工厂只能有一种。可以把标识某种模式语言的 URI 传递给 SchemaFactory.newInstance(),它按照下列顺序搜索匹配的工厂:

  用 "javax.xml.validation.SchemaFactory:schemaURL" 系统属性命名的类

  用 $java.home/lib/jaxp.properties 文件中的 "javax.xml.validation.SchemaFactory:schemaURL" 属性命名的类

  在任何 Java Archive (JAR) 文件的 META-INF/services 目录中发现的 javax.xml.validation.SchemaFactory 服务提供程序

  平台默认的 SchemaFactory,JDK 5 中为 com.sun.org.apache.xerces.internal.jaxp.validation.xs.SchemaFactoryImpl

  要支持自定义的模式语言和对应的验证程序,只需要编写 SchemaFactory、Schema 和 Validator(它们知道如何处理模式语言)的子类。然后将您的 JAR 文件安装到上述四个位置中的一个。对于添加与 W3C XML Schema 语言这类声明性语言相比更适合用 Java 之类的图灵完整语言检查的约束,这一点很重要。可以定义一种微模式语言,编写简单的实现,然后将其插入到验证层。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答