2010-09-27 12 views
8

Ésta es una parte de mi esquema XMLxsd: Cómo extender un tipo con una lista desordenada de elementos

<xs:complexType name="Friend"> 
    <xs:all> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="phone" type="xs:string" /> 
     <xs:element name="address" type="xs:string" /> 
    </xs:all> 
</xs:complexType> 

<xs:complexType name="Coworker"> 
    <xs:all> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="phone" type="xs:string" /> 
     <xs:element name="office" type="xs:string" /> 
    </xs:all> 
</xs:complexType> 

Para una mejor capacidad de mantenimiento, me gustaría tener los atributos compartidos en un tipo super (resumen) o algo así. Pero más importante, quiero que todos los elementos estén desordenados y también sean opcionales.

¿Es esto posible y cuál es la mejor manera de hacerlo?

Respuesta

13

Tienes que limitarte un poco, algunas de las cosas que intentas hacer no son posibles en XML Schema.

Supongamos que introduce un tipo complejo llamado Person para que sea un super-tipo de Friend y Coworker. Estas son las opciones:

  1. Reemplazar xs:all con xs:sequence, retire name y phone de los subtipos, se suman a la super-tipo, y añaden heredad. Sus elementos ahora tienen que ser ordenados, pero puede hacerlos individualmente opcionales. Es ilegal para usar xs:all en jerarquías de tipos en esquema XML, porque el procesador no puede decir dónde se detiene el modelo de contenido principal y dónde se inicia el modelo de contenido hijo.
  2. Reemplace xs:all con <xs:choice maxOccurs="unbounded"> en ambos tipos, y agregue su herencia. Luego, sus elementos se desordenan nuevamente, pero pueden repetirse.

Por lo tanto, en conclusión: dados los nombres de sus tipos allí arriba, supongo que sus requisitos no se cumplirán exactamente. Me gustaría ir por la primera opción: insistir en el orden de elementos arbitrarios a menudo no es tan útil como parece.

+0

Temía que este fuera el caso. Entonces (1) será. – Cephalopod

Cuestiones relacionadas