Java XSD循环导入

Java XSD循环导入,java,xsd,xsom,Java,Xsd,Xsom,我需要用XSOM解析一个XSD,但是这个XSD包含循环导入 A.xsd A.xsd变为 <xs:schema xmlns=”ns1” targetNamespace=”ns1”> <xs:import namespace=”ns2” schemaLocation=”B.xsd”/> </xs:schema> <xs:schema xmlns=”ns2” targetNamespace=”ns2” xmlns:ns1=”ns1”> <

我需要用
XSOM
解析一个XSD,但是这个XSD包含循环导入

A.xsd

A.xsd变为

<xs:schema xmlns=”ns1” targetNamespace=”ns1”>
  <xs:import namespace=”ns2” schemaLocation=”B.xsd”/>
</xs:schema>
<xs:schema xmlns=”ns2” targetNamespace=”ns2” xmlns:ns1=”ns1”>
  <xs:import namespace=”ns1” schemaLocation=”C.xsd”/>
  <xs:complexType name="MyComplex">
    <xs:sequence>
      <xs:element ref="ns1:MyElement" minOccurs="0"/>
    <xs:sequence>
  <xs:complexType>
</xs:schema>
我使用JDK1.7附带的标准实现。我得到一个例外:

src-resolve: Cannot resolve the name 'ns1:MyElement' to a(n) 'element declaration' component.
问题是资源解析器是为B名称空间调用的,而不是为有意义的A名称空间调用的。由于命名空间A由A.xsd和C.xsd共享,因此资源解析器无法找到C.xsd中定义的元素

循环进口有效吗?是否可以中断循环导入,以便通过
XSOM
对其进行分析,然后由
SchemaFactory
加载?

关于一般问题: 您会问“循环导入有效吗?”如果循环性是指存在一个模式文档链S[1],S[2],…,S[n],其中模式文档S[1]按名称引用模式文档S[2],S[2]到S[3]。。。从S[n-1]到S[n],从S[n]到S[1],那么我不相信XSD 1.0规范或XSD 1.1明确地说了这样或那样的话。(一些工作组成员试图说服工作组提高其对这一主题和相关主题的清晰性,但失败了。)一些实现支持循环导入(以及其他形式的循环),但我认为不可能从规范中辩称您的实现做错了什么


另一方面,如果您的意思仅仅是存在一个循环,那么对于0,我按照您的建议创建了一个包含所有导入的额外模式,它非常有效。谢谢
<xs:schema xmlns=”ns1” targetNamespace=”ns1”>
  <xs:import namespace=”ns2” schemaLocation=”B.xsd”/>
</xs:schema>
<xs:schema xmlns=”ns2” targetNamespace=”ns2” xmlns:ns1=”ns1”>
  <xs:import namespace=”ns1” schemaLocation=”C.xsd”/>
  <xs:complexType name="MyComplex">
    <xs:sequence>
      <xs:element ref="ns1:MyElement" minOccurs="0"/>
    <xs:sequence>
  <xs:complexType>
</xs:schema>
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
sf.setResourceResolver(new MyResourceResolver());
src-resolve: Cannot resolve the name 'ns1:MyElement' to a(n) 'element declaration' component.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="ns1" schemaLocation="A.xsd"/>
  <xs:import namespace="ns2" schemaLocation="B.xsd"/>
</xs:schema>