【问题标题】:xsd:sequence: A problem was found starting at: simpleTypexsd:sequence: 发现问题开始于:simpleType
【发布时间】:2020-09-27 12:08:15
【问题描述】:

所以我在针对 XSD 验证 XML 时遇到了这个错误

Error - Line 38, 44: org.xml.sax.SAXParseException; lineNumber: 38; columnNumber: 44; s4s-elt-must-match.1: The content of 'sequence' must match (annotation?, (element | group | choice | sequence | any)*). A problem was found starting at: simpleType.
Error - Line 43, 41: org.xml.sax.SAXParseException; lineNumber: 43; columnNumber: 41; s4s-elt-must-match.1: The content of 'sequence' must match (annotation?, (element | group | choice | sequence | any)*). A problem was found starting at: simpleType.

总之

S4s-elt-must-match.1: The Content Of 'sequence' Must Match (annotation?, (element | Group | Choice | Sequence | Any)*). A Problem Was Found Starting At: SimpleType.

我附上我的 xml 和 xsd 文件以供参考,

academics.xml

<?xml version="1.0"?>
<academic>
  <idNumber>18sdss146</idNumber>
  <firstName>Piyush</firstName>
  <lastName>Bajaj</lastName>
  <degree>Btech CSE</degree>
  <admissionYear>2019/</admissionYear>
  <cgpa>9.8</cgpa>
  <interests>
    <interest>Competitive Programming</interest>
    <interest>Artificial Intelligence</interest>
    <interest>Web Development</interest>
  </interests>
  <eventsAttended>
    <event>Hello World</event>
    <event>GDG Hackathon</event>
    <event>Riviera Agaaz</event>
  </eventsAttended>
  <address>
    <houseNumber>A743</houseNumber>
    <streetName>Lincoln Street</streetName>
    <pincode>100200</pincode>
    <city>Delhi</city>
    <state>Delhi</state>
  </address>
  <emailAddress>piyush@gmail.com</emailAddress>
  <mobileNum>1234567890</mobileNum>
</academic>

academics.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
  <xs:element name="academic">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="idNumber" type="xs:string"/>
        <xs:element name="firstName" type="xs:string"/>
        <xs:element name="lastName" type="xs:string"/>
        <xs:element name="degree" type="xs:string"/>
        <xs:element name="admissionYear" type="xs:integer"/>
        <xs:element name="cgpa" type="xs:decimal"/>
        <xs:element name="interests">
          <xs:complexType>
            <xs:sequence minOccurs="3" maxOccurs="5">
              <xs:element name="interest" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="eventsAttended">
          <xs:complexType>
            <xs:sequence minOccurs="3" maxOccurs="5">
              <xs:element name="event" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="address">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="houseNumber" type="xs:string"/>
              <xs:element name="streetName" type="xs:string"/>
              <xs:element name="pincode" type="xs:integer"/>
              <xs:element name="city" type="xs:string"/>
              <xs:element name="state" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:simpleType name="emailAddress">
          <xs:restriction base="xsd:string">
            <xs:pattern value="[^@]+@[^\.]+\..+"/>
          </xs:restriction>
        </xs:simpleType>
        <xs:simpleType name="mobileNum">
          <xs:restriction base="xs:string">
            <xs:pattern value="([0-9]{3}) [0-9]{3}-[0-9]{4}"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我在网上看到很多帖子都出现了类似的错误错误。我检查了我的代码,我找不到问题。我想可能是因为 xs 而不是 xsd,但我不认为这是错误。我想我把 simpleType 和 complexType 放在了正确的位置。请告诉我。

