Mal à définir une liste d'éléments dans un fichier XSD lorsque les éléments répètent

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

  •  27-10-2019
  •  | 
  •  

Question

Je suis en train d'écrire un fichier XSD pour valider mon xml. Voici un échantillon du 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>

et voici le xsd qui le définit

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

Mon problème est sequence ne me permet pas de mettre les entrées de remplissage où que je veux (je peux dès maintenant avoir autant d'entrées de RecordEntry que je veux suivi par autant d'entrées de Padding que je veux).

Ma pensée inital était d'utiliser all au lieu de la séquence. Cependant, il ne me laisse pas utiliser all avec maxOccurs

Que dois-je faire pour définir ma liste correctement?

EDIT: Freek avait raison, voici ce que je devais changer pour lui faire le travail.

  <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>
Était-ce utile?

La solution

Vous pouvez également définir minOccurs et maxOccurs sur les xs:. Séquence, mise que les valeurs appropriées (probablement minOccurs = "0" maxOccurs = "unbounded") devrait résoudre votre problème

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top