我使用下面的代码片段在静态块中创建一个Schema对象:
URL url = getClass().getClassLoader().getResource("test.xsd");
和test.xsd正在导入另外三个XSD文件
我的问题是,当引用它们时(例如在验证时),导入是否可用,或者我是否必须通过制作URL对象来专门加载导入。
答案 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。