2012-12-21 10 views
11

In questo esempio qui di seguito,XML Schema: scelta e 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> 

Cosa succede quando scelta ha minOccurs> 1? Questo elemento "Start" può verificarsi 3 volte?

+0

+1 per domanda unica e valida! –

risposta

12

Cosa succede quando la scelta ha minOccurs> 1? Questo elemento "Start" può verificarsi 3 volte?

<Start> può verificarsi 3 o più volte! Avere minOccurs di scelta come maggiore di 1 consente l'insieme di elementi da visualizzare più volte o diversi elementi appaiono più volte.

spiegazione dettagliata: Nell'esempio di cui sopra è stato applicato minOccurs come 3 per <Choice> e maxOccurs come sconfinata! Ciò significa che gli elementi secondari elencati sotto <Choice>, ognuno di essi o qualsiasi tag ripetuto tre volte dovrebbe apparire sotto il loro genitore! XML di esempio sono elencati di seguito:

Supponiamo che questi set di tag appaiono sotto un nodo denominato <parent> poi:

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

-------- -------- O

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

-------- -------- O

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

tutte le combinazioni di cui sopra sono validi!

MA è stato anche definito minOccurs = "0" per 'PI' e 'feature' ..

Questa aggiunta fa sì Validator di passare genitore senza elementi figlio pure. cioè:

<parent> 
    </parent> 

Se si rimuove minOccurs da questi due elementi allora forze di validazione di includere almeno 3 tag da inserire sotto genitore.

Avere anche maxOccurs="unbounded" per Feature L'elemento è inutile! Il comportamento non cambierà se si aggiunge o toglierla ..

+0

Cosa fare se si desidera consentire agli elementi secondari (se visualizzati) di apparire solo una volta? – peco

+0

@peco, modificare questo nello schema nella domanda: ''. 0 o 1 bambino può apparire –

+0

Ma allora può accadere solo un bambino giusto? Non '

' e ''. Voglio che almeno uno di loro sia scelto. – peco

4

Nella sintassi regexp simile leggibile piuttosto che masse verbose di staffe a punta, si ha

(Start | Centro | End | PI? | Caratteristica *) {3,}

che significa qualsiasi cosa all'interno delle parentesi 3 o più volte e non è necessario che sia lo stesso elemento ogni volta. Dato che ci sono alternative nullable - PI? e Caratteristica * - tra le scelte, anche l'intera espressione è annullabile, il che significa che qualsiasi numero di valori nulli, compreso lo zero, soddisferebbe anche i vincoli.

Per rispondere alla domanda specifica, sì, "Avvio" può avvenire tre (o più volte). Può accadere qualsiasi numero di volte, in realtà.