typeswitch: XQuery con elementos de tipo choice

El desarrollo de servicios en OSB (Oracle Service Bus) suele conllevar la necesidad de transformar datos mediante XQuery. En este post se presenta un caso concreto, con el fin de agilizar dichos desarrollos. 

La función typeswitch nos permite tratar elementos XML de tipo choice. Estos elementos proporcionan un conjunto limitado de posibles elementos de nivel inferior al consumidor de dicho contrato.

En el momento de acceder al contenido del documento generado, podemos hacer uso de esta función XQuery. Se define el conjunto de posibles elementos que puede contener y el valor a devolver en cada caso:

  • Definición:
 <xsd:complexType name="telefono">
 <xsd:choice>
 <xsd:element name="fijo" type="xsd:string"/>
 <xsd:element name="movil" type="xsd:string"/>
 <xsd:element name="extension" type="xsd:string"/>
 </xsd:choice>
 </xsd:complexType>
  • Función XQuery:
...
typeswitch ($telefono/( ns0:fijo | ns0:movil | ns0:extension )) 
 case $fijo as element(ns0:fijo)
 return
   concat("El teléfono fijo es: ",$fijo)
 case $movil as element(ns0:movil)
 return
   concat("El teléfono movil es: ",$movil)
 case $ext as element(ns0:extension)
 return
   concat("La extensión telefónica es: ",$ext)
 default
 return ()
...

Incluido dentro de un bucle, nos permitiría obtener todos los datos de contacto de un usuario con repeticiones de cada uno de los elementos, por poner un ejemplo.

Twitter
LinkedIn
Evolución, innovación y transformación
37 Service Expertise avalados por Oracle 
Our value proposition
100% Oracle posts
Follow our day-to-day activities