Uri of Schematron



我实际上正在尝试根据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

有人能帮忙吗?谢谢

或者,您可以使用https://github.com/phax/ph-schematron/用于根据SCH文件验证XML。它既提供了"纯"验证,也提供了基于XSLT的验证。

您使用哪个版本和实现?

无论如何,试试:

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

没有实现模式的SchemaFactory

这并不一定意味着Uri是错误的(尽管你的Uri已经过时了,请参阅词典编纂者的答案)。

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中的服务提供者模式。

但我想您不想实现自己的模式验证器,您只想使用一个。如果这两种方法对你有用的话,试试看。他们是在使用谷歌搜索ServiceFactory schematron 时出现的

  • https://github.com/ugli/uglisch
  • https://code.google.com/p/serene/wiki/isoSchematronSupport

可能还有更多的方法,而且似乎还有其他几种方法没有使用ServiceFactory路径。请参阅在哪里可以找到ISO Schematron验证器的Java实现?

最新更新