XSD验证错误 - 在同一定义中引用的复杂类型

时间:2015-01-10 13:32:47

标签: xsd xsd-validation

我正在尝试编写我的第一个XSD。 。 。 XSD如下所示,不进行验证。

<xsd:schema elementFormDefault="qualified" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">   
    <xsd:complexType name="Hdr">
        <xsd:sequence>
            <xsd:element name="ID" type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>    
    <xsd:element name="Header" type="xsd:Hdr" />
</xsd:schema>

我正在使用http://www.utilities-online.info/xsdvalidation/进行验证

我收到此错误

  

无效。错误 - 第7,49行:org.xml.sax.SAXParseException; lineNumber:7; columnNumber:49; src-resolve.4.2:解析组件'xsd:Hdr'时出错。       检测到'xsd:Hdr'位于命名空间“http://www.w3.org/2001/XMLSchema”中,但此命名空间中的组件无法从架构文档“null”引用。       如果这是不正确的命名空间,则可能需要更改'xsd:Hdr'的前缀。       如果这是正确的命名空间,则应将适当的“import”标记添加到“null”。       错误 - 第7,49行:org.xml.sax.SAXParseException; lineNumber:7; columnNumber:49; src-resolve:无法将名称'xsd:Hdr'解析为(n)'类型定义'组件。

我无法弄清楚我的XSD出了什么问题。有人可以指导。

1 个答案:

答案 0 :(得分:2)

更改

  <xsd:element name="Header" type="xsd:Hdr" />

  <xsd:element name="Header" type="Hdr" />

如果定义了目标命名空间,您可以使用其前缀来引用Hdr,但是您永远不会使用http://www.w3.org/2001/XMLSchema命名空间来进行此类引用。