complexType的XML Schema中的验证错误

时间:2015-06-16 18:41:46

标签: xml xsd xml-validation

错误:

  

s4s-elt-must-match.1:'viviendas'的内容必须匹配(注释?,(simpleType | complexType)?,(unique | key | keyref)*))。从以下问题开始发现问题: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>

2 个答案:

答案 0 :(得分:3)

XML标签是CaSe SenSitIve。 complexType!= complextype。您需要在整个架构中修复它 - 它希望找到<xs:complexType>,而是找到<xs:complextype>,这是无效的。

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

答案 1 :(得分:2)

正如Dan Field所说,你必须在complexType(以及所有XSD元素名称)中处理案例。但是,您的XSD还有许多问题需要解决。这是完整的列表,然后是完全更正的XSD:

  1. xs:complextype - &gt; xs:complexType
  2. maxoccurs - &gt; maxOccurs
  3. minoccurs - &gt; minOccurs
  4. xs:attribute不能拥有xs:complexType孩子。
  5. mininclusive - &gt; minInclusive
  6. maxlength - &gt; maxLengthmaxLength不能作为方面出现 对xs:integer的限制;已更改为maxInclusive="99"
  7. xs:string无法与xs:attribute一起显示 也可以通过xs:simpleType指定本地类型。
  8. xs:simpleType - &gt; xs:simpleType
  9. xs:attribute必须在后出现,而不是xs:sequence之前。
  10. 以上是适用于您的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>