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>
,这是无效的。
看起来您在其他地方也会遇到类似的问题 - 例如,simpleType
、maxLength
是其他标签,其大小写与您在架构中使用的小写名称不同。当您修复每个错误时,您的验证软件应该指示下一个错误。
正如 Dan Field 所指出的,您必须注意 complexType
(以及所有 XSD 元素名称)中的大小写。但是,在您的 XSD 中还有更多问题需要解决。这是完整的列表,后面是完全更正的 XSD:
xs:complextype
-> xs:complexType
maxoccurs
-> maxOccurs
minoccurs
-> minOccurs
xs:attribute
不能有 xs:complexType
child.
mininclusive
-> minInclusive
maxlength
-> maxLength
但 maxLength
不能作为分面出现
对 xs:integer
的限制;改为 maxInclusive="99"
.
xs:string
不能与 xs:attribute
一起出现
也通过 xs:simpleType
指定本地类型。
xs:simpleType
-> xs:simpleType
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>
错误:
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>
,这是无效的。
看起来您在其他地方也会遇到类似的问题 - 例如,simpleType
、maxLength
是其他标签,其大小写与您在架构中使用的小写名称不同。当您修复每个错误时,您的验证软件应该指示下一个错误。
正如 Dan Field 所指出的,您必须注意 complexType
(以及所有 XSD 元素名称)中的大小写。但是,在您的 XSD 中还有更多问题需要解决。这是完整的列表,后面是完全更正的 XSD:
xs:complextype
->xs:complexType
maxoccurs
->maxOccurs
minoccurs
->minOccurs
xs:attribute
不能有xs:complexType
child.mininclusive
->minInclusive
maxlength
->maxLength
但maxLength
不能作为分面出现 对xs:integer
的限制;改为maxInclusive="99"
.xs:string
不能与xs:attribute
一起出现 也通过xs:simpleType
指定本地类型。xs:simpleType
->xs:simpleType
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>