Pregunta

He tratado todo el <xs:all>, <xs:choice>, and <xs:sequence>

Ninguno de estos ayuda a mi caso de manera satisfactoria.

¿Alguien sabe cómo le validar algo como esto.

<Menu>  
   <SubMenu>
      <MenuItem .. />  
      <MenuItem .. />  
      <MenuItem .. />  
   </SubMenu>  
   <MenuItem .. >  
   <MenuItem .. >  
</Menu>

Cuando, Bajo la etiqueta <Menu> <SubMenu> y / o <MenuItem> pueden ocurrir en cualquier número de veces (0-n) en cualquier orden. Pero al menos uno de ellos debe ocurrir al menos una vez.

Haciendo caso omiso de las validaciones dentro de las etiquetas submenú.

agradecería cualquier ayuda en este asunto.

¿Fue útil?

Solución

Si he entendido correctamente su requerimiento, entonces podría frase el modelo como "uno de los submenús o Menultem seguido de cero o más elementos de menú o los MenuItem". Que se puede expresar con bastante facilidad como una secuencia de dos opciones:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- whatever your element needs to be modelled as here -->
    <xs:element name="MenuItem">
        <xs:complexType>
            <xs:attribute name="text"/>
        </xs:complexType>
    </xs:element>

   <!-- only modelling the structure of the child elements here -->
    <xs:element name="SubMenu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Menu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="1" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>          
        </xs:complexType>
    </xs:element>
</xs:schema>

Se puede modelar esta utilizando de forma más limpia un tipo global compartida por los menús y submenús, pero de esta manera es relativamente obvio que la esperanza.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top