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