typeswitch: XQuery con elementos de tipo choice
26/07/2012 -
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.