Difficoltà a definire un elenco di elementi in un file XSD quando gli elementi si ripetono

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

  •  27-10-2019
  •  | 
  •  

Domanda

Sto cercando di scrivere un file XSD per convalidare il mio XML. Ecco un campione di 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>

Ed ecco l'XSD che lo definisce

  <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>

Il mio problema è sequence non mi permette di mettere le voci di imbottitura dove mai voglio (in questo momento posso averne altrettanti RecordEntry voci che voglio seguite da altrettanti Padding voci come voglio).

Il mio pensiero inital era di usare all invece della sequenza. Tuttavia non mi permetterà di usare all insieme a maxOccurs

Cosa devo fare per definire correttamente la mia lista?

EDIT: Freek ha avuto bene, ecco cosa ho dovuto cambiarlo per farlo funzionare.

  <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>
È stato utile?

Soluzione

È inoltre possibile impostare Minoccurs e MaxOccurs su XS: Sequence, impostandolo su valori appropriati (probabilmente MinocCurs = "0" maxocCurs = "illimitato") dovrebbe risolvere il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top