Esquema XML Cómo restringir atributo por enumeración

Tengo la siguiente etiqueta XML

20000.00 

¿Cómo restrinjo el atributo de moneda a uno de los siguientes?

  • euros
  • libras
  • dólares

Y el precio a un doble?

Acabo de recibir un error cuando bash un tipo en ambos, esto es lo que tengo hasta ahora:

              

El valor numérico parece estar ausente de su definición de precio. Pruebe lo siguiente:

               

Nueva respuesta a la vieja pregunta

Ninguna de las respuestas existentes a esta pregunta anterior aborda el problema real.

El verdadero problema era que xs:complexType no puede tener directamente una xs:extension como un niño en XSD. La solución es usar xs:simpleContent primero. Los detalles siguen …


Tu XML,

 20000.00 

será válido contra cualquiera de los siguientes XSD corregidos:

Tipo de atributo definido localmente

 < ?xml version="1.0" encoding="UTF-8"?>                    

Tipo de atributo definido globalmente

 < ?xml version="1.0" encoding="UTF-8"?>                   

Notas

  • Como comentó @Paul , estos cambian el tipo de contenido del price de xs:string a xs:decimal , pero esto no es estrictamente necesario y no fue el problema real.
  • Como respondió @ user998692 , podría separar la definición de moneda, y podría cambiar a xs:decimal , pero este tampoco era el problema real.

El verdadero problema era que xs:complexType no podía tener directamente una xs:extension como un niño en XSD; xs:simpleContent es necesario primero.

Un asunto relacionado (que no se preguntó pero puede haber confundido otras respuestas):

¿Cómo se puede restringir el price dado que tiene un atributo?

En este caso, se necesitaría una definición global separada de priceType ; no es posible hacer esto solo con definiciones de tipos locales.

Cómo restringir el contenido del elemento cuando el elemento tiene un atributo

 < ?xml version="1.0" encoding="UTF-8"?>                          

necesitas crear un tipo y crear el atributo de ese tipo:

        

entonces:

    
    

Esto eliminaría por completo la necesidad de enumeración. Puede cambiar el tipo a doble si es necesario.