Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据Java中的Schematron模式验证文档?_Java_Validation_Schema_Jaxp_Schematron - Fatal编程技术网

如何根据Java中的Schematron模式验证文档?

如何根据Java中的Schematron模式验证文档?,java,validation,schema,jaxp,schematron,Java,Validation,Schema,Jaxp,Schematron,据我所知 我可以在屏幕上看到一些API,大部分是实验性的或不完整的 是否有一种在Java中验证schematron的方法是完整、高效的,并且可以与JAXP API一起使用?支持ISO前schematron验证(请注意,Jing的实现也是基于XSLT的) 还有一些XSLT实现可以很容易地从Java调用。您需要决定您感兴趣的Schematron版本,然后获得相应的样式表-所有这些样式表都应该可以从Schematron.com获得。该过程非常简单,基本上包括两个步骤: 在Schematron模式上应

据我所知

我可以在屏幕上看到一些API,大部分是实验性的或不完整的

是否有一种在Java中验证schematron的方法是完整、高效的,并且可以与JAXP API一起使用?

支持ISO前schematron验证(请注意,Jing的实现也是基于XSLT的)

还有一些XSLT实现可以很容易地从Java调用。您需要决定您感兴趣的Schematron版本,然后获得相应的样式表-所有这些样式表都应该可以从Schematron.com获得。该过程非常简单,基本上包括两个步骤:

  • 在Schematron模式上应用框架XSLT,以获得在XSLT中表示Schematron模式的新XSLT样式表
  • 将获得的XSLT应用于实例文档或多个文档以验证它们

JAXP只是一个API,它不需要实现对RELAXNG的支持。您需要检查您使用的特定实现,看看它是否支持Relax NG。

纯Java Schematron实现位于 它同时支持XSLT方法和纯Java方法。

您可以查看(公开:我的代码)。它主要用于单元测试,但也可以用于普通代码。它是使用XSLT实现的

单元测试示例:

ValidationOutput result = in(booksDocument)
    .forEvery("book")
    .check("author")
    .validate();
assertThat(result).hasNoErrors();
StreamSource schemaSource = new StreamSource(... your schematron schema ...);
StreamSource xmlSource = new StreamSource(... your xml document ... );
StreamResult output = ... here your SVRL will be saved ... 
// validation 
validator.validate(xmlSource, schemaSource, output);
独立验证示例:

ValidationOutput result = in(booksDocument)
    .forEvery("book")
    .check("author")
    .validate();
assertThat(result).hasNoErrors();
StreamSource schemaSource = new StreamSource(... your schematron schema ...);
StreamSource xmlSource = new StreamSource(... your xml document ... );
StreamResult output = ... here your SVRL will be saved ... 
// validation 
validator.validate(xmlSource, schemaSource, output);
使用SVRL的对象表示:

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...

要么是JAXP不太支持RelaxNG,要么是我在尝试使用它时犯了错误。我没有尝试过RelaxNG tbh,只是WXS不是一个很好的复制品,但也请参见“JAXP只是一个API,它不需要实现对Relax NG的支持。”这句话中的“不是”一词是错误的,对吗?你的意思是它确实需要支持,对吗?不,这不是一个错误。JAXP只需要支持W3CXML模式,对于其他模式语言,您需要检查实现是否支持它。另见