【问题标题】:How to import XSD in Another XSD如何在另一个 XSD 中导入 XSD
【发布时间】:2017-01-12 06:43:56
【问题描述】:

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

我有 HEADER.xsd。这对所有其他 xsd 来说都很常见。

头文件.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:解析组件“xs:reqHeader”时出错。检测到“xs:reqHeader”位于命名空间“http://www.w3.org/2001/XMLSchema”中,但此命名空间中的组件无法从架构文档“file:/D:/Projects/workspace/Message/resources/xsd/MESSAGE1.xsd”中引用.如果这是不正确的命名空间,则可能需要更改“xs:reqHeader”的前缀。如果这是正确的命名空间,则应将适当的“import”标签添加到“file:/D:/Projects/workspace/Message/resources/xsd/MESSAGE1.XSD”。

我的项目结构是:

/src/com

/lib

/resources/xsd/MESSAGE1.XSD

请有人帮我解决它。

【问题讨论】:

    标签: java xsd


    【解决方案1】:

    宾果!在与 XSD 进行了多次斗争之后,我找到了一种无错误的方法:

    代码如下:

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

    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>
    

    头文件.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位置。

    希望对你有帮助!

    【讨论】:

    • 对不起..我已经更正了..但我仍然有同样的问题。
    • 更新了答案
    • 改变了答案。在我的 Eclipse 中运行良好。
    • 更新了答案。在代码中,请根据您的本地驱动结构更改XSD文件夹位置。
    • 两者都有效。如果您使用的是相对路径,那么您需要像 这样编写,其中“res”是 XSD 所在的文件夹,该文件夹与您引用它的文件夹。如果你给出的是绝对路径,那么你需要写 记得在添加位置之前添加'file:'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2012-07-28
    • 2011-07-16
    • 1970-01-01
    • 2019-11-05
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多