LMSGI06 - DAM - Lenguajes de marcas y sistemas de gestión de información - UT6.- Almacenamiento de la información. Contenidos.
Almacenamiento de la información.
Caso práctico
Antes de irse de vacaciones con su familia,María y Félix tienen una reunión con el responsable del departamento de informática de la empresa, Juan, en la que éste último les explica que aún se puede mejorar la gestión de datos de la empresa.
Juan opina que ya que en la empresase ha impuesto el uso de la tecnología XML, sería mejor utilizar un sistema de almacenamiento y consulta de datos compatible con dicha tecnología.
Van a intentar utilizar un sistema de almacenamiento de datos, diferente de la base de datos relacional que han usado hasta ahora, que es compatible con la tecnología XML que están utilizando.
Además, para acceder a los datos de esta base de datos nativa van a utilizar un lenguaje de consultas llamadoXQuery, que equivale alSQLusado con las bases de datos relacionales.
Materiales formativos de FP Online propiedad del Ministerio de Educación y Formación Profesional. Aviso Legal
1.- Utilización de XML para el almacenamiento de la información.
Caso práctico
MientrasMaríaestá de vacaciones con su familia leexplica a su marido, José Ramón, las nuevasmodificacionesque va a realizar Juan en el sistema informático de la empresa.
Comienza por explicarle lo que es un sistema de almacenamiento, su relación con la tecnología XML y los distintos ámbitos de aplicación que pueden tener.
Como ya hemos visto, XML, es un estándar potente y de amplia aceptación para guardar y comunicar información acerca de objetos. Permite la codificación de información, separada de la forma en la que se debe presentar al usuario. Cuando se desea encontrar un fragmento específico de información en los contenidos de un nodo o atributo XML, es necesario procesar completamente todo el archivo XML.
Podemos pensar en XML como en una base de datos. Visto así, una base de datos XML se puede ver como una colección de documentos XML. Cada documento XML representa un registro de la base de datos; es un archivo en el sistema de archivos y contiene una cadena válida XML.
La estructura de un documento XML suele seguir un mismo esquema XML, aunque no es necesario que sea así. Este es uno de los beneficios de las bases de datos XML, ya que cada archivo se puede configurar de forma estructurada por lo que es independiente, pero fácilmente accesible.
La principal ventaja de usar bases de datos XML es que proporcionan una gran flexibilidad (gracias a tener colecciones de documentos con un esquema independiente), lo que conlleva facilidad a la hora de crear aplicaciones que usen a la Base de Datos XML.
Esta flexibilidad es un gran valor, especialmente en los últimos años, en los que se ha visto la necesidad de contar con estándares para el intercambio de información. Estos estándares ayudan a que las organizaciones puedan compartir su información de una manera más cómoda, automática y eficiente.
Los documentos y los requerimientos de almacenamiento de datos XML pueden ser agrupados en dos categorías generales:
Sistemas centrados en los datos. Cuando los documentos XML tienen una estructura bien definida y contienen datos que pueden ser actualizados y usados de diversos modos. Es apropiada para ítems como contenidos de periódicos, artículos, publicidad, facturas, órdenes de compra... y algunos documentos menos estructurados.
Sistemas centrados en los documentos. Cuando los documentos tienden a ser más impredecibles en tamaño y contenido. Presentan más tipos de datos, de tamaño más variable, con reglas flexibles para campos opcionales y para el propio contenido. Los sistemas de almacenamiento XML deben acomodarse eficientemente con ambos tipos de requerimientos de datos, dado que XML está siendo usado en sistemas que administran ambos tipos de datos.
La mayoría de los productos se enfocan en servir uno de esos formatos de datos mejor que el otro. Las bases de datos relacionales tradicionales son mejores para tratar con requerimientos centrados en los datos, mientras que los sistemas de administración de contenido y de documentos, suelen ser mejores para almacenar datos centrados en el documento.
Los sistemas de bases de datos deben ser capaces de exponer los datos relacionales como un documento XML y almacenar un documento XML recibido como datos relacionales para transferir, obtener y almacenar los datos.
Mientras María disfruta de sus vacaciones Félix y Juan estudian si el cambio propuesto por este último es viable.
Para ello lo primero que hacen es informarse sobre los distintos sistemas de almacenamiento posibles y sus ventajas a la hora de utilizarlos con la tecnología XML.
En este procesoFélix descubre que, además de las bases de datos relacionales, existen las orientadas a objetos y las nativas.
En lo que concierne a las bases de datos,XMLpermite integrar sistemas de información hasta ahora separados:
Sistemas de información basados en documentos(ficheros), tienen estructura irregular, utilizan tipos de datos relativamente simples y dan gran importancia al orden.
Sistemas de información estructurados(bases de datos relacionales), son relativamente planos, utilizan tipos de datos relativamente complejos y dan poca importancia al orden.
Podemos establecer las siguientes semejanzas entre una base de datos y un ficheroXMLcon su esquema asociado:
La tecnologíaXMLusa uno o más documentos para almacenar la información.
Define esquemas sobre la información.
Tiene lenguajes de consulta específicos para recuperar la información requerida.
Dispone deAPIs(SAX,DOM).
Pero aparecen muchas más cosas que lo diferencian. Debido a que no es una base de datos, la tecnologíaXMLcarece, entre otras cosas, tanto de almacenamiento y actualización eficientes como de índices, seguridad, transacciones, integridad de datos, acceso concurrente, disparadores, etc.; que son algunas de las características habituales en las bases de datos. Por tanto es imposible pensar queXMLse vaya a utilizar para las tareas transaccionales de una organización para las cuales sigue estando sobradamente más justificado utilizar una base de datos.
Un ejemplo de esto esJABX (Java Architecture for XML Binding)del que puedes obtener más información en el siguienteenlace.
Las Bases de Datos Relacionales se basan en las relaciones (tablas bidimensionales), como único medio para representar los datos del mundo real. Están asociadas al lenguaje estándarSQL.
Se han creado complejas teorías y patrones para encajar objetos o estructuras jerarquizadas en bases de datos relacionales. Existen numerososmiddlewaresencargados de la transferencia de información entre estructurasXMLy bases de datos relacionales.
Las Bases de Datos Relacionales suponen una posibilidad para el almacenamiento de datosXML. Sin embargo, no están bien preparadas para almacenar estructuras de tipo jerárquico como son los documentosXML, algunas de las causas son:
Las bases de datos relacionales tienen una estructura regular frente al carácter heterogéneo de los documentosXML.
Los documentosXMLsuelen contener muchos niveles de anidamiento mientras que los datos relacionales son planos.
Los documentosXMLtienen un orden intrínseco mientras que los datos relacionales son no ordenados.
Los datos relacionales son generalmente densos (cada columna tiene un valor), mientras que los datosXMLson dispersos, es decir, pueden representar la carencia de información mediante la ausencia del elemento.
Algunas de las razones para usar los tipos de Bases de Datos Relacionales y los productos de bases de datos existentes para almacenarXML, aún cuando no sea de forma nativa son:
Las bases de datos relacionales y orientadas a objetos son bien conocidas, mientras que las bases de datosXMLnativas son nuevas.
Como resultado de la familiaridad con las bases de datos relacionales y orientadas a objetos, los usuarios se inclinan a ellas especialmente por el rendimiento.
Es un software que permite la comunicación entre dos aplicaciones de software independientes. Por ejemplo, un middleware puede permitir a una base de datos acceder a los datos de otra.
El proceso de traducción puede ser descompuesto en los siguientes pasos básicos:
Crear el esquema XMLcon un elemento para cada tabla y los atributos correspondientes para cada columna no clave. Las columnas que no permiten valores nulos pueden ser marcadas como requeridas, mientras que aquellas que permiten valores nulos pueden ser marcadas como opcionales en el esquemaXML. Las columnas pueden ser también anidadas como elementos, pero pueden surgir problemas cuando el mismo nombre de columna es usado en más de una tabla. Por ello, lo más simple es transformar las columnas como atributosXML, donde las colisiones de nombre en el esquemaXMLno son un problema.
Crear las claves primarias en el esquema XML. Una solución podría ser agregar un atributo para la columna clave primaria, con un ID agregado al nombre de la columna. Este atributo podría necesitar ser definido en el esquemaXMLcomo de tipo ID. Pueden surgir problemas de colisión al crear claves primarias en el esquemaXML, ya que a diferencia de las bases de datos relacionales, donde las claves primarias necesitan ser únicas sólo dentro de una tabla, un atributo ID dentro de un documentoXMLdebe ser único a través de todo el documento. Para resolverlo se puede agregar el nombre del elemento (nombre de la tabla), al valor de la clave primaria (valor del atributo). Esto asegura que el valor es único a través del documento XML.
Establecer las relaciones de clave migrada. Esto se puede lograr mediante el anidamiento de elementos bajo el elemento padre, un ID de esquemaXMLpuede ser usado para apuntar a una estructuraXMLcorrespondiente conteniendo unIDREF.
Pueden existir muchas variaciones de esquemasXMLpara representar la misma base de datos relacional.
Autoevaluación
Ordena los siguientes pasos con su orden a la hora de transformar una base de datos relacional a almacenamiento XML:
Establecer las relaciones de clave migrada.
Crear el esquema XML
Crear las claves primarias
Indica en cada caso la letra de la opción elegida.
El orden adecuado es crear el esquema, luego las claves primarias y por último las migradas.
4.- XML y BD Orientadas a Objetos.
Lasbases de datos orientadas a objetos(DBOO) soportan un modelo de objetos puro, en el sentido de que no están basados en extensiones de otros modelos más clásicos como el relacional:
Están influenciados por los lenguajes de programación orientados a objetos.
Pueden verse como un intento de añadir la funcionalidad de unSGBDa un lenguaje de programación.
Son una alternativa para el almacenamiento y gestión de documentosXML.
Componentes del estándar de Orientación a Objetos:
Modelo de Objetos.Está concebido para proporcionar un modelo de objetos estándar para las bases de datos orientadas a objetos. Es el modelo en el que se basan el los demás componentes.
Lenguajes de Especificación de Objetos (ODL). Para definir los objetos.
Lenguaje de Consulta de Objetos (OQL).Para realizar consultas contra los objetos.
‘Bindings’ para C++, Java y Smalltalk.Definen un Lenguaje de Manipulación de Objetos (OML)que extiende el lenguaje de programación para soportar objetos persistentes. Además incluyen soporte paraOQL, navegación y transacciones.
Una vez transformado el documentoXMLen objetos, éstos son gestionados directamente por elSGBDOO. Dicha información se consulta acudiendo al lenguaje de consulta OQL. Los mecanismos de indexación, optimización, procesamiento de consultas, etc. son los del propioSGBDOO, y por lo general, no son específicos para el modeloXML.
En programación se denomina binding a toda adaptación que se hace en un conjunto de programas, utilizados en desarrollo de software, conocido como librería o biblioteca; para poder utilizarles al trabajar en un lenguaje de programación diferente a aquel en el que se codificaron.
Lenguaje de programación orientado a objetos desarrollado a mediados de los años 80 por Bjarne Stroustrup.
Lenguaje de programación orientado a objetos desarrollado a principios de los años 90 por la empresa Sun Microsystems. Tiene la ventaja de que las aplicaciones escritas en este lenguaje pueden distribuirse y ser ejecutadas en cualquier sistema operativo, independientemente de aquel en el que han sido creadas.
Lenguaje de programación orientado a objetos desarrollado durante los años 70 por Alan Kay.
En programación es un objeto que tiene la particularidad de que sus propiedades se almacenan en un medio secundario. Esto implica que el tiempo de vida del objeto es independiente del proceso que le creó.
Las Bases de Datos XML Nativas son bases de datos (y como tales soportan transacciones, acceso multi-usuario, lenguajes de consulta, etc) diseñadas especialmente para almacenar documentos XML.
LasBDXML Nativas se caracterizan principalmente por:
Almacenamiento de documentos en colecciones.Las colecciones juegan en las bases de datos nativas el papel de las tablas en las BD relacionales.
Validación de los documentos.
Consultas.La mayoría de las BD XML Nativas soportan uno o más lenguajes de consulta. Uno de los más populares es XQuery.
Indexación XML.Se ha de permitir la creación de índices que aceleren las consultas realizadas.
Creación de identificadores únicos.A cada documento XML se le asocia un identificador único.
Actualizaciones y Borrados.
Según el tipo de almacenamiento utilizado pueden dividirse en dos grupos:
Almacenamiento Basado en Texto.Almacena el documento XML entero en forma de texto y proporciona alguna funcionalidad de base de datos para acceder a él. Hay dos posibilidades:
Posibilidad 1: Almacenar el documento como unBLOBen una base de datos relacional, mediante un fichero, y proporcionar algunos índices sobre el documento que aceleren el acceso a la información.
Posibilidad 2: Almacenar el documento en un almacén adecuado con índices, soporte para transacciones, etc.
Almacenamiento Basado en el Modelo.Almacena un modelo binario del documento (por ejemplo, DOM) en un almacén existente o bien específico.
Posibilidad 1: Traducir el DOM a tablas relacionales como Elementos, Atributos, Entidades, etc.
Posibilidad 2: Traducir el DOM a objetos en unaBDOO.
Posibilidad 3: Utilizar un almacén creado especialmente para esta finalidad.
Una vez que María vuelve de vacaciones Juan y Félix le ponen al día de sus estudios.
La única cuestión quequeda por decidir es el modo de acceder a los datos guardados en los archivos XML. Juan les explica que existe un lenguaje semejante al SQL, con el que están familiarizados, llamadoXQueryy que a su vez está basado enXPath.
XQueryes un lenguaje diseñado para escribir consultas sobre colecciones de datos expresadas en XML. Puede aplicarse tanto a archivos XML, como a bases de datos relacionales con funciones de conversión de registros a XML. Su principal función es extraer información de un conjunto de datos organizados como un árbol de etiquetas XML. En este sentidoXQueryes independiente del origen de los datos.
Permite la construcción de expresiones complejas combinando expresiones simples de una manera muy flexible.
De manera general podemos decir queXQuery es a XML lo mismo que SQL es a las bases de datos relacionales. Al igual que éste último, XQuery es un lenguaje funcional.
Los requerimientos técnicosmás importantesde XQueryse detallan a continuación:
Debe ser independiente del protocolo de accesoa la colección de datos. Esto significa que una consulta en XQuery, debe funcionar igual al consultar un archivo local, que al consultar un servidor de bases de datos, o que al consultar un archivo XML en un servidor web.
Las consultas y los resultados deben respetar elmodelo de datos XML.
Las consultas y los resultados deben ofrecersoporte para los namespaces.
Debe soportarXML-Schemas yDTDsy también debe ser capaz de trabajar sin ellos.
Ha de serindependiente de la estructuradel documento, esto es, funcionar sin conocerla.
Debe soportartipos simples, como enteros y cadenas, ytipos complejos, como un nodo compuesto.
Las consultas deben soportarcuantificadores universales(para todo) y existenciales (existe).
Las consultas deben soportaroperaciones sobre jerarquías de nodosy secuencias de nodos.
Debe ser posiblecombinar información de múltiples fuentesen una consulta.
Las consultas deben ser capaces demanipular los datos independientemente del origende estos.
El lenguaje de consulta debe ser independiente de la sintaxis, esto es, pueden existir varias sintaxis distintas para expresar una misma consulta en XQuery.
Lenguaje en el que cada consulta es una expresión que es evaluada y devuelve un resultado.
Lenguaje en el que hay que indicar qué se quiere, no la manera de obtenerlo.
6.1.- Aplicaciones.
Una vez que hemos visto la definición del lenguaje y sus principales requerimientos, queda pensar, ¿para qué se utiliza?
Sus principales aplicaciones se resumen en tres:
Recuperar información a partir de conjuntos de datos XML.
Transformar unas estructuras de datos XMLen otras estructuras que organizan la información de forma diferente.
Ofrecer una alternativa aXSLTpara realizar transformaciones de datos en XML a otro tipo de representaciones, comoHTMLoPDF.
¿Y cuáles son los motores XQuery de código abierto más relevantes y sus características principales?
BaseX: proyecto open-source, con interfaz gráfica y disponible para Linux, Windows y Mac.
Qexo:escrito en Java y con licenciaGPLque se distribuye integrado dentro del paquete Kawa.
Saxon:escrito en Java y distribuido en múltiples paquetes, algunos open-source y otros bajo licencia comercial.
También llamado "open source" es la denominación que se le da al software que se desarrolla y distribuye libremente, es decir aquellos programas que podemos utilizar, modificar y redistribuir de forma gratuita.
Es un IDE (Entorno de Desarrollo Integrado) que permite crear aplicaciones en lenguaje Java.
AunqueXQueryySQLpuedan considerarse similares, el modelo de datos sobre el que se sustentaXQueryes muy distinto del modelo de datos relacional sobre el que sustentaSQL, ya queXMLincluye conceptos como jerarquía y orden de los datos que no están presentes en el modelo relacional.
Por ejemplo, a diferencia deSQL, enXQueryel orden en que se encuentren los datos es importante, ya que no es lo mismo buscar una etiqueta <B> dentro de una etiqueta <A> que todas las etiquetas <B> del documento (que pueden estar anidadas dentro de una etiqueta <A> o no).
La entrada y la salida de una consultaXQueryse define en términos de un modelo de datos. Dicho modelo de datos de la consulta proporciona una representación abstracta de uno o más documentosXML(o fragmentos de documentos).
Las principales características de este modelo de datos son:
Se basa en ladefinición de secuencia, como una colección ordenada de cero o más ítems. Éstas pueden ser heterogéneas, es decir pueden contener varios tipos de nodos y valores atómicos. Sin embargo, una secuencia nunca puede ser un ítem de otra secuencia.
Orden del documento: corresponde al orden en que los nodos aparecerían si la jerarquía de nodos fuese representada en formatoXML, (si el primer carácter de un nodo ocurre antes que el primer carácter de otro nodo, lo precederá también en el orden del documento).
Contempla unvalor especial llamado “error value”que es el resultado de evaluar una expresión que contiene un error.
Una consulta en XQuery es una expresión que lee una secuencia de datos en XML, y devuelve como resultado otra secuencia de datos en XML.
El valor de una expresión es una secuencia heterogénea de nodos y valores atómicos. La mayoría de las expresiones están compuestas por la combinación de expresiones más simples unidas mediante operadores y palabras reservadas.
Ya hemos visto queXPathes un lenguaje declarativo para la localización de nodos y fragmentos de información en árbolesXML. Puesto que XQuery ha sido construido sobre la base de XPath y realiza la selección de información y la iteración a través del conjunto de datos basándose en dicho lenguaje,toda expresión XPath también es una consulta Xquery válida.
LoscomentariosenXQueryestán limitados entre caras sonrientes, es decir: (: Esto es un comentario XQuery :).
En un documento XQuerylos caracteres { } delimitan las expresiones que son evaluadaspara crear un documento nuevo.
XQuery admite expresiones condicionales del tipoif-then-elsecon la misma semántica que tienen en los lenguajes de programación habituales.
Las consultas XQuery pueden estar formadas por hasta cinco tipos de cláusulas diferentes, siguen la normaFLWOR(que se pronuncia "flower"). Estas cláusulas son los bloques principales del XQuery, equivalen a las cláusulasselect, from, where, group by, having, order byylimitdeSQL.
En una sentenciaFLWORal menos ha de existir una cláusula FOR o una LET, el resto, si existen, han de respetar escrupulosamente el orden dado por el nombre, FLWOR. Con estas sentencias se consigue buena parte de la funcionalidad que diferencia a XQuery de XPath. Entre otras cosas permite construir el documento que será la salida de la sentencia.
Una consultaXQueryestá formada por dos partes:
Prólogo: Lugar donde se declaran los espacios de nombres, de funciones, variables, etc.
Hemos visto el modo de crear sentencias FLOWR, vamos ahora a estudiar aisladamente cada una de las cláusulas que pueden formar estas sentencias.
FOR: asocia una o más variables con cada nodo que encuentre en la colección de datos. Si en la consulta aparece más de una cláusula FOR (o más de una variable en una cláusula FOR), el resultado es el producto cartesiano de dichas variables.
LET: vincula las variables al resultado de una expresión. Si esta cláusula aparece en una sentencia en la que ya hay al menos una cláusula FOR, los valores de la variable vinculada por la cláusula LET se añaden a cada una de las tuplas generadas por la cláusula FOR.
WHERE: filtra tuplas producidas por las cláusulas FOR y LET, quedando solo aquellas que cumplen con la condición.
ORDER BY: ordena las tuplas generadas por FOR y LET después de que han sido filtradas por la cláusula WHERE. Por defecto el orden es ascendiente, pero se puede usar el modificadordescendingpara cambiar el sentido del orden.
RETURN:construye el resultado de la expresión FLWOR para una tupla dada.
Debes conocer
En el siguiente enlace puedes ver una presentación que muestra el modo en el que se ejecuta una sentencia FLWOR.
Vamos a ver algunos ejemplos de XQuery utilizando el fichero libros.xml. En este fichero:
El elemento raíz es biblioteca. Contiene un elemento libros.
Dentro de libros, hay varios elementos libro.
Los elementos libro tienen atributos publicacion y edicion (opcional). También tienen elementos titulo, autor (puede haber más de uno), editorial, paginas y un elemento opcional para indicar si hay edición electrónica, edicionElectronica.
Ejercicio Resuelto 1
1.- Título y editorial de todos los libros Para devolver varios campos, los envolvemos en un elemento.
Ejercicio Resuelto 2
2.- El título (sin etiquetas) de todos los libros de menos de 100 páginas. Para hacer comparaciones con números, lo mejor es convertir los datos con la función number para evitar problemas de tipo de dato o que los compare como cadenas.
Ejercicio Resuelto 3
3.- El número de libros de menos de 100 páginas. Utilizamos la función count().
Ejercicio Resuelto 4
4.- Una lista HTML con el título de los libros de la editorial “O'Reilly” ordenados por título. Podemos mezclar etiquetas HTML y XQuery y obtener HTML como resultado de una consulta.
Ejercicio Resuelto 5
5.- Título y editorial de los libros de 2002.
Ejercicio Resuelto 6
6.- Título y editorial de los libros con más de un autor.
Ejercicio Resuelto 7
7.- Título y editorial de los libros que tienen versión electrónica.
Ejercicio Resuelto 8
8.- Título de los libros que no tienen versión electrónica.
6.6.- Funciones.
Ahora que conocemos las cláusulas que sustentan el lenguajeXQuery, vamos a ocuparnos de lasfunciones que soporta. Estas son funciones matemáticas, de cadenas, para el tratamiento de expresiones regulares, comparaciones de fechas y horas, manipulación de nodos XML, manipulación de secuencias, comprobación y conversión de tipos y lógica booleana. Además permite definir funciones propias y funciones dependientes del entorno de ejecución del motor XQuery. Las funciones más importantes se muestran a continuación:
Funciones numéricas
floor(),que devuelve el valor numérico inferior más próximo al dado.
ceiling(),que devuelve el valor numérico superior más próximo al dado.
round(),que redondea el valor dado al más próximo.
count(),determina el número de ítems en una colección.
min()omax(),devuelven respectivamente el mínimo y el máximo de los valores de los nodos dados.
avg(),calcula el valor medio de los valores dados.
sum(),calcula la suma total de una cantidad de ítems dados.
Funciones de cadenas de texto
concat(),devuelve una cadena construida por la unión de dos cadenas dadas.
string-length(),devuelve la cantidad de caracteres que forman una cadena.
startswith(), ends-with(),determinan si una cadena dada comienza o termina, respectivamente, con otra cadena dada.
upper-case(), lower-case(),devuelve la cadena dada en mayúsculas o minúsculas respectivamente.
Funciones de uso general
empty(),devuelve “true” cuando la secuencia dada no contiene ningún elemento.
exits(),devuelve “true” cuando una secuencia contiene, al menos, un elemento.
distinct-values(),extrae los valores de una secuencia de nodos y crea una nueva secuencia con valores únicos, eliminando los nodos duplicados.
data(), devuelve el valor de los elementos que recibe como argumentos, es decir, sin etiquetas.
Cuantificadores existenciales:
some,every, permiten definir consultas que devuelven algún, o todos los elementos, que verifiquen la condición dada.
Ejemplo de la función data
Esta consulta devuelve todos los títulos, incluyendo las etiquetas:
for $x in doc("libros.xml")/biblioteca/libros/libro/titulo
return $x
El resultado con el fichero de ejemplo sería:
<titulo>Learning XML</titulo>
<titulo>XML Imprescindible</titulo>
<titulo>XML Schema</titulo>
<titulo>XPath Essentials</titulo>
<titulo>Beginning XSLT 2.0: Form Novice to Professional</titulo>
<titulo>XQuery</titulo>
Utilizando la función data:
for $x in doc("libros.xml")/biblioteca/libros/libro/titulo
return data($x)
...se obtiene:
Learning XML
XML Imprescindible
XML Schema
XPath Essentials
Beginning XSLT 2.0: Form Novice to Professional
XQuery
Además de estas funciones que están definidas en el lenguaje, XQuery permite al desarrollador construir sus propias funciones:
declare nombre_funcion($param1 as tipo_dato1, $param2 as tipo_dato2,… $paramN as tipo_datoN)
as tipo_dato_devuelto
{
...CÓDIGO DE LA FUNCIÓN...
}
6.7.- Ejemplo: definición y llamada a una función.
Ejercicio Resuelto
En este ejemplo puedes ver la definición y llamada a una función escrita por el usuario que nos calcula el precio de un libro una vez que se le ha aplicado el descuento.
6.8.- Operadores.
Veamos ahora algunos de los operadores más importantes agrupados según su funcionalidad:
Comparación de valores:Comparan dos valores escalares y produce un error si alguno de los operandos es una secuencia de longitud mayor de 1. Estos operadores son:
eq, igual.
ne, no igual.
lt, menor que.
le, menor o igual que.
gt, mayor que.
ge, mayor o igual que.
Comparación generales:Permiten comparar operandos que sean secuencias.
=, igual.
!=, distinto.
>, mayor que.
>=, mayor o igual que.
<,menor que.
<=, menor o igual que.
Comparación de nodos:Comparan la identidad de dos nodos.
is, devuelve true si las dos variables que actúan de operandos están ligadas al mismo nodo.
is not, devuelve true si las dos variables no están ligadas al mismo nodo.
Comparación de órdenes de los nodos:<<, compara la posición de dos nodos. Devuelve “true“ si el nodo ligado al primer operando ocurre primero en el orden del documento que el nodo ligado al segundo.
Lógicos: and y or Se emplean para combinar condiciones lógicas dentro de un predicado.
Secuencias de nodos:Devuelven secuencias de nodos en el orden del documento y eliminan duplicados de las secuencias resultado.
Unión, devuelve una secuencia que contiene todos los nodos que aparecen en alguno de los dos operandos que recibe.
Intersect, devuelve una secuencia que contiene todos los nodos que aparecen en los dos operandos que recibe.
Except, devuelve una secuencia que contiene todos los nodos que aparecen en el primer operando que recibe y que no aparecen en el segundo.
Aritméticos:+, -, *, div y mod, devuelven respectivamente la suma, diferencia, producto, cociente y resto de operar dos números dados.