为什么 XSD 验证期望 {element} 带有大括号而不仅仅是元素? [英] Why does XSD validation expect {element} with braces rather than just element?

查看:13
本文介绍了为什么 XSD 验证期望 {element} 带有大括号而不仅仅是元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试根据以下 XSD 验证以下 XML 时,我收到以下错误:

When I try to validate the below XML against the below XSD I get the following error:

cvc-complex-type.2.4.a:发现以元素 >'personal' 开头的无效内容.预期为{personal}"之一.

cvc-complex-type.2.4.a: Invalid content was found starting with element >'personal'. One of '{personal} expected.

XML

<main xmlns = "http://www.example.com"
      xmlns:xsi = "https://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation = "main.xsd">
  <personal>
    <full-name>John Smith</full-name>
    <contact>
      <street-address>12345 Example Street</street-address>
      <city>Somewhere</city>
      <state>EX</state>
      <postal-code>111 111</postal-code>
      <phone>123 456 7890</phone>
      <email>myemail@example.com</email>
    </contact>
  </personal>
</main>  

XSD

<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
            targetNamespace = "http://www.example.com"
            xmlns = "http://www.example.com">
  <xsd:element name = "main" type = "main-type"/>

  <xsd:complexType name = "main-type">
    <xsd:all>
      <xsd:element name = "personal" type = "personal-type"/>
    </xsd:all>
  </xsd:complexType>

  <xsd:complexType name = "personal-type">
    <xsd:all>
      <xsd:element name = "full-name" type = "xsd:string" 
                   minOccurs = "1"/>
      <xsd:element name = "contact" type = "contact-type" 
                   minOccurs = "1"/>
    </xsd:all>
  </xsd:complexType>

  <!--Different xsd:strings for contact information in contact-type-->
  <xsd:complexType name = "contact-type">
    <xsd:all>
      <xsd:element name = "street-address" type = "xsd:string"/>
      <xsd:element name = "city" type = "xsd:string"/>
      <xsd:element name = "state" type = "xsd:string"/>
      <xsd:element name = "postal-code" type = "xsd:string"/>
      <xsd:element name = "phone" type = "xsd:string"/>
      <xsd:element name = "email" type = "xsd:string"/>
    </xsd:all>
  </xsd:complexType>
</xsd:schema>

有什么问题,我该如何解决?

What's the problem and how can I fix it?

推荐答案

您发布的 XML 在您发布的错误消息之前有两个初步问题:

Your XML as posted has two preliminary problems ahead of the error message you've posted:

  1. 改变

xmlns:xsi = "https://www.w3.org/2001/XMLSchema-instance"

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"

  • 改变

  • Change

    xsi:schemaLocation = "main.xsd"
    

    xsi:schemaLocation = "http://www.example.com main.xsd"
    

  • <小时>

    现在,您发布的 XML 和 XSD 实际上将处于显示您发布的问题的状态:


    Now, your posted XML and XSD actually will be in a state to exhibit your posted problem:

    [错误] main.xml:4:13: cvc-complex-type.2.4.a: 无效内容是发现以元素个人"开头.'{personal}' 之一是预计.

    [Error] main.xml:4:13: cvc-complex-type.2.4.a: Invalid content was found starting with element 'personal'. One of '{personal}' is expected.

    解释:这个错误告诉你根据你的 XSD,personal 应该不在命名空间中;One of '{personal}' is expected 中的 {} 表明了这一点.

    Explanation: This error is telling you that personal is expected to be in no namespace according to your XSD; the { and } in One of '{personal}' is expected indicates this.

    您可能会认为,由于您的 XSD 声明了 targetNamespace="http://www.example.com",因此它的所有组件都放置在 http://www 中.example.com 命名空间.这不适用于本地声明的组件,但是 除非您设置 elementFormDefault="qualified" -- 默认为 unqualified.

    You might think that since your XSD declares targetNamespace="http://www.example.com" that all of its components are thus placed into the http://www.example.com namespace. This is not true of locally declared components, however unless you set elementFormDefault="qualified" -- the default is unqualified.

    因此,进行最后一项更改:添加

    Therefore, make one last change: Add

    elementFormDefault="qualified"
    

    xsd:schema 元素,然后您的 XML 对您的 XSD 有效.

    to the xsd:schema element, and then your XML valid against your XSD.

    另请参阅 关于 elementFormDefault 含义的答案.

    这篇关于为什么 XSD 验证期望 {element} 带有大括号而不仅仅是元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