Top Banner
Facultad de Estadística e Informática Manejadores de Bases de Datos BASES DE DATOS NO ESTRUCTURADAS - XQUERY
38

Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Oct 14, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Manejadores de Bases de DatosBASES DE DATOS NO ESTRUCTURADAS - XQUERY

Page 2: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

BibliografíaA. Rodríguez, Publicación en Internet y Tecnología XML, Alfa-Omega Ra-Ma, Madrid. España, 2004

World Wide Web Consortium (W3C). 14 de diciembre de 2010. XQuery 1.0: An XML Query Language (Second Edition). Consultado el 4 de marzo de 2017 desde https://www.w3.org/TR/xquery/.

World Wide Web Consortium (W3C). 16 de noviembre de 1999. XML Path Language (XPath)Version 1.0. Consultado el 4 de marzo de 2017 desde https://www.w3.org/TR/xpath/.

Page 3: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Manejadores de Bases de Datos

XQUERY

Page 4: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

XQueryXQuery 1.0 se convirtió en estándar con la recomendación del W3C el 23 de enero de 2007.Última versión: XQuery 3.1. W3C Recommendation 21 March 2017. https://www.w3.org/TR/2017/REC-xquery-31-20170321/

Page 5: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

XQueryXQuery es un lenguaje de consulta para extraer y manipular datos almacenados en XML.XQuery->XMLSQL->Bases de datos

Page 6: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

XQueryUtiliza expresiones xPath para el acceso a los nodos del documento XML.La expresión más importante es FLOWR: FOR, LET, WHERE, ORDER BY y RETURN, que es similar a SQL SELECT y las cláusulas FROM, WHERE y ORDER BY

Page 7: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML. XQuery

FOR – Selecciona los nodos

LET – Permite hacer asignaciones de variables.

WHERE – Filtra los nodos.

ORDER BY – Ordena los nodos

RETURN – Regresa el valor correspondiente, una vez que se ha evaluado cada nodo.

Page 8: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML. XQueryEjemplo: Extraer los nodos <nombre>, <genero>; del archivo catalogoPelis.xml, ordenados por longitud de nombre.

Selecciona los nodos

Ordena los nodos

for $a in /catalogo/peliculaorder by string-length($a/nombre) return<nuevaPelicula>

{ $a/nombre }{ $a/genero }

</nuevaPelicula>

Page 9: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML. XQueryEjemplo: Obtener los nodos <nombre>, <genero>; del archivo catalogoPelis.xml, ordenados por longitud de nombre.

Resultado XQuery

Page 10: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML. XQuery

Ejemplo 2:

Ejemplo: Genera resultado con el nodo <nombre>; donde id es igual a 0001 e id es igual a 0002.

Selecciona los nodos

Asigna el valor a la variable $peliID

Filtra los nodos según la condición

Regresa el valor deseado

for $peli in /catalogo/peliculalet $peliID := $peli/@idwhere $peliID = "0001" or$peliID = "0002"return $peli/nombre

Page 11: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas -XML. XQuery

Ejemplo: Genera resultado con el nodo <nombre>; donde id es igual a 0001 e id es igual a 0002.

Resultado XQuery

Page 12: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas -XML. XQuery

Ejercicio: Obtener los nodos <nombre> y <duracion> del nodo <pelicula>; donde id sea igual a 0003.

Page 13: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Ejercicios Base de Datos proveedores.XML

Datos

proveedores

partes

proyectos

suministros

nombre

estado

ciudad

@numprov

@numpartenombrepartecolorpesociudad

@numproyectonombreproyectociudad

numprovnumpartenumproyectocantidad

proveedor

parte

proyecto

suministra

Page 14: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML. XQuery

Ejercicios Base de Datos proveedores.XML

Page 15: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

Consulta: ciudad de los proveedoresExtraer la ciudad de los proveedores (solo texto, no debe aparecer la etiqueta) que tengan un estado mayor de 15.

