简体   繁体   English

具有重复元素的XML模式

[英]XML Schema with repeating elements

I am trying to deserialise the following XML: 我正在尝试反序列化以下XML:

<queries>
    <query name='abc'>
        <statement>SELECT * FROM table1</statement>
        <label row='1' name='id'/>
        <label row='2' name='name'/>
    </query>
    <query name='another'>
        <statement>SELECT * FROM table2</statement>
        <label row='1' name='myTabID'/>
        <label row='2' name='myTabName'/>
    </query>
</queries>

To validate the schema I am using: 要验证我使用的架构:

<xs:complexType name="Queries">
  <xs:sequence>
    <xs:element name="query" type="Query"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="Query">
  <xs:sequence>
    <xs:element name="statement" minOccurs="1" maxOccurs="1"/>
    <xs:element name="label">
      <xs:complexType>
        <xs:attribute name="row" type="xs:int" use="required"/>
        <xs:attribute name="name" type="xs:string" use="required"/>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
  <xs:attribute name="name" type="xs:string"/>
</xs:complexType>

Validation is failing with the message: 验证失败,并显示以下消息:

Not valid. 无效。 Error - Line 7, 48: org.xml.sax.SAXParseException; 错误-第7行,第48行:org.xml.sax.SAXParseException; lineNumber: 7; lineNumber:7; columnNumber: 48; columnNumber:48; cvc-complex-type.2.4.d: Invalid content was found starting with element 'label'. cvc-complex-type.2.4.d:发现无效的内容,以元素“ label”开头。 No child element is expected at this point. 此时,预计没有子元素。 Error - Line 9, 31: org.xml.sax.SAXParseException; 错误-第9行,第31行:org.xml.sax.SAXParseException; lineNumber: 9; lineNumber:9; columnNumber: 31; columnNumber:31; cvc-complex-type.2.4.d: Invalid content was found starting with element 'query'. cvc-complex-type.2.4.d:发现无效内容(从元素“ query”开始)。 No child element is expected at this point. 此时,预计没有子元素。

What am I missing please? 我想念什么? Do I need to specify a different tag than sequence? 我需要指定一个不同于序列的标签吗? I want to enforce at least one query existing. 我想强制执行至少一个现有查询。

Thank you in advanced :) 谢谢你高级:)

The error message complains about the definition 错误消息抱怨定义

<xs:element name="label">

and the use 和使用

<label row='1' name='id'/>
<label row='2' name='name'/>

The default values (W3) for minOccurs and maxOccurs is 1, so you can only use one label there. minOccursmaxOccurs默认值(W3)为1,因此您只能在其中使用一个标签。 You need to change it if you like to use more labels. 如果您想使用更多标签,则需要更改它。 Use unbounded for arbitrary amount. unbounded使用unbounded量。

Also note that similar maxOccurs adjustment ( unbounded or greater than 1 ) is needed for query (as commented by @kjhughes ) 还要注意, query需要类似的maxOccurs调整( unbounded或大于1 )(如@kjhughes所评论)

try this : 尝试这个 :

  <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:element name="queries">
<xs:complexType>
  <xs:sequence>
    <xs:element name="query" maxOccurs="unbounded" minOccurs="0">
      <xs:complexType>
        <xs:sequence>
          <xs:element type="xs:string" name="statement"/>
          <xs:element name="label" maxOccurs="unbounded" minOccurs="0">
            <xs:complexType>
              <xs:simpleContent>
                <xs:extension base="xs:string">
                  <xs:attribute type="xs:int" name="row" use="optional"/>
                  <xs:attribute type="xs:string" name="name"    use="optional"/>
                </xs:extension>
              </xs:simpleContent>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        <xs:attribute type="xs:string" name="name" use="optional"/>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
      </xs:complexType>
        </xs:element>
  </xs:schema>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM