XML XSD 验证中的全局声明错误

Posted

技术标签:

【中文标题】XML XSD 验证中的全局声明错误【英文标题】:global declaration error in XML XSD validation 【发布时间】:2022-01-10 09:24:05 【问题描述】:

我是 XML 和 XSD 创建的新手。我正处于尝试形成验证模式的非常基本的阶段。但是,我花了很多时间在这个圈子上。如果有人可以查看并请让我更好地了解代码发生了什么?就是说根报告没有全局声明。

错误代码为

Cvc-elt.1.a:找不到元素“xs:reports”的声明。第 1 行,第 134 列。

 <?xml version="1.0" encoding="UTF-8"?>

<xs:reports xmlns:xs="https://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="user.xsd">

    user(
    userID SERIAL,
    username varchar(255),
    password varchar(255),
    firstname varchar(255),
    middlename varchar(255),
    lastname varchar(255),
    email varchar(255),
  dob date,
    gender varchar(10)
  profile_photo bytea,
  home_phone varchar(50),
    cell_phone varchar(50),
    created_date timestamp default current_timestamp
  );
</xs:reports>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
  <xs:element name="reports">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="user">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="userID" type="xs:string"/>
              <xs:element name="username" type="xs:string"/>
              <xs:element name="password" type="xs:string"/>
              <xs:element name="firstname" type="xs:string"/>
              <xs:element name="middlename" type="xs:string"/>
              <xs:element name="lastname" type="xs:string"/>
              <xs:element name="email" type="xs:string"/>
              <xs:element name="dob" type="xs:date"/>
              <xs:element name="gender" type="xs:string"/>
              <xs:element name="profile_photo" type="xs:string"/>
              <xs:element name="cell_phone" type="xs:string"/>
              <xs:element name="created_date" type="xs:dateTime"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

【问题讨论】:

【参考方案1】:

要纠正您未能将 XML 与 XSD 关联的直接错误,请阅读How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?

然后,在编写 XML 时实际上遵循 XSD:

<reports>
  <user>
    <userID>123</userID>
    <username>John Smith</username>
    ...
  </user>
</reports>

还有一个问题是,为什么 XSD 会有 userreports 的子级,但您可以让现有的 XSD 与新的 XML 一样作为第一步工作。

【讨论】:

非常感谢您的帮助!!所有问题都已解决。

以上是关于XML XSD 验证中的全局声明错误的主要内容,如果未能解决你的问题,请参考以下文章

带有Schema的XML没有验证并且给我“元素声明的内容必须匹配”

无法找到xsd元素xml的声明

无法针对xsd架构验证xml doc(无法找到元素'replyMessage'的声明)

未声明 XML 签名元素

JSLinting ES6 模块:未声明的全局变量(来自 CDN 的 jQuery)

使用 php 针对 xsd 验证 xml 文件