问题描述
我已经通过一些在线 XSD 验证器运行了以下 XSD,但没有一个告诉我 我的 XSD 有什么问题。它只是说“XSD 无效”。任何帮助确定问题或 将我指向一个可以帮助我确定问题的网站。这只是 我的第二个 XSD 所以我对它在某些方面不正确并不感到惊讶。
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<xsd:element name='DemandData'>
<xsd:complexType>
<xsd:sequence>
<xsd:element name='Rateinformation' minOccurs='1' maxOccurs='5000'>
<xsd:complexType>
<xsd:all>
<xsd:element name='RateID' minOccurs='1' nillable='false' maxOccurs='1'>
<xsd:simpleType>
<xsd:restriction base='xsd:string'>
<xsd:minLength value='19'/>
<xsd:maxLength value='19'/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name='RateName' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='RatePlan_Url' minOccurs='0' nillable='true' maxOccurs='1' />
<xsd:element name='RateType' minOccurs='1' nillable='true' maxOccurs='1'>
<xsd:simpleType>
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='R-D' />
<xsd:enumeration value='C-D' />
<xsd:enumeration value='V-D' />
<xsd:enumeration value='CPP' />
<xsd:enumeration value='VPP' />
<xsd:enumeration value='RTP' />
<xsd:enumeration value='DSR' />
<xsd:enumeration value='TOU' />
<xsd:enumeration value='T-D' />
<xsd:enumeration value='GHG' />
</xsd:restriction>
</xsd:simpleType>
</xsd:element><xsd:element name='Sector' minOccurs='0' nillable='true' maxOccurs='1'>
<xsd:simpleType>
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='CEV' />
<xsd:enumeration value='Ind' />
<xsd:enumeration value='Res' />
<xsd:enumeration value='Agr' />
<xsd:enumeration value='All' />
<xsd:enumeration value='REV' />
<xsd:enumeration value='Com' />
<xsd:enumeration value='CIA' />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name='API_Url' minOccurs='0' nillable='true' maxOccurs='1' />
<xsd:element name='EndUse' minOccurs='0' nillable='true' maxOccurs='1' />
<xsd:simpleType>
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='All' />
<xsd:enumeration value='EV' />
<xsd:enumeration value='Other' />
<xsd:enumeration value='Solar' />
<xsd:enumeration value='Battery' />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name='Priceinformation'>
<xsd:complexType>
<xsd:sequence>
<xsd:element name='PriceData'>
<xsd:complexType>
<xsd:all>
<xsd:element name='DateStart' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='DateEnd' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='DayStart' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='DayEnd' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='Price' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='PriceName' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='TimeStart' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='TimeEnd' minOccurs='1' nillable='false' maxOccurs='1' />
<xsd:element name='Unit' minOccurs='1' nillable='false' maxOccurs='1' />
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
这是我收到 XSD 语法错误的验证器之一的链接: https://extendsclass.com/xml-schema-validator.html
解决方法
大多数 XSD 处理器至少会检测到 xsd:element
之前的关闭 PriceInformation
标签,
<xsd:element name='EndUse' minOccurs='0' nillable='true' maxOccurs='1' />
<xsd:simpleType>
<xsd:restriction base='xsd:string'>
<xsd:enumeration value='All' />
<xsd:enumeration value='EV' />
<xsd:enumeration value='Other' />
<xsd:enumeration value='Solar' />
<xsd:enumeration value='Battery' />
</xsd:restriction>
</xsd:simpleType>
</xsd:element> <!-- Parsing realizes something is wrong here -->
<xsd:element name='PriceInformation'>
缺少匹配的开始标记——这只是 XML 级别的基本格式良好检查。
问题在于,原本打算与该 xsd:element
结束标记匹配的开始标记被错误地自行关闭:
<xsd:element name='EndUse' minOccurs='0' nillable='true' maxOccurs='1' />
^
删除那个 /
字符,然后 XSD 的格式就会正确。