我正在使用下面的代码片段在静态块中创建一个 Schema 对象:
URL url = getClass().getClassLoader().getResource("test.xsd");
并且 test.xsd 正在导入其他三个 XSD 文件,
我的问题是当引用它们时(如验证时)导入是否可用,或者我是否必须通过创建 URL 对象来专门加载导入。
我正在使用下面的代码片段在静态块中创建一个 Schema 对象:
URL url = getClass().getClassLoader().getResource("test.xsd");
并且 test.xsd 正在导入其他三个 XSD 文件,
我的问题是当引用它们时(如验证时)导入是否可用,或者我是否必须通过创建 URL 对象来专门加载导入。
因为当您使用时,您getClass().getClassLoader().getResource("test.xsd");
实际上并没有加载test.xsd
,而只是获取它的 URL,您不需要做任何其他事情。
XSDimport
仅对适当的工具有意义。作为示例验证器。
因此,当您将架构位置传递给验证器时,它可以是绝对路径、当前工作目录的相对路径或 URL。
然后,当验证器处理 XSD 时,它会尝试以imports
相同的方式获取 - 绝对路径,相对于test.xsd
它在test.xsd
.
不,您必须显式加载导入的 XSD,因为getResource()
不了解 XSD 语义——它在资源/文件级别运行,而不是 XSD 级别。