我实际上是在尝试使用Java中的schematron验证xml文件。我有以下陈述:
SchemaFactory factory = SchemaFactory.newInstance("http://www.ascc.net/xml/schematron");
但是当我运行该程序时,我收到此错误:
Exception in thread "main" java.lang.IllegalArgumentException: No SchemaFactory that implements the schema language specified by: http://www.ascc.net/xml/schematron could be loaded
有人可以帮忙吗? 感谢。
答案 0 :(得分:1)
您使用的是哪个版本和实施?
无论如何,试试:
http://purl.oclc.org/dsdl/schematron
ISO Schematron中对此进行了更改,http://www.ascc.net/xml/schematron
是旧URI。
ISO Schematron现在与Schematron 1.5的不同之处在于四个实际 方面:
- 与其他ISO DSDL语言一样,使用持久性URL(PURL)采用了新的命名空间:
http://purl.oclc.org/dsdl/schematron
答案 1 :(得分:1)
或者,您可以使用https://github.com/phax/ph-schematron/来验证针对SCH文件的XML。它提供“纯”以及基于XSLT的验证。
答案 2 :(得分:0)
没有实现架构的SchemaFactory
并不一定意味着Uri是错的(尽管你过时了,见lexicore's answer)。
SchemaFactoy
是一个abstract
类,隐藏了一个事实,即需要一个了解架构的特定于架构的子类。有标准Uris / schemas的实现,但是默认Java安装中包含的schematron似乎没有。
您可以找到"说明"如何在newInstance
方法
要查找给定模式语言的SchemaFactory对象,此方法按以下顺序查看以下位置[...]
- [..]系统属性" javax.xml.validation.SchemaFactory:schemaLanguage" [..]
- $ java.home / lib / jaxp.properties [..]
- 服务提供商[..]匹配资源目录META-INF / services中的javax.xml.validation.SchemaFactory。
这三个中的最后一个可能是最有趣的一个。如果您对此感兴趣,http://docs.oracle.com/javase/tutorial/ext/basics/spi.html会更多地解释java中的服务提供者模式。
但我想你不想实现自己的schematron验证器,你只想使用一个。尝试这两个中的任何一个都适合你。他们在使用谷歌搜索ServiceFactory schematron
可能还有更多,似乎还有其他一些方法似乎不会使用此ServiceFactory
路径。见Where can I find a Java implementation of an ISO Schematron validator?