Duda XML - XSD

MrAllOnA

Hola gente, acudo a vosotros para ver si, como en otras ocasiones, podéis aclararme esta duda.

El tema es que tengo un XML que quiero validar contra un XSD, pero no se como tengo que hacer en el XSD para que me valide lo siguiente:

Para resumir:

El XML tiene un elemento (elemento1) que dentro tendrá otro elemento (elemento2), pero quiero que ese elemento2 pueda ser de varios tipos diferentes, es decir, se perfectamente como indicarle que un elemento sea de "tal" tipo (cualquiera por defecto, o declarado por mi), pero no se como hacer para que pueda ser de varios tipos.

Alguien sabría orientarme un poco?

Gracias! ;)

Lecherito

#1 Supongo (y recalco el supongo, hace tiempo que no miro el XSD), que podrías hacer un choice con el mismo name y distinto type para que solamente escoja el de ese tipo... si no, a las muy malas un choice pero también con distinto nombre.

1 respuesta
se0

no puedes hacer que sea de varios tipos, pero puedes meter de 0 a 1 elemento del tipo 1, de 0 a 1 de tipo 2, etc? algo asi:

<xs:element name="root">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="elemento" type="xs:byte" minOccurs="0"/>
				<xs:element name="elemento" type="xs:boolean" minOccurs="0"/>
				<xs:element name="elemento" type="xs:double" minOccurs="0"/>
				<xs:element name="elemento" type="xs:decimal" minOccurs="0"/>
				<xs:element name="elemento" type="xs:decimal" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
MrAllOnA

Si si, al final he podido hacerlo con lo que ha dicho #2, con choice:

    <xsd:complexType name="TipoDatoMenos">
        <xsd:choice minOccurs="1" maxOccurs="1">
            <xsd:element name="suma" type="p:TipoDatoSuma"/>
            <xsd:element name="menos" type="p:TipoDatoMenos"/>
            <xsd:element name="variable" type="xsd:string"/>
            <xsd:element name="constante" type="xsd:double"/>
            <xsd:element name="producto" type="p:TipoDatoProducto"/>
        </xsd:choice>
    </xsd:complexType>

Aquí estoy declarando un tipo llamado "TipoDatoMenos" que va a poder tener dentro un (y solo uno) elemento llamado "suma" o "menos" o "variable", etc, y con sus tipos correspondientes, lo que necesitaba vamos... :)

Muchas gracias a los dos ;)

Usuarios habituales

  • MrAllOnA
  • se0
  • Lecherito