2009-05-31 6 views
5

Was ich tun möchte, ist ein Sequenzelement in einem XML-Schema zu erstellen, so dass die Inhalte in Ordnung sein müssen, aber möglicherweise nicht alle vorhanden sind. Zum Beispiel würde das Schema so etwas wie dieses:Wie können Sie eine Sequenz von optionalen Elementen erstellen, die in einem XML-Schema in Ordnung sein müssen?

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

Das folgende Beispiel zeigt:

<rods> 
<green>142</green> 
<white>34</white> 
<gray>65</gray> 
</rods> 

MSDN diese dazu zu sagen hat ein Element (zooAnimals), das im Sequenzelement null oder mehr der folgenden Elemente, Elefant, Bär, Giraffe, enthalten 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. Sowohl Visual Studio als auch ein Online-Validierungsdienst mögen jedoch nicht, was vorgeschlagen wird. Hier

ist das, was ich im Moment haben:

<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 sie will alle Kinder

Danke,

Eric

+0

Ihre Schemadefinition sieht gut aus. Möchten Sie die Ergebnisse/Rückmeldungen der Visual Studio- und Online-Validatoren teilen? –

+0

Ich habe die Ergebnisse zum Beitrag hinzugefügt – Eric

Antwort

10
<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> 
+0

Danke, das macht den Job. Es gibt keine Möglichkeit zu vermeiden, viel minOccurs = "0" einzugeben, oder? Ich frage mich, warum W3Schools und MSDN sagen, dass der andere Code funktioniert, wenn nicht? – Eric

+1

@Eric Sie sind beide Sequenzen, unterscheiden sich aber in den wichtigen Details, die Sie wollen. Sie bedeuten null oder viele Wiederholungen der Gruppe, aber Sie wollten, dass jede Person null oder eins ist. Kennen Sie Regex? XML-Schema ist sehr ähnlich. Ihre Methode ist wie (e g b) *, aber was Sie wollen, ist wie e? G? b? – 13ren

+0

Ah ... Muss haben falsch interpretiert was MSDN gesagt hat – Eric