Probleme beim Definieren einer Liste von Elementen in einer XSD -Datei, wenn Elemente wiederholt werden
-
27-10-2019 - |
Frage
Ich versuche eine XSD -Datei zu schreiben, um meine XML zu validieren. Hier ist eine Probe des 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>
Und hier ist die XSD, die es definiert
<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>
Mein Problem ist sequence
erlaubt mir nicht, Polstereinträge zu setzen, wo immer ich will (im Moment kann ich so viele haben RecordEntry
Einträge, wie ich es will, gefolgt von so vielen Padding
Einträge, wie ich will).
Mein Initalgedenken war zu verwenden all
anstelle von Sequenz. Ich werde mich jedoch nicht benutzen lassen all
mit maxOccurs
Was muss ich tun, um meine Liste richtig zu definieren?
EDIT: Freek hatte es richtig, hier ist, was ich es ändern musste, um es zum Laufen zu bringen.
<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>
Lösung
Sie können auch Minoccurs und Maxoccurs auf der XS: Sequenz einstellen und festlegen, dass angemessene Werte (wahrscheinlich minoccurs = "0" maxoccurs = "unbegrenzt") Ihr Problem lösen sollten.