domingo, 10 de enero de 2010

C-Ejemplos de consultas XQuery

Dentro del trabajo de web semantica en el Master ISIA tuve que buscar informacion sobre consultas XQuery. Casi toda la información esta en ingles y aun asi habia cosas de las que no encontraba ejemplos.
Como ayuda para gente que este buscando informacion en español, os dejo unos cuantos ejemplos de consultas.
El XML sobre el que me baso para las consultas es este, aunque os lo dejo resumido para dejar un objeto de cada y no dejaros un tocho que lo mismo no os hace falta.

<MASTERISIA>

  <FEDERACIONES>

    <IDFEDERACION>2</IDFEDERACION>

    <NOMBRE>MURCIANA</NOMBRE>

    <DIRECCION>HUERTA DE LA PESETA, 1</DIRECCION>

    <TELEFONO>943232323</TELEFONO>

  </FEDERACIONES>

  <CLUBES>

    <IDCLUB>41</IDCLUB>

    <NOMBRE>BAHIA DE MALAGA</NOMBRE>

    <FEDERACION>1</FEDERACION>

    <DIRECCION>C/ TOBOSO, 13</DIRECCION>

    <TELEFONO>952952952</TELEFONO>

  </CLUBES>

  <TROFEOS>

    <IDTROFEO>22</IDTROFEO>

    <CLUB>21</CLUB>

    <NOMBRE>TROFEO MARCHA VILLA DE NERJA</NOMBRE>

    <FECHA>2009-10-04T00:00:00.000</FECHA>

    <PREMIO>500</PREMIO>

  </TROFEOS>

  <MIEMBROS>

    <IDMIEMBRO>42</IDMIEMBRO>

    <APELLIDOS>ANDRADES MARTIN</APELLIDOS>

    <CLUB>21</CLUB>

    <NOMBRE>LUIS</NOMBRE>

    <DIRECCION>C/ VERONICA, 9</DIRECCION>

    <NACIONALIDAD>ESPAÑOL</NACIONALIDAD>

    <TELEFONO>999666333</TELEFONO>

  </MIEMBROS>

  <ATLETAS>

    <IDATLETA>4</IDATLETA>

    <MIEMBRO>81</MIEMBRO>

    <CATEGORIA>SENIOR</CATEGORIA>

    <ENTRENADOR>1</ENTRENADOR>

    <ALTURA>175</ALTURA>

    <PESO>70</PESO>

  </ATLETAS>

  <ENTRENADORES>

    <IDENTRENADOR>1</IDENTRENADOR>

    <MIEMBRO>21</MIEMBRO>

    <ESPECIALIDAD>LANZAMIENTOS</ESPECIALIDAD>

    <NIVEL>NACIONAL</NIVEL>

  </ENTRENADORES>

  <GESTORES>

    <IDGESTOR>1</IDGESTOR>

    <MIEMBRO>61</MIEMBRO>

    <CARGO>PRESIDENTE</CARGO>

    <CONVOTO>SI</CONVOTO>

  </GESTORES>

  <JUECES>

    <IDJUEZ>1</IDJUEZ>

    <MIEMBRO>41</MIEMBRO>

    <ESPECIALIDAD>LANZAMIENTOS</ESPECIALIDAD>

    <NIVEL>REGIONAL</NIVEL>

  </JUECES>

  <PATROCINADORES>

    <IDPATROCINADOR>1</IDPATROCINADOR>

    <MIEMBRO>82</MIEMBRO>

    <DONACION>1000</DONACION>

  </PATROCINADORES>

  <SOCIOS>

    <IDSOCIO>1</IDSOCIO>

    <MIEMBRO>42</MIEMBRO>

    <CUOTA>100</CUOTA>

  </SOCIOS>

  <COMPETICIONES>

    <IDCOMPETICION>2</IDCOMPETICION>

    <FECHA>2009-11-20T00:00:00.000</FECHA>

    <ATLETA>4</ATLETA>

    <MARCA>2:20.80</MARCA>

    <PRUEBA>800 M.L.</PRUEBA>

  </COMPETICIONES>

  <TESTS>

    <IDTEST>2</IDTEST>

    <FECHA>2009-08-15T00:00:00.000</FECHA>

    <ATLETA>4</ATLETA>

    <PRUEBA>1000 M.L.</PRUEBA>

    <MARCA>3:30.29</MARCA>

  </TESTS>

  <MASTERISIA>





-Seleccionar la lista de todas las Federaciones.
for $a in doc("basedatosw1.xml")//MASTERISIA/FEDERACIONES
order by $a/NOMBRE ascending
return $a

-Seleccionar la lista de clubes, indicando el nombre de la Federacion a la que pertenecen.
for $a in doc("basedatosw1.xml")//MASTERISIA/CLUBES,
$b in doc("basedatosw1.xml")//MASTERISIA/FEDERACIONES
where $b/IDFEDERACION =$a/FEDERACION
order by $a/NOMBRE ascending
return {$a/NOMBRE, $a/DIRECCION, $a/TELEFONO, $b/NOMBRE}

