实际上,我正在尝试在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有人能帮上忙吗?谢谢。
发布于 2015-01-14 00:12:03
或者,您可以使用https://github.com/phax/ph-schematron/根据SCH文件验证XML。它既提供“纯”验证,也提供基于XSLT的验证。
发布于 2014-10-31 05:28:12
您使用的是哪个版本和实现?
不管怎样,试一下:
http://purl.oclc.org/dsdl/schematron这在ISO Schematron中进行了更改,http://www.ascc.net/xml/schematron是旧的URI。
从specification
ISO Schematron现在在四个实际方面与Schematron1.5有所不同:
与其他ISO语言一样,使用永久URL (PURL)采用了一个新的命名空间:http://purl.oclc.org/dsdl/schematron
发布于 2014-10-31 07:38:28
否实现架构的SchemaFactory
并不一定意味着Uri是错误的(您的Uri已经过时了,请参阅lexicore's answer)。
SchemaFactoy是一个abstract类,它隐藏了这样一个事实,即需要有一个特定于模式的子类来理解模式。有标准Uris /模式的实现,但似乎没有默认Java安装中包含的schematron的实现。
您可以在newInstance方法的文档中找到如何提供自己的实现的“说明”
要查找给定模式语言的SchemaFactory对象,此方法将按以下顺序查找以下位置...
中的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?
https://stackoverflow.com/questions/26662945
复制相似问题