0

我实际上是在尝试针对 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

任何人都可以帮忙吗?谢谢。

4

3 回答 3

2

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

于 2015-01-13T16:12:03.463 回答
1

您使用哪个版本和实现?

无论如何,尝试:

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

这在 ISO Schematron 中已更改,http://www.ascc.net/xml/schematron是旧的 URI。

规范

ISO Schematron 现在在四个实际方面与 Schematron 1.5 不同:

  • 使用持久 URL (PURL) 采用了新的命名空间,与其他 ISO DSDL 语言相同: http://purl.oclc.org/dsdl/schematron
于 2014-10-30T21:28:11.577 回答
0

没有实现模式的 SchemaFactory

并不一定意味着 Uri 是错误的(不过你的它已经过时了,请参阅lexicore 的回答)。

SchemaFactoy是一个abstract类,并隐藏了需要有一个特定于模式的子类来理解模式的事实。有标准 Uris / 模式的实现,但默认 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条路径。请参阅在哪里可以找到 ISO Schematron 验证器的 Java 实现?

于 2014-10-30T23:38:28.107 回答