如何使用RELAXNG模式和JAXP验证XML文档?

我希望使用RELAXNG模式验证XML文档,并且希望使用JAXP验证API

通过谷歌搜索,我似乎可以使用Jing和ISO RELAXJARV到JAXP桥。不幸的是,在我的类路径中添加了这两个元素之后,我无法让它工作SchemaFactory只是在尝试实例化工厂时抛出一个IllegalArgumentException——我查看了SchemaFactory内部,显然SchemaFactoryFinder返回一个空结果

因此,我希望您能回答这两个问题:

  • 我怎样才能使这项工作与景和这座桥
  • 是否有更好/不同的库我应该尝试

我需要这个来处理Java5和Java6

谢谢

我用以下行解决了Java 1.6上的这个错误:

//指定要为RELAX NG“compact”创建工厂
System.setProperty(SchemaFactory.class.getName()+”:“+xmlstants.RELAXNG_NS_URI,“com.thaiopensource.RELAXNG.jaxp.CompactSyntaxSchemaFactory”);
SchemaFactory factory=SchemaFactory.newInstance(xmlstants.RELAXNG\u NS\u URI);

这允许我使用Jing根据紧凑的RELAXNG模式验证XML文档。下面是完整的示例。我没有用那座桥或其他什么东西。运行时类路径只有jing.jar(20091111)和我自己的验证程序类

导入java.io.File;
导入java.io.IOException;
导入javax.xml.xmlstants;
导入javax.xml.transform.stream.StreamSource;
导入javax.xml.validation.Schema;
导入javax.xml.validation.SchemaFactory;
导入javax.xml.validation.Validator;
导入org.xml.sax.SAXException;
公共类验证
{
公共静态void main(字符串[]args)引发SAXException、IOException
{
//指定要为RELAX NG创建工厂
System.setProperty(SchemaFactory.class.getName()+”:“+xmlstants.RELAXNG_NS_URI,“com.thaiopensource.RELAXNG.jaxp.CompactSyntaxSchemaFactory”);
SchemaFactory factory=SchemaFactory.newInstance(xmlstants.RELAXNG\u NS\u URI);
//加载所需的特定架构。
//这里我从java.io.File加载它,但是我们也可以使用
//java.net.URL或javax.xml.transform.Source
File schemaLocation=新文件(args[0]);
//编译模式。
Schema=factory.newSchema(schemaLocation);
//从模式中获取验证程序。
Validator Validator=schema.newValidator();
对于(int i=1;i<args.length;i++)
{
字符串文件=args[i];
//检查文件
尝试
{
validator.validate(新的StreamSource(新的文件));
System.out.println(文件+“有效”);
}
捕获(SAXEx异常)
{
System.out.print(文件+)无效,因为:“+ex.getMessage()”;
}
}
}
}

再一次,我只测试了IonJava1.6

$java-版本
java版本“1.6.0_01”
Java(TM)SE运行时环境(build 1.6.0_01-b06)
Java HotSpot(TM)客户端虚拟机(构建1.6.0_01-b06,混合模式,共享)

发表评论