2010-02-15 10 views
5

Teniendo en cuenta el siguiente ejemplo:XSD: ¿Cómo restringir los valores de enumeración de un tipo complejo derivado?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="Book" abstract="true"> 
     <xs:sequence> 
      <xs:element name="titel" type="xs:string"> 
      </xs:element> 
      <xs:element name="bookCode" type="BookEnum"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="Lyric"> 
     <xs:complexContent> 
      <xs:extension base="Book"> 
       <xs:sequence> 
        <xs:element name="author" type="xs:string"> 
        </xs:element> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:simpleType name="BookEnum"> 
     <xs:restriction base="xs:int"> 
      <xs:enumeration value="Paperback"/> 
      <xs:enumeration value="Hardcover"/> 
      <xs:enumeration value="Liporello"/> 
      <xs:enumeration value="None"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

Lyric deriva del libro. Me gustaría restringir los posibles valores de BookEnum para el complexType "Lyric" para que sea "Paperback".

"Ninguno", "Liporello" y "Tapa dura" ya no deben ser valores válidos para "Lyric". ¿Esto se puede hacer en xsd?

Respuesta

8

No, desafortunadamente no puedes hacer eso. No hay forma de restringir una enumeración así, y también tendría problemas para extender y restringir un tipo complejo al mismo tiempo. Hay un buen artículo que puede hacer con las enumeraciones here.

Quizás considere trabajar de abajo hacia arriba en su lugar: defina un tipo de libro básico con casi nada en él; luego defina un LyricType que sea una unión del tipo básico y algunos valores más; llevar el bookCode en los subtipos. No es ideal, pero, por desgracia, XSD no siempre se alinea con los lenguajes orientados a objetos.

+0

Gracias por el enlace al sitio de IBM. Lástima que no funciona correctamente con "restricciones". De todos modos, gracias por tu respuesta. – tobsen

+1

Creo que puede hacer esto en XSD 1.1 utilizando xpath: http://stackoverflow.com/questions/6472264/can-an-xsdenumeration-tag-be-made-mandatory-required – RMorrisey

1

En última instancia .. que están tratando de validar un nodo utilizando el valor de la otra (padres o hermanos o etc) .. que por cierto no es posible ..

Cuestiones relacionadas