Schema XML Come restringere l’attributo per enumerazione

Ho il seguente tag XML

20000.00 

Come faccio a limitare l’attributo di valuta a uno dei seguenti:

  • euro
  • sterline
  • dollari

E il prezzo di un doppio?

Ho appena ricevuto un errore quando provo ad un tipo su entrambi, ecco quello che ho ottenuto finora:

              

Il valore numerico sembra mancare dalla definizione del prezzo. Prova quanto segue:

               

Nuova risposta alla vecchia domanda

Nessuna delle risposte esistenti a questa vecchia domanda affronta il problema reale.

Il vero problema era che xs:complexType non può avere direttamente una xs:extension da bambino in XSD. La soluzione è usare xs:simpleContent prima. Dettagli seguono …


Il tuo XML,

 20000.00 

sarà valido contro uno dei seguenti XSD corretti:

Tipo di attributo definito localmente

                     

Tipo di attributo definito globalmente

                    

Gli appunti

  • Come commentato da @Paul , questi cambiano il tipo di contenuto del price da xs:string a xs:decimal , ma questo non è strettamente necessario e non era il vero problema.
  • Come risposto da @ user998692 , puoi separare la definizione di valuta e potresti passare a xs:decimal , ma anche questo non era il vero problema.

Il vero problema era che xs:complexType non può avere direttamente una xs:extension da bambino in XSD; xs:simpleContent per prima xs:simpleContent è necessario xs:simpleContent .

Un problema correlato (che non è stato chiesto ma potrebbe aver confuso altre risposte):

Come potrebbe essere limitato il price dato che ha un attributo?

In questo caso, sarebbe necessaria una definizione globale separata di priceType ; non è ansible farlo con solo definizioni di tipo locale.

Come limitare il contenuto dell’elemento quando l’elemento ha attributo

                           

devi creare un tipo e creare l’attributo di quel tipo:

        

poi:

    
    

Ciò eliminerebbe completamente la necessità di enumerazione. È ansible modificare il tipo da raddoppiare se necessario.