我的 XML 与现有 XSD 是什么样子

问题描述 投票:0回答:1

学习 XSD 有点新鲜。
如果我有这个 XSD 有效架构,如下所示:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
      <xs:element name="optional">
        <xs:simpleType>
          <xs:restriction base="xs:string">
          <xs:maxLength value="10"/>
            </xs:restriction>
         </xs:simpleType>
        </xs:element>     
</xs:schema>

为什么这个 XML 没有被正确验证。

<?xml version="1.0"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
</note>
<optional>hi</optional>

如果我尝试根据 XSD 验证 XML,则会出现以下错误消息。

文档中根元素后面的标记必须格式正确。


我使用以下验证器引擎:
https://www.liquid-technologies.com/online-xsd-validator



我应该在 XML 中的哪里使用可选元素?


感谢所有帮助
xml xsd schema xsd-validation markup
1个回答
0
投票

这不是 XSD 验证错误;而是 XSD 验证错误。所有 XML 文档,无论任何关联的模式如何,都必须只有 1 个根元素。你不能拥有这个:

<?xml version="1.0"?>
<note>...</note>
<optional>hi</optional>

您的 XML 文档必须如下所示:

<?xml version="1.0"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
</note>

或者只是:

<?xml version="1.0"?>
<optional>hi</optional>

XSD 可以定义多个全局元素,但这并不意味着相应的 XML 文档中有多个根元素。

在本例中,您仅发布了 XSD 的摘录,但也许还有另一个元素应该是根元素,并且它本身就是

note
optional
的父元素,所以实际上您的 XML 应该是是这样的:

<?xml version="1.0"?>
<root>
    <optional>hi</optional>
    <note>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
    </note>
</root>

无论如何,您需要决定哪个元素是根。 XSD 的一件烦人的事情是,无法从众多全局元素中将一个全局元素标记为根。出于这个原因,许多 XSD 的设计仅包含一个全局元素,其余的都是带有子元素的全局复杂/简单类型。

© www.soinside.com 2019 - 2024. All rights reserved.