2012-12-21 11 views
11

W tym przykładzie poniżej,XML Schema: wybór i minOccurs

 <xs:complexType> 
     <xs:choice minOccurs="3" maxOccurs="unbounded"> 
      <xs:element ref="Start"/> 
      <xs:element ref="Center"/> 
      <xs:element ref="End"/> 
      <xs:element ref="PI" minOccurs="0"/> 
      <xs:element ref="Feature" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:choice> 
     </xs:complexType> 

Co się dzieje, gdy wybór ma minOccurs> 1? Czy to oznacza, że ​​element "Start" może wystąpić 3 razy?

+0

+1 za wyjątkowe i prawidłowe pytanie! –

Odpowiedz

12

Co stanie się, gdy wybór ma minOccurs> 1? Czy to oznacza, że ​​element "Start" może wystąpić 3 razy?

Tak <Start> może wystąpić 3 lub więcej razy! Posiadanie minOccurs z wyboru jako więcej niż 1 pozwala, aby zestaw elementów pojawiał się więcej niż jeden raz lub inne elementy pojawiają się wiele razy.

Szczegółowe wyjaśnienie: W powyższym przykładzie zostały zastosowane minOccurs jak 3 dla <Choice> i maxOccurs jako nieograniczona! Oznacza to, że elementy potomne wymienione pod numerem <Choice>, którekolwiek z nich lub jakikolwiek tag powtórzony trzy razy, powinny pojawić się pod rodzicem! Próbka XML są wymienione poniżej:

Załóżmy, że to zestaw znaczników pojawiają się w węźle o nazwie <parent> następnie:

<parent> 
    <Start>Start1</Start> 
    <Center>Center1</Center> 
    <End>End1</End> 
    </parent> 

-------- -------- OR

<parent> 
    <Center>Start1</Center> 
    <Center>Center1</Center> 
    <Feature>End1</Feature> 
    </parent> 

-------- LUB --------

<parent> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    </parent> 

wszystkie powyższe kombinacje są ważne!

ALE zostały również określone minOccurs = „0” do „PI” i „Feature” ..

Ten dodatek powoduje Validator przekazać rodzica bez elementów podrzędnych, jak również. tj:

<parent> 
    </parent> 

Jeśli usuniesz minOccurs z tych dwóch elementów, a następnie siły walidacji można zawierać minimum 3 znaczniki, które należy uwzględnić w ramach nadrzędnego.

Również o maxOccurs="unbounded" dla Feature Element jest bezużyteczny! Zachowanie nie ulegnie zmianie, jeśli dodać go lub go zdjąć ..

+0

Co jeśli chcesz pozwolić elementom podrzędnym (jeśli się pojawiają) pojawiać się tylko raz? – peco

+0

@peco, edytuj to w schemacie w pytaniu: ''. 0 lub 1 dziecko może się pojawić –

+0

Ale wtedy może wystąpić tylko jedno dziecko, prawda? Nie '

' i ''. Chcę co najmniej jeden z nich zostać wybrany. – peco

4

W czytelnej składni wyrażeń regularnych, jak zamiast do pełnych mas nawiasach spiczastych, masz

(Start | Centrum | Koniec | PI? | Funkcja *) {3,}

co oznacza cokolwiek w nawiasie 3 lub więcej razy, i nie musi to być za każdym razem ten sam przedmiot. Biorąc pod uwagę, że istnieją alternatywy neutralne - PI? i Cecha * - wśród opcji wyboru całe wyrażenie jest również zerowe, co oznacza, że ​​dowolna liczba wartości zerowych, w tym zero, również spełniałaby ograniczenia.

Aby odpowiedzieć na konkretne pytanie, tak, "Start" może wystąpić trzy (lub więcej razy). Może się zdarzyć dowolną liczbę razy.