2012-06-20 3 views
5

Estoy definiendo un simpleType que tiene un restriction para que sea un valor de enumeration o un valor que coincida con pattern. Me doy cuenta de que puedo hacerlo todo desde pattern, pero quiero tener la lista de selección que proporciona el enumeration.¿Cómo se define una restricción de esquema que permite un valor de enumeración o coincidencia de patrón?

Esto es lo que esperaba para ser capaz de hacer:

<xs:simpleType name="both"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="one" /> 
    <xs:enumeration value="two" /> 
    <xs:pattern value="[0..9]+" /> 
    </xs:restriction> 
<xs:simpleType> 

Pero eso no desde un valor que no puede igualar ambas restricciones. Si modifico el patrón para permitir cualquier valor enumerado, fallará si solo coincide con el patrón.

Respuesta

8

Resulta que necesito un union. Definir el tipo enumerado como un tipo separado:

<xs:simpleType name="enumeration"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="one" /> 
    <xs:enumeration value="two" /> 

    </xs:restriction> 
<xs:simpleType> 

continuación, crear el tipo de destino como una enumeración:

<xs:simpleType name="both"> 
    <xs:union memberTypes="enumeration"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
     <xs:pattern value="[0..9]+" /> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:union> 
</xs:simpleType> 

Así que ahora tengo la lista de selección, o que coincida con el patrón. ¡Exactamente lo que quería!

Actualización: en realidad se puede definir ambos tipos simples como hijos de la union o mediante el atributo memberTypes.

+0

Gracias por consejo! Mencionaría que también funciona con los dos elementos '' listados dentro de ''. Por cierto, debe marcar la respuesta (incluso la suya) como aceptada para aclarar que es la solución correcta. – Melebius

Cuestiones relacionadas