XML 复杂类型架构中的验证错误

Validation error in XML Schema for complexType

错误:

s4s-elt-must-match.1: The content of 'viviendas' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: complextype.

架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://wwww.vivienda.io"
 xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.vivienda.io">
  <xs:element name="viviendas">
    <xs:complextype>
      <xs:sequence maxoccurs="unbounded">
        <xs:element name="vivienda" minoccurs="1">
          <xs:complextype>
            <xs:sequence>
              <xs:element name="direccion">
                <xs:complextype>
                  <xs:sequence>
                    <xs:element name="calle"></xs:element>
                    <xs:element name="numero"></xs:element>
                    <xs:element name="localidad"></xs:element>
                    <xs:element name="provincia"></xs:element>
                  </xs:sequence>
                </xs:complextype>
              </xs:element>
              <xs:element name="refCatastral"></xs:element>
              <xs:element name="habitaciones">
                <xs:complextype>
                  <xs:sequence>
                    <xs:element name="habitacion" minoccurs="1">
                      <xs:complextype>
                        <xs:attribute name="area" use="required" type="xs:string">
                          <xs:complextype>
                            <xs:restriction base="xs:integer">
                              <xs:mininclusive value="1"/>
                              <xs:maxlength value="2"/>
                            </xs:restriction>
                          </xs:complextype>
                        </xs:attribute>
                        <xs:attribute name="tipo" use="required" >
                          <xs:complextype>
                            <xs:restriction base="xs:string">
                              <xs:pattern value="salon|cocina|baño|dormitorio"/>
                            </xs:restriction>
                          </xs:complextype>
                        </xs:attribute>
                      </xs:complextype>
                    </xs:element>
                  </xs:sequence>
                </xs:complextype>
              </xs:element>
              <xs:element name="servicios">
                <xs:complextype>
                  <xs:sequence>
                    <xs:element name="servicio" minoccurs="1"></xs:element>
                  </xs:sequence>
                </xs:complextype>
              </xs:element>
            </xs:sequence>
          </xs:complextype>
        </xs:element>
        <xs:element name="comprador" minoccurs="0" maxoccurs="1">
          <xs:complextype>
            <xs:attribute name="dni" use="required">
              <xs:simpletype>
                <xs:restriction base="xs:string">
                  <xs:pattern value="[0-9]{9}[A-Z]{1}"/>
                </xs:restriction>
              </xs:simpletype>
            </xs:attribute>
            <xs:sequence>
              <xs:element name="nombre"></xs:element>
              <xs:element name="edad" >
                <xs:simpletype>
                  <xs:restriction base="xs:integer">
                    <xs:mininclusive value="1"/>
                  </xs:restriction>
                </xs:simpletype>
              </xs:element>
              <xs:element name="ref_catastral"></xs:element>
            </xs:sequence>
          </xs:complextype>
        </xs:element>
      </xs:sequence>
    </xs:complextype>
  </xs:element>
</xs:schema>

XML 标签区分大小写。 complexType != complextype。您需要在整个架构中修复该问题 - 它期望找到 <xs:complexType> 但却找到 <xs:complextype>,这是无效的。

看起来您在其他地方也会遇到类似的问题 - 例如,simpleTypemaxLength 是其他标签,其大小写与您在架构中使用的小写名称不同。当您修复每个错误时,您的验证软件应该指示下一个错误。

正如 Dan Field 所指出的,您必须注意 complexType(以及所有 XSD 元素名称)中的大小写。但是,在您的 XSD 中还有更多问题需要解决。这是完整的列表,后面是完全更正的 XSD:

  1. xs:complextype -> xs:complexType
  2. maxoccurs -> maxOccurs
  3. minoccurs -> minOccurs
  4. xs:attribute 不能有 xs:complexType child.
  5. mininclusive -> minInclusive
  6. maxlength -> maxLengthmaxLength 不能作为分面出现 对 xs:integer 的限制;改为 maxInclusive="99".
  7. xs:string 不能与 xs:attribute 一起出现 也通过 xs:simpleType 指定本地类型。
  8. xs:simpleType -> xs:simpleType
  9. xs:attribute必须出现在之后,而不是之前,xs:sequence.

以下是对您的 XSD 应用的上述更正,这样就不会再出现错误:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://wwww.vivienda.io"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.vivienda.io">
  <xs:element name="viviendas">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded">
        <xs:element name="vivienda" minOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="direccion">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="calle"></xs:element>
                    <xs:element name="numero"></xs:element>
                    <xs:element name="localidad"></xs:element>
                    <xs:element name="provincia"></xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="refCatastral"></xs:element>
              <xs:element name="habitaciones">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="habitacion" minOccurs="1">
                      <xs:complexType>
                        <xs:attribute name="area" use="required">
                          <xs:simpleType>
                            <xs:restriction base="xs:integer">
                              <xs:minInclusive value="1"/>
                              <xs:maxInclusive value="99"/>
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:attribute>
                        <xs:attribute name="tipo" use="required" >
                          <xs:simpleType>
                            <xs:restriction base="xs:string">
                              <xs:pattern value="salon|cocina|baño|dormitorio"/>
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:attribute>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="servicios">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="servicio" minOccurs="1"></xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="comprador" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nombre"></xs:element>
              <xs:element name="edad" >
                <xs:simpleType>
                  <xs:restriction base="xs:integer">
                    <xs:minInclusive value="1"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="ref_catastral"></xs:element>
            </xs:sequence>
            <xs:attribute name="dni" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:pattern value="[0-9]{9}[A-Z]{1}"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>