XML - Restricciones y orden en XML Schema

   
Vista:

Restricciones y orden en XML Schema

Publicado por Víctor Cano (1 intervención) el 24/04/2012 12:27:55
Hola a todos.

Estoy intentando utilizar un Esquema XML para hacer una serie de comprobaciones.
En concreto, quiero definir las ramas que puede haber y una serie de restricciones sobre los valores.

Para determinar las diferentes ramas que puede haber, he escrito el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<xs:element name="vm">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="filesystem"/>
        <!--xs:element ref="dynamips_conf" minOccurs="0" /-->
        <xs:element minOccurs="0" ref="mem"/>
        <xs:element minOccurs="0" ref="kernel"/>
        <xs:element minOccurs="0" ref="conf"/>
        <xs:element minOccurs="0" ref="shell"/>
        <xs:element minOccurs="0" ref="basedir"/>
        <xs:element minOccurs="0" ref="mng_if"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="console"/>
        <xs:element minOccurs="0" ref="on_boot"/>
        <!--xs:element ref="display_console" minOccurs="0" /-->
        <!--xs:element ref="xterm" minOccurs="0" /-->
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="if"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="route"/>
        <xs:element minOccurs="0" ref="forwarding"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="user"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="filetree"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="exec"/>
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required"/>
      <xs:attribute name="type" type="xs:string" use="required"/>
      <xs:attribute name="subtype" type="xs:string" use="optional"/>
      <xs:attribute name="os" type="xs:string" use="optional"/>
      <xs:attribute name="order" type="xs:string" use="optional"/>
      <xs:attribute name="exec_mode" type="xs:string" use="optional"/>
     </xs:complexType>
  </xs:element>



El problema con este código es que obliga a que el orden de escritura de cada una de las ramas sea el especificado. A mí me gustaría que seguir conservando el número de apariciones pero que pudiesen aparecer en cualquier orden.
Por ejemplo, si aparece primero "filesystem" y después "route" me lo dará por válido, mientras que si aparecen en el orden contrario no, y eso es lo que quiero cambiar.



Otra cosa en la que necesito algo de ayuda es en poner restricciones de valores dependientes de otros.
Utilizando "restriction" he podido limitar los valores de algunas etiquetas a una lista, pero necesitaría ir un poco más allá y hacer depender esta lista de otro parámetro.
Como creo que se ve mejor con un ejemplo, allá va:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<vm name="h4" type="libvirt" subtype="kvm" os="linux">
    <filesystem type="cow">/usr/share/vnx/filesystems/rootfs_ubuntu</filesystem>
    <mem>128M</mem>
    <if id="1" net="Net2">
      <ipv4>10.0.2.3/24</ipv4>
    </if>
    <route type="ipv4" gw="10.0.2.1">default</route>
    <!-- Copy the files under conf/tutorial_ubuntu/h4 to vm /var/www directory -->
    <filetree seq="start-www" root="/var/www">conf/tutorial_ubuntu/h4</filetree>
    <!-- Start/stop apache www server -->
    <exec seq="start-www" type="verbatim" ostype="system">chmod 644 /var/www/*</exec>
    <exec seq="start-www" type="verbatim" ostype="system">service apache2 start</exec>
    <exec seq="stop-www" type="verbatim"  ostype="system">service apache2 stop</exec>
  </vm>



En el código anterior vemos que aparece type="libvirt". Pues bien, por ejemplo, cuando en "type" aparezca ese valor, me gustaría que en "os" sólo pudiese aparecer "linux" o "olive".


A ver si alguien podría echarme una mano con estas dos cosas.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder