Problemas para definir una lista de elementos en un archivo XSD cuando se repiten elementos

StackOverflow https://stackoverflow.com/questions/6347365

  •  27-10-2019
  •  | 
  •  

Pregunta

Estoy tratando de escribir un archivo XSD para validar mi XML. Aquí hay una muestra del XML

<Record xmlns="http://example.com/FixedBinaryFile.xsd" Name="Clients">
  <Padding Size="5">
  <RecordEntry Name="Foo1" DataType ="Char"/>
  <RecordEntry Name="Foo2" DataType="AnsiString" MaxSize="8"/>
  <RecordEntry Name="Foo3" DataType="AnsiString" MaxSize="25"/> 
  <Padding Size="2"/> 
  <RecordEntry Name="Foo4" DataType="Byte"/>
  <Padding Size="1"/> 
  <RecordEntry Name="Foo5" DataType="UInt16"/>
  <RecordEntry Name="Foo6" DataType="AnsiString" MaxSize="3"/>
  <RecordEntry Name="Foo7" DataType="AnsiString" MaxSize ="3"/>
  <Padding Size="22"/>
</Record>

Y aquí está el XSD que lo define

  <xs:element name="Record">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="RecordEntry" type="RecordEntry" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element name="Padding" type ="PaddingEntry" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="Name" type="xs:string" use ="required"/>
    </xs:complexType>
  </xs:element>

Mi problema es sequence no me permite poner entradas de relleno donde quiera (en este momento puedo tener tantos RecordEntry entradas como quiera seguidas de tantos Padding entradas como quiera).

Mi pensamiento inital era usar all en lugar de secuencia. Sin embargo, no me dejará usar all con maxOccurs

¿Qué debo hacer para definir mi lista correctamente?

Editar: Freek lo tenía bien, esto es a lo que tuve que cambiarlo para que funcione.

  <xs:element name="Record">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element name="Padding" type ="PaddingEntry" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="RecordEntry" type="RecordEntry" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="Name" type="xs:string" use ="required"/>
    </xs:complexType>
  </xs:element>
¿Fue útil?

Solución

También puede establecer Minoccurs y Maxoccurs en la secuencia XS: estableciéndolo en valores apropiados (probablemente Minoccurs = "0" Maxoccurs = "ilimitado") debería resolver su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top