简单 XML 架构到 XSD 验证

Simple XML Schema to XSD validation

我试图找出解决这个问题的方法,但似乎找不到。 这只是一种简单的 XSD、XML 文件格式。 我不断收到的错误是:错误:元素 'contact':不需要此元素。

XML:

<?xml version="1.0" encoding="UTF-8"?>
<address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"si:noNamespaceSchemaLocation="address.xsd">
     <contact>
        <name>Hana Song</name>
        <phone>82-51-120</phone>
        <street>1001 Jungang-daero, Yeonje-gu</street>
        <city>Busan</city>
        <origin>Republic of Korea, South Korea</origin>
        <zip>47545</zip>
    </contact>
    <contact>
        <name>Genji Shimada</name>
        <phone>949-955-1380</phone>
        <street>1 Blizzard Way</street>
        <city>Irvine</city>
        <origin>CA, USA</origin>
        <zip>92618</zip>
    </contact>
    <contact>
        <name>Jesse McCree</name>
        <phone>800-777-2489</phone>
        <street>201 W. Marcy St.</street>
        <city>Santa Fe</city>
        <origin>NM, USA</origin>
        <zip>87501</zip>
    </contact>
</address>

XSD 文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--definition of simple elements -->

    <xs:element name="name" type="xs:string"/>
    <xs:element name="phone" type="xs:string"/>
    <xs:element name="street" type="xs:string"/>
    <xs:element name="city" type="xs:string"/>
    <xs:element name="origin" type="xs:string"/>
    <xs:element name="zip" type="xs:string"/>

<!--definition of attributes elements -->

<!--definition of complex elements-->
    <xs:element name="address">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="contact"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="contact">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="phone"/>
        <xs:element ref="street"/>
        <xs:element ref="city"/>
        <xs:element ref="origin"/>
        <xs:element ref="zip"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

您的 XML 中有多个 contact 元素,但 Schema 只允许一个,因为有属性:

minOccursmaxOccurs。默认情况下它们等于 1.

所以...将您的架构更改为:

<!--definition of complex elements-->
<xs:element name="address">
  <xs:complexType>
    <xs:sequence>
     <xs:element ref="contact" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

P.S。请记住,minOccurs="1" 要求至少有一个元素。如果那里根本没有联系方式,那么 minOccurs="0".

也不推荐 maxOccurs="unbounded",因为可能 "infinite XML attack"。 最好将它设置为一些大但实际的 maxValue。例如 maxOccurs="1000".