我正在使用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>
如果我将包含的XSD的代码复制到main.xsd中,则可以正常工作。如果没有,验证将找不到“ Element”的声明。
相关分类