“XSD 无效”但如何?

问题描述

我已经通过一些在线 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 的格式就会正确。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...