Mal à définir une liste d'éléments dans un fichier XSD lorsque les éléments répètent
-
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>
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