for $proveedor in /datos/proveedores/proveedor

where $proveedor/estado > 15

return $proveedor/ciudad/text()

Page 16: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Consulta: ciudad de los proveedoresExtraer el nombre de los proveedores (solo texto, no debe aparecer la etiqueta) donde la ciudad sea París.

Datos

proveedores

partes

proyectos

suministros

nombreprov

estado

ciudad

@numprov

@numpartenombrepartecolorpesociudad

@numproyectonombreproyectociudad

numprovnumpartenumproyectocantidad

proveedor

parte

proyecto

suministra

Page 17: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

Consulta: ciudad de los proveedoresExtraer el nombre de los proveedores (solo texto, no debe aparecer la etiqueta) donde la ciudad sea París.

for $proveedor in /datos/proveedores/proveedor

where $proveedor/ciudad =“Paris”

return $proveedor/nombreprov/text()

Page 18: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

Consulta: filas de la tabla partesCuántas partes existen, es decir, el total de filas de la «tabla» partes.

count (/datos/partes/parte)

Page 19: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

Consulta: filas de la tabla partesCuántos proveedores existen, es decir, el total de filas de la «tabla» proveedor.

count (/datos/proveedores/proveedor)

Page 20: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XML

Consulta con “uniones”Obtener el nombre de los proyectos cuya ciudad sea Paris y que reciban una cantidad de partes > 350.

Page 21: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Ejercicios Base de Datos proveedores.XML

Paso 0: análisis

La cantidad de partes está en las filas (elementos XML) suministrapero el nombreproyecto está en las filas proyecto. Será necesario «cruzar» elementos proyecto con elementos suministra usando como condición que @numproyecto de los elementos proyecto sea igual a los campos numproyecto de los elementos suministra

Datos

proveedores

partes

proyectos

suministros

nombre

estado

ciudad

@numprov

@numpartenombrepartecolorpesociudad

@numproyectonombreproyectociudad

numprovnumpartenumproyectocantidad

proveedor

parte

proyecto

suministra

Page 22: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XMLPaso 1: Se hace el cruce

Una primera aproximación sería esta:

for $suministra in

/datos/suministros/suministra

for $proyecto in

/datos/proyectos/proyecto

where $suministra/numproyecto = $proyecto/@numproyecto

return $proyecto/nombreproyecto

Devuelve «todos los proyectos» que aparecen

en la tabla suministra

Page 23: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XMLPaso 2: añadir condiciones

La tabla suministra debe ser mayor de 350, en el where o en el for de suministra se añade una condición de filtrado:

Asimismo se filtran los proyectos cuyo campo ciudad sea Paris.

for $suministra in

/datos/suministros/suministra[cantidad>350]

for $proyecto in

/datos/proyectos/proyecto[ciudad="Paris"]

where $suministra/numproyecto = $proyecto/@numproyecto

return $proyecto/nombreproyecto

Page 24: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XMLOfor $suministra in

/datos/suministros/suministra

for $proyecto in

/datos/proyectos/proyecto

where $suministra/numproyecto = $proyecto/@numproyecto

and

$suministra/cantidad > 350

and

$proyecto/ciudad="Paris"

return $proyecto/nombreproyecto

Page 25: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XMLConsulta: ciudades iguales

Obtener los nombres de proyecto y nombres de parte que estén en la misma ciudad.

Datos

proveedores

partes

proyectos

suministros

nombre

estado

ciudad

@numprov

@numpartenombrepartecolorpesociudad

@numproyectonombreproyectociudad

numprovnumpartenumproyectocantidad

proveedor

parte

proyecto

suministra

Page 26: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Bases de datos no estructuradas - XMLConsulta: ciudades iguales

Obtener los nombres de proyecto y nombres de parte que estén en la misma ciudad.

for $proyecto in

/datos/proyectos/proyecto

for $parte in

/datos/partes/parte

where

$parte/ciudad = $proyecto/ciudad

return concat(

$parte/nombreparte, " en la misma ciudad que ",

$proyecto/nombreproyecto, “- “, $parte/ciudad

)

Page 27: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Consulta: partes con colores iguales

Obtener parejas de partes que tengan el mismo color (indicando el nombre de ambas partes y el color que comparten)

Datos

proveedores

partes

proyectos

suministros

nombre

estado

ciudad

@numprov

@numpartenombrepartecolorpesociudad

@numproyectonombreproyectociudad

numprovnumpartenumproyectocantidad

proveedor

parte

proyecto

suministra

Page 28: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Consulta: partes con colores iguales

Obtener parejas de partes que tengan el mismo color (indicando el nombre de ambas partes y el color que comparten)

for $p1 in

/datos/partes/parte

for $p2 in

/datos/partes/parte

where

$p1/color = $p2/color

return concat ($p1/nombreparte,

" tiene el mismo color que ",

$p2/nombreparte,

"el color es:",

$p1/color, "

")

Page 29: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Para mejorar la consulta, vamos a eliminar parejas en la cuales el numparte sea el mismo, es decir no vamos a contemplar el emparejar una parte consigo misma.

for $p1 in

/datos/partes/parte

for $p2 in

/datos/partes/parte

where

$p1/color = $p2/color

and

$p1/@numparte != $p2/@numparte

return concat ($p1/nombreparte,

" tiene el mismo color que ",

$p2/nombreparte,

" en concreto el color es:",

$p1/color, "

")

Page 30: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Consulta: cantidad de partes de Londres

Cuántas partes existen cuya ciudad sea «Londres», es decir, el total de filas de la «tabla» partes pero teniendo en cuenta la condición de que el «campo» ciudad debe ser Londres.

count (/datos/partes/parte[ciudad='Londres'])

Page 31: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Consulta: La media de la cantidad de partes que aparecen en la «tabla» suministra

avg (/datos/suministros/suministra/cantidad)

Page 32: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Consulta: media de partes rojas

La media de partes suministradas cuyo color sea “Rojo”.

Datos

proveedores

partes

proyectos

suministra

nombre

estado

ciudad

@numprov

@numpartenombrepartecolorpesociudad

@numproyectonombreproyectociudad

numprovnumpartenumproyectocantidad

Page 33: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Consulta: media de partes rojas

La media de partes suministradas cuyo color sea “Rojo”.

Paso 1: cruce de tablas

for $parte in

/datos/partes/parte

for $suministra in

/datos/suministros/suministra

where

$parte/@numparte = $suministra/numparte

Page 34: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Paso 2: añadir condicion de filtrado

for $parte in

/datos/partes/parte

for $suministra in

/datos/suministros/suministra

where

$parte/@numparte = $suministra/numparte

and

$parte/color='Rojo'

return $suministra/cantidad

Page 35: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Ó

for $parte in

/datos/partes/parte[color='Rojo']

for $suministra in

/datos/suministros/suministra

where

$parte/@numparte = $suministra/numparte

return $suministra/cantidad

Page 36: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Paso 3: calcular la media

avg (

for $parte in

/datos/partes/parte[color='Rojo']

for $suministra in

/datos/suministros/suministra

where

$parte/@numparte = $suministra/numparte

return $suministra/cantidad

)

Page 37: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Ejercicio:

Consulta: suministros en grandes cantidades

Extraer el nombre de los proyectos (sin que haya repeticiones) que reciban una cantidad en la tabla suministra mayor de 650.

Page 38: Manejadores de Bases de Datos · 2020. 6. 24. · Ejercicios Base de Datos proveedores.XML Paso 0: análisis La cantidad de partes está en las filas (elementos XML) suministra pero

Facultad de Estadística e Informática

Manejadores de Bases de Datos

Gracias por su atención