2009-05-31 11 views
5

Co chcę zrobić, to utworzyć element sekwencji w schemacie XML, tak że zawartość musi być w porządku, ale nie wszystkie mogą być obecne. Na przykład, schemat byłoby coś takiego:Jak utworzyć sekwencję elementów opcjonalnych, które muszą być w porządku w schemacie XML?

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

i pozwoli XML tak:

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

MSDN ma do powiedzenia na ten temat:

Poniższy przykład ilustruje element (zooAnimals), który może mieć zero lub więcej z następujących elementów, słoń, niedźwiedź, żyrafa, w elemencie sekwencji.

<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 sugeruje samo. Jednak zarówno studio graficzne, jak i usługa weryfikacji online nie podoba się sugestie.

Oto co mam w tej chwili:

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

A oto XML:

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

Visual Studio 2005 twierdzi, że "szary" jest nieważny, "niebieski" oczekiwano, tak wyraźnie chce wszystkie dzieci

Dzięki

Eric

+0

Twoja definicja schematu wygląda dobrze dla mnie. Chcesz podzielić się wynikami/opiniami Visual Studio i weryfikatorów internetowych? –

+0

Dodałem wyniki do posta – Eric

Odpowiedz

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

Dzięki, że wykonuje to zadanie. Nie ma sposobu uniknięcia wpisywania wielu minOccurs = "0", czy jest? Zastanawiam się, dlaczego W3Schools i MSDN mówią, że drugi kod działa, a kiedy nie działa? – Eric

+1

@Eric Obie są sekwencjami, ale różnią się ważnymi szczegółami, które chcesz. Chodzi o zero lub wiele powtórzeń grupy, ale chciałeś, aby każda osoba miała zero lub jeden. Czy znasz już wyrażenie regularne? Schemat XML jest bardzo podobny. Ich metoda jest podobna (e g b) *, ale to, czego chcesz, jest jak e? sol? b? – 13ren

+0

Ah ... Muszę źle zinterpretować, co powiedział MSDN – Eric

Powiązane problemy