XML 和 XML 模式验证

标签 xml schema validation

在验证器站点上上传时,会显示以下错误: 1) s4s-elt-must-match.1: 'pizza' 的内容必须匹配 (annotation?, (simpleType | complexType)?, (unique | key | keyref)*))。发现问题始于:complexType。 2)cvc-complex-type.2.4.a:发现以元素“name”开头的无效内容。预计将提供“{pizza}”之一。

代码如下: XML:

<?xml version="1.0"?>
<pizzamenu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="schemasnippet.xsd"> 
   <pizza id = "0011"/>   
  <name> Tal Fenek </name>
  <price>  9.95 </price> 
<description>The application of Web protocols to Biology</description> 

</pizzamenu>

架构:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="pizzamenu">
  <xs:complexType>
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="pizza">
        <xs:complexType>
                <xs:attribute name="id" type="xs:string" />

              </xs:complexType>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name">

            </xs:element> <!-- name -->
            <xs:element name="price">

            </xs:element> <!-- price -->
            <xs:element name="description">
            </xs:element> <!-- description -->
          </xs:sequence>
        </xs:complexType>
      </xs:element> <!-- pizza -->
    </xs:sequence>
  </xs:complexType>
</xs:element> <!-- pizzamenu -->
</xs:schema>

请帮忙

最佳答案

您的架构和 xml 似乎都有问题。

您的架构似乎试图指定名称、价格和描述标签必须包含在披萨标签内。在您的 xml 中,它们不是。

很可能 xml 应该更像是:

<?xml version="1.0"?>
<pizzamenu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="schemasnippet.xsd"> 
   <pizza id = "0011">   
      <name> Tal Fenek </name>
      <price>  9.95 </price> 
      <description>The application of Web protocols to Biology</description> 
   </pizza>
</pizzamenu>

但是您的架构正在使用两个 <xs:complexType>标签来定义单一类型,这是行不通的。单<xs:complexType>可用于定义 <pizza> 的属性和内容标签,只要属性放在最后即可。这意味着您的架构应如下所示:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="pizzamenu">
        <xs:complexType >
            <xs:sequence maxOccurs="unbounded">
                <xs:element name="pizza">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name">

                            </xs:element> <!-- name -->
                            <xs:element name="price">

                            </xs:element> <!-- price -->
                            <xs:element name="description">
                            </xs:element> <!-- description -->
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:string" />
                    </xs:complexType>
                </xs:element> <!-- pizza -->
            </xs:sequence>
        </xs:complexType>
    </xs:element> <!-- pizzamenu -->
</xs:schema>

关于XML 和 XML 模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780703/

相关文章:

python - 从 Python minidom XML 获取标签列表

xml - 使用 XML::LibXML::XPathContext 通过 Perl 解析 XML

java - 单击监听器上的单选按钮仅在选择切换按钮后才起作用

linq-to-sql - 根据相关数据库列验证字符串长度

javascript - ModelState.AddModelError 不在 asp.net.core RAZOR 页面中显示任何消息

c# - Xml 和数据集的问题

postgresql - 存储用户定义的段 JSONB 与单独的表?

php - 一篇很长的文章如何分片存入数据库方便检索和分页?

google-cloud-platform - 如何找到 Airflow 后端数据库的架构?

javascript - ZIP Code(美国邮政编码)验证