如何在另一个XSD中导入XSD

时间:2017-01-12 06:43:56

标签: java xsd

我正在尝试将xsd导入另一个xsd。我看到一些问题需要导入。我无法理解网上提供的解决方案。下面是我的XSD。

我有HEADER.xsd。所有其他xsd都是常见的。

HEADER.XSD

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="Header" type="reqHeader"/>

  <xs:complexType name="reqHeader">
    <xs:sequence>
      <xs:element name="MsgId" type="xs:string" minOccurs="0"/>
      <xs:element name="MsgDesc" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

MESSAGE1.XSD

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:import namespace="" schemaLocation="\resources\xsd\HEADER.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" />

  <xs:element name="Message">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="Header" type="xs:reqHeader" />

        <xs:element name="Body">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="User">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="Name" minOccurs="1"/>
                    <xs:element type="xs:int" name="DOB" minOccurs="1"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这里我试图导入被调用的元素,因为它对于所有xsd都是常见的[MESSAGE1.XSD MESSAGE2.XSD等]。

异常说:不是有效的:src-resolve.4.2:解析组件错误&#39; xs:reqHeader&#39;。检测到&#39; xs:reqHeader&#39;在名称空间&#39; http://www.w3.org/2001/XMLSchema&#39;中,但此命名空间中的组件无法从架构文档&file:/ D:/ Projects / workspace / Message / resources / xsd / MESSAGE1引用。 XSD&#39 ;.如果这是不正确的命名空间,可能是&#39; xs:reqHeader&#39;的前缀。需要改变。如果这是正确的命名空间,那么适当的导入&#39;标签应添加到&#39;文件:/ D:/Projects/workspace/Message/resources/xsd/MESSAGE1.XSD'。

我的项目结构是:

/ SRC / COM

/ lib中

/resources/xsd/MESSAGE1.XSD

请有人帮我解决。

1 个答案:

答案 0 :(得分:4)

宾果!在与XSD进行了很多战斗后,我发现了一种无错误的方式:

以下是代码:

  • 您需要将xs:import更改为xs:include
  • namespace=""
  • 中删除xmlns:xs="http://www.w3.org/2001/XMLSchema"xs:include

MESSAGE1.xsd

<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:include schemaLocation="header.xsd" />

<xs:element name="Message">
    <xs:complexType>
        <xs:sequence>

            <xs:element name="Header" type="reqHeader" />

            <xs:element name="Body">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="User">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element type="xs:string" name="Name" minOccurs="1" />
                                    <xs:element type="xs:int" name="DOB" minOccurs="1" />
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

HEADER.xsd

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="Header" type="reqHeader" />

<xs:complexType name="reqHeader">
    <xs:sequence>
        <xs:element name="MsgId" type="xs:string" minOccurs="0" />
        <xs:element name="MsgDesc" type="xs:string" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

请根据您当地档案的位置修改XSD位置。

希望它有所帮助!