Wie kann man eine Folge von optionalen Elementen machen, die um in einem XML-Schema sein muss?
Frage
Was ich tun möchte, ist eine Sequenz Element in einem XML-Schema erstellen, so dass der Inhalt in Ordnung sein muß, aber möglicherweise nicht alle vorhanden sein. Zum Beispiel würde das Schema so etwas wie diese:
<xs:element name="rods" maxOccurs="1" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="green" type="xs:positiveInteger" />
<xs:element name="white" type="xs:positiveInteger" />
<xs:element name="blue" type="xs:positiveInteger" />
<xs:element name="yellow" type="xs:positiveInteger" />
<xs:element name="red" type="xs:positiveInteger" />
<xs:element name="tan" type="xs:positiveInteger" />
<xs:element name="gray" type="xs:positiveInteger" />
<xs:element name="black" type="xs:positiveInteger" />
</xs:sequence>
</xs:complexType>
</xs:element>
und erlauben würde, XML wie folgt aus:
<rods>
<green>142</green>
<white>34</white>
<gray>65</gray>
</rods>
MSDN hat dies zu sagen:
Das folgende Beispiel zeigt ein Element (zooanimals), die Null oder mehrere der folgenden Elemente, Elefant, Bär, giraffe, in dem Sequenzelement haben kann.
<xs:element name="zooAnimals"> <xs:complexType> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:element name="elephant"/> <xs:element name="bear"/> <xs:element name="giraffe"/> </xs:sequence> </xs:complexType> </xs:element>
W3Schools schlägt das gleiche. Doch sowohl Visual Studio und ein Online-Validierungsdienst nicht gefällt, was vorgeschlagen wird.
Hier ist, was ich im Moment habe:
<xs:element name="rods" maxOccurs="1" minOccurs="1">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element name="green" type="xs:positiveInteger" />
<xs:element name="white" type="xs:positiveInteger" />
<xs:element name="blue" type="xs:positiveInteger" />
<xs:element name="yellow" type="xs:positiveInteger" />
<xs:element name="red" type="xs:positiveInteger" />
<xs:element name="tan" type="xs:positiveInteger" />
<xs:element name="gray" type="xs:positiveInteger" />
<xs:element name="black" type="xs:positiveInteger" />
</xs:sequence>
</xs:complexType>
</xs:element>
Und hier ist der XML:
<rods>
<green>142</green>
<white>34</white>
<gray>65</gray>
</rods>
Visual Studio 2005 behauptet, dass „grau“ ist ungültig, „blau“ zu erwarten, so klar es will alle Kinder
Danke,
Eric
Lösung
<xs:element name="rods">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="green" type="xs:positiveInteger" />
<xs:element minOccurs="0" name="white" type="xs:positiveInteger" />
<xs:element minOccurs="0" name="blue" type="xs:positiveInteger" />
<xs:element minOccurs="0" name="yellow" type="xs:positiveInteger" />
<xs:element minOccurs="0" name="red" type="xs:positiveInteger" />
<xs:element minOccurs="0" name="tan" type="xs:positiveInteger" />
<xs:element minOccurs="0" name="gray" type="xs:positiveInteger" />
<xs:element minOccurs="0" name="black" type="xs:positiveInteger" />
</xs:sequence>
</xs:complexType>
</xs:element>