Via di mezzo tra XSD all e sequenza XSD

Sto definendo un elemento utente con XSD. Per questo esempio, un utente ha un nome, una e-mail e una o più nazionalità. Ho provato:

     

Tuttavia, questo è illegale. Apparentemente gli elementi all’interno di un “Tutto” possono verificarsi solo una volta (o non del tutto). Potrei risolvere il problema cambiando il tutto in una sequenza, ma poi le persone dovrebbero inserire le proprietà nell’ordine esatto, che in realtà non mi interessa.

C’è una combinazione di questi due disponibili? Non secondo http://www.w3schools.com/Schema/schema_complex_indicators.asp , ma forse è nascosto (o i miei occhi inesperti non lo vedono).

Per intuizione, ho anche provato:

        

Ma sfortunatamente è invalido.


Ecco l’attuale, vero, pezzo di XSD:

                 

Il tuo codice dovrebbe essere valido in XSD 1.1. Per XSD 1.0 devi trovare una soluzione alternativa.

Potresti semplicemente trasformare il tuo thingie “nazionalità” nel proprio complexType e poi usare quel nuovo tipo complesso dentro il tuo xs: tutti?

           

Non ho nulla a portata di mano per testare questo, quindi questo è davvero fuori di testa ….. provalo!

EDIT: testato ora – funziona, l’unico piccolo prezzo da pagare è che il tuo XML dovrà assomigliare a qualcosa del genere:

 <....> ......  ABC CDE  .....  

Quindi ottieni un nodo in più che conterrà la lunga lista arbitraria di elementi di .

Marc

Basta imbattersi in un problema simile (volevo avere un numero qualsiasi di ciascun elemento in qualsiasi ordine) e risolto con una sequenza di scelte. Utilizzando l’esempio sopra:

               

Questo ti permette di avere qualsiasi numero di nome, email e nazionalità in qualsiasi ordine.

Penso che ciò che stai cercando vada contro l’intento di XML. Sembrerebbe strano avere un frammento XML valido come questo:

        

Sembra che tu stia chiedendo qualcosa di simile a ciò che Marc_s ha proposto:

        

che deve essere spinto in:

          

Per XSD 1.0 il suggerimento di Leppie funziona.

L’XSD

               

Un documento XML di esempio che viene convalidato rispetto allo schema

  Name [email protected] Italian Japanese Alien  

E validazione, per esempio usando xmllint

 xmllint --noout --schema test.xsd test.xml test.xml validate 

xs:choice non funzionerà? In caso contrario, basta avvolgerlo in sequenza o viceversa.

Oppure, poiché “USER” verrà impostato con più elementi figlio, perché non configurarlo come un tipo complesso? Qualcosa del genere dovrebbe funzionare.