RelaxNG:在 jar 中合并语法
RelaxNG: merging grammar inside a jar
我正在使用 relaxNG 和 Jing(Java 中的 relaxNG 验证器)来验证一些 XML 文件,我需要合并语法(在两个语法中重用元素定义)。
为了实现合并,我在元素中包含了一个语法,并将包含的语法文件的值赋予 href 属性:
<include href="embededGrammar.xml"/>
所有语法文件都位于我的 Java 项目资源中的相同路径。
在 IDE 中测试应用程序时,已验证发现的包含语法和我的 XML 数据文件。
但是,当我将应用程序打包到 JAR 文件时,找不到嵌入式语法,并且错误消息报告说它试图在与 jar 文件相同的位置找到它(不在 jar 文件中与嵌入语法相同的位置)它应该)。
我已经实施了一个解决方法,但我想实施一个干净的解决方案,因此如果有人解决了这样的问题,请告诉我如何解决。
谢谢
编辑:如果我硬编码 href 值以指向 jar 文件中的文件 (jar:file:./jarfile.jar/path/to/file/ebeddedGrammar.xml) 但 jar文件名可能会更改(附加版本号),而且无法在 IDE.
内进行测试
我找到了一个解决方案,包括注册一个 URLStreamHandler,它允许使用类路径协议引用资源 URL,就像我们可以使用 Spring 框架一样。
结果是我可以像这样引用嵌入式语法文件:
<include href="classpath:path/to/resource/embeddedGrammar.xml"/>
可以在此处找到有关如何注册和使用 URLStreamHandler 的清晰说明:URL to load resources from the classpath in Java
我正在使用 relaxNG 和 Jing(Java 中的 relaxNG 验证器)来验证一些 XML 文件,我需要合并语法(在两个语法中重用元素定义)。
为了实现合并,我在元素中包含了一个语法,并将包含的语法文件的值赋予 href 属性:
<include href="embededGrammar.xml"/>
所有语法文件都位于我的 Java 项目资源中的相同路径。
在 IDE 中测试应用程序时,已验证发现的包含语法和我的 XML 数据文件。
但是,当我将应用程序打包到 JAR 文件时,找不到嵌入式语法,并且错误消息报告说它试图在与 jar 文件相同的位置找到它(不在 jar 文件中与嵌入语法相同的位置)它应该)。
我已经实施了一个解决方法,但我想实施一个干净的解决方案,因此如果有人解决了这样的问题,请告诉我如何解决。
谢谢
编辑:如果我硬编码 href 值以指向 jar 文件中的文件 (jar:file:./jarfile.jar/path/to/file/ebeddedGrammar.xml) 但 jar文件名可能会更改(附加版本号),而且无法在 IDE.
内进行测试我找到了一个解决方案,包括注册一个 URLStreamHandler,它允许使用类路径协议引用资源 URL,就像我们可以使用 Spring 框架一样。 结果是我可以像这样引用嵌入式语法文件:
<include href="classpath:path/to/resource/embeddedGrammar.xml"/>
可以在此处找到有关如何注册和使用 URLStreamHandler 的清晰说明:URL to load resources from the classpath in Java