我正在使用 Java 5 javax.xml.validation.Validator 来验证 XML 文件。我已经为一个仅使用导入的模式完成了它,并且一切正常。现在我正在尝试使用另一个使用导入和一个包含的模式进行验证。我遇到的问题是主模式中的元素被忽略了,验证说它找不到它们的声明。
这是我构建架构的方式:
InputStream includeInputStream = getClass().getClassLoader().getResource("include.xsd").openStream();
InputStream importInputStream = getClass().getClassLoader().getResource("import.xsd").openStream();
InputStream mainInputStream = getClass().getClassLoader().getResource("main.xsd").openStream();
Source[] sourceSchema = new SAXSource[]{includeInputStream , importInputStream,
mainInputStream };
Schema schema = factory.newSchema(sourceSchema);
现在这里是 main.xsd 中声明的摘录
<xsd:schema xmlns="http://schema.omg.org/spec/BPMN/2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:import="http://www.foo.com/import" targetNamespace="http://main/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:import namespace="http://www.foo.com/import" schemaLocation="import.xsd"/>
<xsd:include schemaLocation="include.xsd"/>
<xsd:element name="element" type="tElement"/>
<...>
</xsd:schema>
如果我在 main.xsd 中复制我包含的 XSD 的代码,它工作正常。如果我不这样做,验证就不会找到“元素”的声明。
原文由 Melanie 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要使用 LSResourceResolver 才能使其正常工作。请查看下面的示例代码。
验证方法:
资源解析器实现:
资源解析器返回的输入实现: