如何在.xsd中解析包含的模式类型

时间:2015-10-20 20:43:41

标签: java xml xsd jaxb schema

我在同一个Escape文件夹中有两个.xsd个文件:

  1. outer.xsd
  2. inner.xsd
  3. src/main/resource看起来像这样:

    outer.xsd

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://project.domain.com/model" targetNamespace="http://project.domain.com/model" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:include schemaLocation="inner.xsd"/> <xs:element name="innerObject" type="tns:InnerObjectType"/> </xs:schema> 看起来像这样:

    inner.xsd

    现在,在另一个项目中,我使用<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:model="http://project.domain.com/model" targetNamespace="http://project.domain.com/model" elementFormDefault="qualified" attributeFormDefault="qualified" version="1.0"> <xs:complexType name="InnerObjectType"> <xs:sequence> <xs:element name="property1" type="xs:string"/> <xs:element name="property2" type="xs:string"/> </xs:sequence> <xs:complexType> </xs:schema> 来验证输入XML文件,如下所示:

    outer.xsd

    在我调用SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); try { ClassLoader classLoader = objectType.getClassLoader(); InputStream stream = classLoader.getResourceAsStream(schemaPath); Source schemaSource = new StreamSource(stream); Schema schema = factory.newSchema(schemaSource); ... } catch (SAXException exception) {...} 的行上,我收到以下异常:

    newSchema

    看来这段代码能够通过路径找到外部模式,但在解析内部类型的过程中,它无法找到内部模式。

    有人建议我如何解决这个内在类型?

    注意:我能够使用src-resolve: Cannot resolve the name 'tns:InnerObjectType' to a(n) 'type definition' component. 在eclipse中生成XML文件,所以我相对确定outer.xsd文件的结构是正确的......它只是无论在.xsd被解析时的上下文是什么,都无法访问outer.xsd

    一个平行的问题是:我如何找出正在解决类型的上下文? (即......在哪里寻找inner.xsd?)

0 个答案:

没有答案