【发布时间】:2014-04-24 22:47:18
【问题描述】:
我的代码正在创建一个 XML 文档(使用 JDOM 1.1),我希望针对 XSD 文件对其进行验证。但是,根据http://www.w3.org/TR/xmlschema-1/#schema-loc,提供给解析器的schemaLocation 属性似乎只适用于可访问的URL。
没有办法引用本地 XSD 文件吗?针对无法在全球范围内访问的 XSD 进行验证是不可能的吗?没看懂……
【问题讨论】:
我的代码正在创建一个 XML 文档(使用 JDOM 1.1),我希望针对 XSD 文件对其进行验证。但是,根据http://www.w3.org/TR/xmlschema-1/#schema-loc,提供给解析器的schemaLocation 属性似乎只适用于可访问的URL。
没有办法引用本地 XSD 文件吗?针对无法在全球范围内访问的 XSD 进行验证是不可能的吗?没看懂……
【问题讨论】:
首先,schemaLocation 属性只是指定架构位置的一种方式,而且在很多情况下它并不是最好的方式(如果您不相信文档是有效的,为什么要相信它会告诉您它的架构在哪里?)。大多数模式验证器可能会提供在外部提供模式位置的选项,例如在命令行上或通过 API 或 GUI。
其次,schemaLocation 是一个 URI。因此,它可以是一个相对 URL,例如“test.xsd”标识与源文档位于同一目录中的模式文档。
【讨论】:
我强烈建议您升级到 JDOM 2.0.5。 JDOM2 中用于模式验证的机制更易于理解和实现。考虑这段代码(采用from the JDOM2 package documentation (near the bottom)):
File xsdfile = new File("myschema.xsd");
XMLReaderJDOMFactory factory = new XMLReaderXSDFactory(xsdfile);
SAXBuilder sb = new SAXBuilder(factory);
Document doc = sb.build(new File("file.xml"));
【讨论】: