XSD导入会在资源加载时自动加载吗?

时间:2017-02-20 17:36:53

标签: java xml xsd classloader resource-loading

我使用下面的代码片段在静态块中创建一个Schema对象:

URL url = getClass().getClassLoader().getResource("test.xsd");

和test.xsd正在导入另外三个XSD文件

我的问题是,当引用它们时(例如在验证时),导入是否可用,或者我是否必须通过制作URL对象来专门加载导入。

2 个答案:

答案 0 :(得分:0)

不,您必须显式加载导入的XSD,因为getResource()不了解XSD语义 - 它在资源/文件级别而不是XSD级别运行。

答案 1 :(得分:0)

因为当您使用getClass().getClassLoader().getResource("test.xsd");时,实际上并未加载test.xsd,而只是获取其中的URL,您无需执行任何其他操作。

XSD import仅对适当的工具有意义。作为示例验证器。

因此,当您将架构位置传递给验证器时,它可以是绝对路径,当前工作目录或URL的相对路径。

然后,当验证程序处理XSD时,它会尝试以imports相同的方式获取绝对路径,相对于test.xsd中定义的test.xsd架构位置或URL。