-Seleccionar los trofeos que tienen cada club:
for $a in doc("basedatosw1.xml")//MASTERISIA/CLUBES, $b in doc("basedatosw1.xml")//MASTERISIA/TROFEOS
where $b/CLUB=$a/IDCLUB
order by $a/NOMBRE ascending
return {$a/NOMBRE, $b/NOMBRE, $b/FECHA}

-Seleccionar la lista de atletas, indicando cuales son los datos personales (nombre y apellidos) de sus respectivos entrenadores:
for $a in doc("basedatosw1.xml")//MASTERISIA/ATLETAS,
$b in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS,
$c in doc("basedatosw1.xml")//MASTERISIA/ENTRENADORES,
$d in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS
where $a/MIEMBRO=$b/IDMIEMBRO
and $a/ENTRENADOR=$c/IDENTRENADOR
and $c/MIEMBRO=$d/IDMIEMBRO
order by $b/APELLIDOS ascending
return {$a/IDATLETA, $a/MIEMBRO, $b/NOMBRE, $b/APELLIDOS, $a/ALTURA, $a/PESO, $a/ENTRENADOR, $d/NOMBRE, $d/APELLIDOS}

-Seleccionar y ordenar las marcas de los atletas en 800 m.l.
for $a in doc("basedatosw1.xml")//MASTERISIA/ATLETAS,
$b in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS,
$c in doc("basedatosw1.xml")//MASTERISIA/COMPETICIONES
where $a/MIEMBRO=$b/IDMIEMBRO
and $a/IDATLETA=$c/ATLETA
and $c/PRUEBA="800 M.L."
order by $c/MARCA ascending
return {$b/NOMBRE, $b/APELLIDOS, $c/FECHA, $c/PRUEBA, $c/MARCA}

-Seleccionar los ingresos que tiene cada club (donación de patrocinadores y cuotas de socios). (Patrocinadores y socios tienen estructura diferente, pero se pueden reagrupar a traves de un campo de cantidad mediante la primera instruccion):
for $a in doc("basedatosw1.xml")//MASTERISIA/(PATROCINADORES | SOCIOS),
$b in doc("basedatosw1.xml")//MASTERISIA/CLUBES,
$c in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS
where $b/IDCLUB=$c/CLUB
and $c/IDMIEMBRO=$a/MIEMBRO
order by $b/NOMBRE
return
{$c/NOMBRE, $c/APELLIDOS, $b/NOMBRE, $a/DONACION, $a/CUOTA}

-Seleccionar los miembros extranjeros de cada club
for $a in doc("basedatosw1.xml")//MASTERISIA/CLUBES,
$b in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS
where $a/IDCLUB=$b/CLUB
and $b/NACIONALIDAD!="ESPANOL"
order by $a/NOMBRE
return
{$b/NOMBRE, $b/APELLIDOS, $a/NOMBRE, $b/NACIONALIDAD}

-Seleccionar los jueces que tiene cada Federación en la especialidad de Marcha:
for $a in doc("basedatosw1.xml")//MASTERISIA/FEDERACIONES,
$b in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS,
$c in doc("basedatosw1.xml")//MASTERISIA/CLUBES,
$d in doc("basedatosw1.xml")//MASTERISIA/JUECES
where $d/ESPECIALIDAD='MARCHA'
and $b/CLUB=$c/IDCLUB
and $d/MIEMBRO=$b/IDMIEMBRO
and $c/FEDERACION=$a/IDFEDERACION
return
{$d/ESPECIALIDAD, $b/NOMBRE, $b/APELLIDOS, $a/NOMBRE}

-Seleccionar los entrenadores con especialidad en Lanzamientos:
for $a in doc("basedatosw1.xml")//MASTERISIA/ENTRENADORES,
$b in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS
where $a/MIEMBRO=$b/IDMIEMBRO
and $a/ESPECIALIDAD="LANZAMIENTOS"
return
{$a/ESPECIALIDAD, $b/NOMBRE, $b/APELLIDOS}

-Seleccionar el nombre y teléfono de los gestores del club Bahía de Málaga:
for $a in doc("basedatosw1.xml")//MASTERISIA/CLUBES,
$b in doc("basedatosw1.xml")//MASTERISIA/GESTORES,
$c in doc("basedatosw1.xml")//MASTERISIA/MIEMBROS
where $b/MIEMBRO=$c/IDMIEMBRO
and $c/CLUB=$a/IDCLUB
and $a/NOMBRE="BAHIA DE MALAGA"
return
{ $c/NOMBRE, $c/APELLIDOS, $c/TELEFONO}

1 comentario:

  1. Gracias por compartir tu conocimiento y experiencias !
    Podrías colocar un ejemplo de estas consultas dentro de un html html? o la estructura del xquery dentro de una página.
    Un saludo.

    ResponderEliminar