【问题标题】:Error: It was detected that X is in namespace Y, but components from this namespace are not referenceable from schema document错误:检测到 X 位于命名空间 Y 中,但此命名空间中的组件不可从架构文档中引用
【发布时间】:2017-09-03 10:18:27
【问题描述】:

这个 xsd 元素有什么问题?

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="MessageInfoType">
        <xsd:sequence>
            <xsd:element minOccurs="0" maxOccurs="1" name="TimeStamp" type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="GetData">
        <xsd:annotation>
            <xsd:documentation>Send data</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element minOccurs="1" name="MessageInfo" type="xsd:MessageInfoType" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

收到错误 MessageInfoType 未声明。

【问题讨论】:

    标签: xml xsd xsd-validation xml-validation


    【解决方案1】:

    错误信息,

    src-resolve.4.2:解析组件“xsd:MessageInfoType”时出错。它 检测到“xsd:MessageInfoType”在命名空间中 'http://www.w3.org/2001/XMLSchema',但来自此命名空间的组件 不能从架构文档中引用 XSD 文件名。如果这是 命名空间不正确,可能需要 'xsd:MessageInfoType' 的前缀 被改变。如果这是正确的命名空间,那么适当的 'import' 标签应该被添加到 XSD 文件名

    当一个组件被引用但在给定的命名空间中找不到时发生。

    在您的情况下,您通过向 type="xsd:MessageInfoType" 添加不必要的命名空间前缀和在 XSD 根元素上添加不必要的默认命名空间前缀来阻止成功引用 MessageInfoType

    如何解决:xsd:schema中移除默认命名空间声明,并从MessageInfo的声明中移除type="xsd:MessageInfoType"中的命名空间前缀:

    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema elementFormDefault="qualified"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:complexType name="MessageInfoType">
        <xsd:sequence>
          <xsd:element name="TimeStamp" type="xsd:string"
                       minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="GetData">
        <xsd:annotation>
          <xsd:documentation>Send data</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="MessageInfo" type="MessageInfoType"
                         minOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
    

    然后错误信息就会消失。

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 2015-12-30
      • 2021-12-10
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2013-06-17
      • 1970-01-01
      相关资源
      最近更新 更多