2013-04-19 23 views
47

Sto usando xsd:all in un tipo complesso. Quando mi manca qualsiasi elemento obbligatorio durante la convalida mostrerà tutti gli elementi. Non mostrerà l'esatto elemento mancante.Differenza tra <xsd:all> e <xsd: sequenza> nella definizione dello schema?

Ma se sto usando xsd:sequence posso ottenere l'esatto elemento mancante.

C'è qualche differenza tra questi due?

xsd:sequence: l'elemento XML deve essere nello stesso ordine.

Ma xsd:all: l'elemento XML può essere qualsiasi ordine.

+0

Fondamentalmente, la differenza tra questi due è ciò che hai già indicato nella tua domanda. Tuttavia, i vincoli associati all'uso di questi due compositori e le implicazioni di quelli nella creazione di XSD dipendono dalle specifiche a cui ti riferisci: XSD 1.0 o XSD 1.1? –

+1

Sembra che la tua domanda riguardi il motivo per cui la sequenza e tutti gli errori di scrittura in modo diverso quando trova l'elemento mancante. Penso che si tratti di logica parser – Nasir

+0

Esiste già una risposta a questa domanda? Vorrei anche sapere se devo sempre usare per ottenere l'oggetto esatto mancante. – GertV

risposta

86

< xsd:all> specifica che gli elementi figli possono apparire in qualsiasi ordine.

< xsd:sequence> specifica che gli elementi figlio possono apparire solo nell'ordine indicato.

Esempio per Sequenza:

<xs:element name="compElement"> 
<xs:complexType> 
<xs:sequence> 
    <xs:element name="ele1" type="xs:string"/> 
    <xs:element name="ele2" type="xs:string"/> 
    <xs:element name="ele3" type="xs:string"/> 
    <xs:element name="ele4" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 

Se si crea un XML da questo XSD allora, sarà qualcosa di simile:

<compElement> 
    <ele1>First</ele1> 
    <ele2>Second</ele2> 
    <ele3>Third</ele3> 
    <ele4>Fourth</ele4> 
</compElement> 

esempio per tutti:

<xs:element name="compElement"> 
<xs:complexType> 
<xs:all> 
    <xs:element name="ele1" type="xs:string"/> 
    <xs:element name="ele2" type="xs:string"/> 
    <xs:element name="ele3" type="xs:string"/> 
    <xs:element name="ele4" type="xs:string"/> 
</xs:all> 
</xs:complexType> 
</xs:element> 

Se si crea un file XML da questo xsd quindi sarà qualcosa del genere:

<compElement>  
    <ele2>Second</ele2> 
    <ele1>First</ele1> 
    <ele4>Fourth</ele4> 
    <ele3>Third</ele3> 
</compElement> 

More info il xsd: tutto More Info il xsd: sequence

Spero risposto alla tua quetion.

+0

Ciao Joshi ... grazie per i vostri commenti. Ma la mia domanda è quando convalido l'xml contro xsd mentre uso xsd: tutto non mostrerà l'elemento mancante esatto.Per esempio, l'elemento1 è previsto .. Invece, mostrerà tutti gli elementi element1, element2 , element3, EXPECTED ma ho dato minOccurs = 0 per element2 e element3 – user1679378

+1

Puoi specificare l'attributo "minOccurs" dell'elemento "all" come zero. Per maggiori dettagli, consultare http://www.w3schools.com/schema/el_all.asp – Joshi

16

Differenza

  • xsd: tutto - "elementi secondari possono apparire in qualsiasi ordine e ciascun elemento secondario possono verificarsi zero o una volta" (cioè, maxOccurs può essere 0 o 1)
  • xsd: sequence - "elementi figlio deve apparire in una sequenza Ciascun elemento figlio può verificarsi da 0 a qualsiasi numero di volte." (cioè, maxOccurs possono essere 0 o qualsiasi numero o 'illimitato')

da le esercitazioni W3Schools here e here.

+3

Dovresti qualificare i vincoli sulla cardinalità della particella come specifici per XSD 1.0, altrimenti questo non è corretto per XSD 1.1. –

+6

w3schools non è affiliato con W3C, quindi le loro pagine Web non sono documenti W3C. –

+0

@kamituel Puoi citare dove '' limita il numero di volte in cui un elemento figlio può verificarsi? Non riesco a trovare prove di questo nelle specifiche del W3C. –

2

Tutti Indicatore

L'indicatore <all> specifica che gli elementi figli possono apparire in qualsiasi ordine, e che ogni elemento figlio deve avvenire solo una volta:

Indicatore sequenza

<sequence> indic ator specifica che gli elementi figlio devono apparire in un ordine specifico:

reference link

+2

Dovresti qualificare i vincoli sulla cardinalità della particella come specifici per XSD 1.0, altrimenti questo non è corretto per XSD 1.1. –

0

quando si utilizza sotto il tag, indica tutti gli elementi dichiarati in quel complessoTipo DEVE apparire nello stesso ordine nel documento XML. altrimenti, si otterrà un errore. perché non è necessario specificare gli elementi nell'ordine corretto.

0

Lo schema definisce semplicemente ciò che costituisce un documento conforme.

La mancata conformità è riportata interamente al validatore. Non c'è nulla che impedisca a un validatore di segnalare esattamente quali campi mancano, ma apparentemente quello che si usa non è in questo caso.

Se si tratta di un bug o di un progetto, è necessario discutere con il fornitore del validatore.