【问题讨论】:

    标签: xml xsd xsd-validation xml-validation


    【解决方案1】:

    我修复了 XSD。您只是错过了声明这两个元素:emailAddressmobileNum

    虽然现在无法根据实际值验证输入 XML。

    XSD

    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
               elementFormDefault="unqualified">
        <xs:element name="academic">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="idNumber" type="xs:string"/>
                    <xs:element name="firstName" type="xs:string"/>
                    <xs:element name="lastName" type="xs:string"/>
                    <xs:element name="degree" type="xs:string"/>
                    <xs:element name="admissionYear" type="xs:integer"/>
                    <xs:element name="cgpa" type="xs:decimal"/>
                    <xs:element name="interests">
                        <xs:complexType>
                            <xs:sequence minOccurs="3" maxOccurs="5">
                                <xs:element name="interest" type="xs:string"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="eventsAttended">
                        <xs:complexType>
                            <xs:sequence minOccurs="3" maxOccurs="5">
                                <xs:element name="event" type="xs:string"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="address">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="houseNumber" type="xs:string"/>
                                <xs:element name="streetName" type="xs:string"/>
                                <xs:element name="pincode" type="xs:integer"/>
                                <xs:element name="city" type="xs:string"/>
                                <xs:element name="state" type="xs:string"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="emailAddress" type="emailAddressType"/>
                    <xs:element name="mobileNum" type="mobileNumType"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:simpleType name="emailAddressType">
            <xs:restriction base="xs:string">
                <xs:pattern value="[^@]+@[^\.]+\..+"/>
            </xs:restriction>
        </xs:simpleType>
        <xs:simpleType name="mobileNumType">
            <xs:restriction base="xs:string">
                <xs:pattern value="([0-9]{3}) [0-9]{3}-[0-9]{4}"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:schema>
    

    XSD 验证错误

    Error The 'admissionYear' element is invalid - The value '2019/' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:integer' - The string '2019/' is not a valid Integer value.
    Error The 'mobileNum' element is invalid - The value '1234567890' is invalid according to its datatype 'mobileNumType' - The Pattern constraint failed.
    

    【讨论】:

    • Yitzhak 的解决方案为xs:simpleType 元素展示了一个同样有效的替代位置。 +1
    【解决方案2】:

    错误是指emailAddressmobileNumxs:simpleType 声明实际上应该是元素声明。 (xs:simpleType 不能作为 xs:sequence 的子元素出现,但 xs:element 可以。)您可以在命名元素声明下方匿名保留 xs:simpleType,就像 XSD 的其余部分已经在该点上方使用 xs:complexType .

    在对 XSD 进行了这些修复之后,您还会发现您的 XML 在两个方面未能遵守 XSD:admissionYear 有一个杂散的/ 字符,而mobileNum 遵循错误的格式。请注意,如果您希望 (123) 456-7890 成为有效的 mobileNum,则还必须更新 XSD 以在 xs:pattern 正则表达式中转义 ()

    以上所有修复均已应用于以下 XML 和 XSD,现在已成功验证:

    XML

    <?xml version="1.0"?>
    <academic xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="try.xsd">
      <idNumber>18sdss146</idNumber>
      <firstName>Piyush</firstName>
      <lastName>Bajaj</lastName>
      <degree>Btech CSE</degree>
      <admissionYear>2019</admissionYear>
      <cgpa>9.8</cgpa>
      <interests>
        <interest>Competitive Programming</interest>
        <interest>Artificial Intelligence</interest>
        <interest>Web Development</interest>
      </interests>
      <eventsAttended>
        <event>Hello World</event>
        <event>GDG Hackathon</event>
        <event>Riviera Agaaz</event>
      </eventsAttended>
      <address>
        <houseNumber>A743</houseNumber>
        <streetName>Lincoln Street</streetName>
        <pincode>100200</pincode>
        <city>Delhi</city>
        <state>Delhi</state>
      </address>
      <emailAddress>piyush@gmail.com</emailAddress>
      <mobileNum>(123) 456-7890</mobileNum>
    </academic>
    

    XSD

    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
      <xs:element name="academic">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="idNumber" type="xs:string"/>
            <xs:element name="firstName" type="xs:string"/>
            <xs:element name="lastName" type="xs:string"/>
            <xs:element name="degree" type="xs:string"/>
            <xs:element name="admissionYear" type="xs:integer"/>
            <xs:element name="cgpa" type="xs:decimal"/>
            <xs:element name="interests">
              <xs:complexType>
                <xs:sequence minOccurs="3" maxOccurs="5">
                  <xs:element name="interest" type="xs:string"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="eventsAttended">
              <xs:complexType>
                <xs:sequence minOccurs="3" maxOccurs="5">
                  <xs:element name="event" type="xs:string"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="address">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="houseNumber" type="xs:string"/>
                  <xs:element name="streetName" type="xs:string"/>
                  <xs:element name="pincode" type="xs:integer"/>
                  <xs:element name="city" type="xs:string"/>
                  <xs:element name="state" type="xs:string"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="emailAddress">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:pattern value="[^@]+@[^\.]+\..+"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="mobileNum">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:pattern value="\([0-9]{3}\) [0-9]{3}-[0-9]{4}"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多