错误:检测到X在命名空间Y中,但此命名空间中的组件无法从架构文档引用

时间:2017-04-07 22:46:53

标签: xml xsd xsd-validation xml-validation

这个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。

1 个答案:

答案 0 :(得分:2)

错误消息

  

src-resolve.4.2:解析组件错误&#39; xsd:MessageInfoType&#39;。它   检测到&#39; xsd:MessageInfoType&#39;在命名空间中   &#39; http://www.w3.org/2001/XMLSchema&#39;,但来自此命名空间的组件   不能从架构文档中引用    XSD文件名 。如果这是   错误的命名空间,也许是&#39; xsd:MessageInfoType&#39;的前缀。需求   要改变。如果这是正确的命名空间,那么适当   &#39;进口&#39;标签应该添加到    XSD文件名

在引用组件但在给定名称空间中找不到时发生。

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

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

<?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>

然后错误消息就会消失。