Schematron的Uri

时间:2014-10-30 20:46:06

标签: java xml 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

有人可以帮忙吗? 感谢。

3 个答案:

答案 0 :(得分:1)

您使用的是哪个版本和实施?

无论如何,试试:

http://purl.oclc.org/dsdl/schematron

ISO Schematron中对此进行了更改,http://www.ascc.net/xml/schematron是旧URI。

来自specification

  

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?