【问题标题】:validating repeating element groups with schema使用模式验证重复元素组
【发布时间】:2012-04-01 04:01:33
【问题描述】:

我在尝试让我的 xml 验证我的架构时遇到了很大的困难。 出现以下错误:

   Element 'date': This element is not expected. Expected is ( race ).
Element 'date': This element is not expected. Expected is ( race ).
Element 'date': This element is not expected. Expected is ( race ).
Element 'date': This element is not expected. Expected is ( race ). 

以下是我的架构

<!-- Structure definition -->
    <xs:element name="history">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="period" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="period">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="date" minOccurs="1" maxOccurs="unbounded"/>
                <xs:element ref="track" minOccurs="1" maxOccurs="unbounded"/>
                <xs:element ref="race" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="year" type="Tyear"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="date">
        <xs:simpleType>
            <xs:restriction base="xs:string"/>
        </xs:simpleType>
    </xs:element>
    <xs:element name="track">
        <xs:simpleType>
            <xs:restriction base="xs:string"/>
        </xs:simpleType>
    </xs:element>
    <xs:element name="race">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="rider" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="nr" type="Tracenr"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="rider">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="place" maxOccurs="1"/>
                <xs:element ref="first_name" maxOccurs="1"/>
                <xs:element ref="last_name" maxOccurs="1"/>
                <xs:element ref="manufacturer" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="place">
        <xs:simpleType>
            <xs:restriction base="xs:string"/>
        </xs:simpleType>
    </xs:element>
    <xs:element name="first_name">
        <xs:simpleType>
            <xs:restriction base="xs:string"/>
        </xs:simpleType>
    </xs:element>
    <xs:element name="last_name">
        <xs:simpleType>
            <xs:restriction base="xs:string"/>
        </xs:simpleType>
    </xs:element>
    <xs:element name="manufacturer">
        <xs:simpleType>
            <xs:restriction base="xs:string"/>
        </xs:simpleType>
    </xs:element>

</xs:schema>

这是我的 xml 的一个小快照

<history>
  <period year="2011">
    <date>10/16/2011</date>
    <track>Portimao</track>
    <race nr="1">
      <rider>
        <place>1</place>
        <first_name>Marco</first_name>
        <last_name>Melandri</last_name>
        <manufacturer>Yamaha</manufacturer>
      </rider>
      <rider>
        <place>2</place>
        <first_name>Eugene</first_name>
        <last_name>Laverty</last_name>
        <manufacturer>Yamaha</manufacturer>
      </rider>
      [...]
      <rider>
        <place>DNF</place>
        <first_name>Tom</first_name>
        <last_name>Sykes</last_name>
        <manufacturer>Kawasaki</manufacturer>
      </rider>
    </race>
    <date>10/16/2011</date>
    <track>Portimao</track>
    <race nr="2">
      <rider>
        <place>1</place>
        <first_name>Carlos</first_name>
        <last_name>Checa</last_name>
        <manufacturer>Ducati</manufacturer>
      </rider>
      <rider>
        <place>2</place>
        <first_name>Sylvain</first_name>
        <last_name>Guintoli</last_name>
        <manufacturer>Ducati</manufacturer>
      </rider>
      [...]
      <rider>
        <place>15</place>
        <first_name>Noriyuki</first_name>
        <last_name>Haga</last_name>
        <manufacturer>Aprilia</manufacturer>
      </rider>
    </race>
    <date>10/02/2011</date>
    <track>Magny-Cours</track>
    <race nr="1">
      <rider>
        <place>1</place>
        <first_name>Carlos</first_name>
        <last_name>Checa</last_name>
        <manufacturer>Ducati</manufacturer>
      </rider>
      [...]

“期间”在前几年又重复了 3 次。 谢谢你

【问题讨论】:

    标签: xml validation codeigniter xsd schema


    【解决方案1】:

    由于顺序(日期、赛道、比赛)重复,您需要指定:

        <xs:sequence maxOccurs="unbounded">
            <xs:element ref="date" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element ref="track" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element ref="race" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    

    【讨论】:

    • 谢谢,但现在我收到以下错误:元素“种族”:缺少子元素。预期是(骑手)。
    • 但我有一个元素 name="race" 指定它确实有一个 Rider 元素
    • 我按要求解决了这个问题。请接受答案,如果您还有其他不相关的问题,请提出新问题。
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2018-02-09
    • 2012-11-12
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多