XQUERY
Created @February 8, 2024 4:14 PM
Tags
Ejercicio 1
Mostrar una lista de nombre de juegos cuyo contador de usuarios no
contenga ningún valor (NA).
for $game in /games/game
where $game/user_count = "NA"
return data($game/name)
Ejercicio 2:
Mostrar los nombres de los juegos cuyo género sea distinto a “Misc”.
let $games:=datdoc("games.xml")
for $name in $games/games/game/name
where $name/@genre!="Misc"
return data($name)
for $game in/games/game
where data($game/name/@genre)!="Misc"
return data($game/name)
Ejercicio 3:
Selecciona aquellas plataformas de los videojuegos desarrollados
por Nintendo.
XQUERY 1
distinct-values(
for $game in /games/game
where $game/developer = "Nintendo"
return data($game/platform)
)
Ejercicio 4:
Muestra el número de jugadores en Japón de aquellos juegos cuyo
desarrollador sea “Good Science Studio”.
for $game in/games/game
where $game/developer ="Good Science Studio"
return $game/jp_players
Ejercicio 5:
Muestra los nombres de los videojuegos ordenados por año de
lanzamiento.
for $game in/games/game
where $game/name/@year!='N/A'
order by $game/name/@year descending
return concat(data($game/name), " (Año ", $game/name/@year, "
Ejercicio 6:
Muestra aquellas compañías “publisher” de cada videojuego, pero
ordena los resultados por las evaluaciones de los usuarios.
for $game in/games/game
order by $game/user_score descending
where $game/user_score != "tbd"
return concat(data($game/name), " Publisher: " ,$game/publis
XQUERY 2
"TBD" significa "To Be Determined" o "Por Determinar". Se usa cuando la
puntuación de un juego aún no ha sido determinada o no está disponible en el
momento en que se realiza la consulta.
EJERCICIOS INVENTADOS
EJ1
Nombre y año de lanzamiento de todos los juegos
for $game in //game
return concat(data($game/name)," => Año de lanzamiento: ",
EJ2
Juegos lanzados después de 2010
for $game in/games/game
where $game/name/@year!='N/A'and $game/name/@year > 2010
order by $game/name/@year ascending
return concat(data($game/name), " => ", $game/name/@year)
no sale si pones primero >2010 y luego ≠ N/A
EJ3
Muestra el número total de juegos publicados por "Electronic Arts".
let $games := doc("games.xml")
let $num_publicados := count($games/games/game[publisher = "El
return $num_publicados
let $games := /games/game
let $num_publicados := count($games[publisher = "Electronic A
return $num_publicados
XQUERY 3
7️⃣ Crea un elemento llamado “libro” que contenga el nombre del
desarrollador del juego “Wii Sports”
for $i in games/game
where $i/name = "Wii Sports"
return <libro>{data($i/developer)}</libro>
Para crear un elemento nuevo dentro de un nodo, escribimos la consulta
normal, para seleccionar concretamente dónde queremos introducirlo, y lo
creamos mediante el return.
💡 return <nombreNuevoElemento>
</nombreNuevoElemento>
{data($i/contenidoDelElemento)}
8️⃣ Por cada juego cuyo número de jugadores totales sea superior a 12,
crea un elemento llamado “plataforma” que contenga el nombre de
la plataforma.
for $i in games/game
where $i/global_players > 12
return element plataforma {data($i/platform)}
Otra manera de crear un elemento es usando ‘’Element’’, donde nos ahorramos
definir el nuevo elemento con <>.
9️⃣ Crea un elemento llamado “libro” que contenga el desarrollador del
juego con id “2007”.
XQUERY 4
for $i in games/game
where $i/@id = "2007"
return element libroo {data($i/developer)}
🔟 Crea un elemento llamado “element” que contenga el número total
de jugadores del juego llamado “Kinect Adventures!”.
for $i in games/game
where $i/name = "Kinect Adventures!"
return element element {data($i/global_players)}
for $i in games/game
where $i/name = "Kinect Adventures!"
return <element> {data($i/global_players)} </element>
1️⃣ Muestra los videojuegos lanzados en el año 2012.
for $i in games/game
where $i/name/@year = "2012"
return $i/name
2️⃣ Crea una lista de elementos con nombre “videojuego”, que contenga
el “id” de aquellos videojuegos lanzados en el año 2000.
XQUERY 5
let $list := (
for $i in games/game
where $i/name/@year = "2000"
return element videojuego {data($i/@id)}
) return $list
En este caso no tengo que especificar en el return
$i/game/@id y simplemente puedo poner
$i/@id porque me he quedado en el for justo en el nodo game,
automaticamente que debe buscar el atributo de game
3️⃣ Muestra una lista de elementos “videojuego” que contengan el
nombre de los videojuegos cuyos ids se comprenden entre los
valores 100-200 (ambos inclusive).
let $list := (
for $i in games/game
where $i/@id >= 100 and $i/@id <= 200
return element videojuego {data($i/name)}
) return $list
Observamos la comparacion, si tenemos un rango de valores para id entonces
escribimos la variable en cuestion, la comparamos, añadimos un and, y
ponemos la segunda comparación.
XQUERY 6
4️⃣ ¿Cuáles son los nombres de los videojuegos que han sido publicados
por “Microsoft Game Studios” con el género “Misc” en el 2010?
let $list := (
for $i in games/game
where $i/publisher = "Microsoft Game Studios" and $i/name/@g
return element consulta {data($i/name)}
) return $list
He creado una lista para practicar pero no lo pide.
for $i in games/game
where $i/publisher = "Microsoft Game Studios" and $i/name/@ge
return $i/name/text()
5️⃣ ¿Cuántos videojuegos tienen distinto valor en el campo “publisher” y
en “developer”
let $list :=(
for $i in games/game
where $i/publisher != $i/developer
return $i/name
) return count ($list)
Para utilizar la función count, debemos hacer una lista, y el return poner
count ($list).
XQUERY 7
Consultas de Examen
1️⃣ El nombre de los videojuegos cuya fecha de lanzamiento esté entre el
2000 y el 2005
(ambos incluidos).
for $i in games/game
where $i/name/@year >= "2000" and $i/name/@year <= "2005"
return $i/name
2️⃣ El nombre de los videojuegos desarrollados por al menos un estudio
(desarrollador) español (sin ninguna etiqueta de apertura/cierre en el
resultado).
for $i in videojuegos/videojuego
where $i/desarrolladores/desarrollador/@pais = "España"
return $i/nombre/text()
3️⃣ El número de juegos de cada género (función fn:count()).
let $generos := distinct-values(//genero)
for $i in $generos
return ($i, fn:count(//videojuego[genero = $i]))
4️⃣ La suma de las horas jugadas de todos los videojuegos (función
fn:sum()).
XQUERY 8
sum(//videojuegos/videojuego/horas_jugadas)
let $total_horas := sum(//videojuegos/videojuego/horas_jugada
return $total_horas
XQUERY 9