Saltar al contenido principal

Ejercicio 506

Consideremos el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<universidad>
<nombre>Universidad de Victoria</nombre>
<pais>España</pais>
<!-- CARRERAS -->
<carreras>
<carrera id="c01">
<nombre>I.T. Informática</nombre>
<plan>2003</plan>
<creditos>250</creditos>
<centro>Escuela de Informática</centro>
</carrera>
<carrera id="c02">
<nombre>Dipl. Empresariales</nombre>
<plan>2001</plan>
<creditos>275</creditos>
<centro>Facultad de Ciencias Sociales</centro>
</carrera>
<carrera id="c03">
<nombre>Dipl. Relaciones Laborales</nombre>
<plan>2001</plan>
<creditos>280</creditos>
<centro>Facultad de Ciencias Sociales</centro>
<subdirector>Alfonso Martín Luque</subdirector>
</carrera>
<carrera id="c04">
<nombre>Lic. Quimica</nombre>
<plan>2003</plan>
<creditos>175</creditos>
<centro>Facultad de Ciencias Experimentales</centro>
</carrera>
<carrera id="c05">
<nombre>Lic. Biología</nombre>
<plan>2001</plan>
<creditos>175</creditos>
<centro>Facultad de Ciencias Experimentales</centro>
</carrera>
<carrera id="c06">
<nombre>Lic. Humanidades</nombre>
<plan>1980</plan>
<creditos>475</creditos>
<centro>Facultad de Humanidades</centro>
</carrera>
</carreras>
<!-- ASIGNATURAS -->
<asignaturas>
<asignatura id="a01" titulacion="c01">
<nombre>Ofimática</nombre>
<creditos_teoricos>3</creditos_teoricos>
<creditos_practicos>1.5</creditos_practicos>
<trimestre>1</trimestre>
</asignatura>
<asignatura id="a02" titulacion="c01">
<nombre>Ingeniería del Software</nombre>
<creditos_teoricos>6</creditos_teoricos>
<creditos_practicos>1.5</creditos_practicos>
<trimestre>2</trimestre>
</asignatura>
<asignatura id="a03" titulacion="c02">
<nombre>Administración de Empresas</nombre>
<creditos_teoricos>4</creditos_teoricos>
<creditos_practicos>1.5</creditos_practicos>
<trimestre>1</trimestre>
</asignatura>
<asignatura id="a04" titulacion="c02">
<nombre>Derecho Internacional</nombre>
<creditos_teoricos>4</creditos_teoricos>
<creditos_practicos>5</creditos_practicos>
<trimestre>1</trimestre>
</asignatura>
<asignatura id="a05" titulacion="c04">
<nombre>Pedagogía</nombre>
<creditos_teoricos>4</creditos_teoricos>
<creditos_practicos>1.5</creditos_practicos>
<trimestre>2</trimestre>
</asignatura>
<asignatura id="a06" titulacion="c03">
<nombre>Didáctica</nombre>
<creditos_teoricos>4</creditos_teoricos>
<creditos_practicos>3</creditos_practicos>
<trimestre>2</trimestre>
</asignatura>
<asignatura id="a07" titulacion="c04">
<nombre>Tecnología de los Alimentos</nombre>
<creditos_teoricos>1.5</creditos_teoricos>
<creditos_practicos>7.5</creditos_practicos>
<trimestre>2</trimestre>
</asignatura>
<asignatura id="a08" titulacion="c01">
<nombre>Bases de Datos</nombre>
<creditos_teoricos>4.5</creditos_teoricos>
<creditos_practicos>5.5</creditos_practicos>
<trimestre>1</trimestre>
</asignatura>
<asignatura id="a09" titulacion="c06">
<nombre>Historia del Pensamiento</nombre>
<creditos_teoricos>6</creditos_teoricos>
<creditos_practicos>0</creditos_practicos>
<trimestre>2</trimestre>
</asignatura>
</asignaturas>
<!-- ALUMNOS -->
<alumnos>
<alumno id="e01">
<apellido1>Rivas</apellido1>
<apellido2>Santos</apellido2>
<nombre>Víctor Manuel</nombre>
<sexo>Hombre</sexo>
<estudios>
<carrera codigo="c01"/>
<asignaturas>
<asignatura codigo="a01"/>
<asignatura codigo="a03"/>
<asignatura codigo="a05"/>
<asignatura codigo="a09"/>
</asignaturas>
</estudios>
</alumno>
<alumno id="e02">
<apellido1>Pérez</apellido1>
<apellido2>García</apellido2>
<nombre>Luisa</nombre>
<sexo>Mujer</sexo>
<estudios>
<carrera codigo="c02"/>
<asignaturas>
<asignatura codigo="a02"/>
<asignatura codigo="a01"/>
</asignaturas>
<proyecto>Web de IBM.com</proyecto>
</estudios>
</alumno>
<alumno id="e03" beca="si">
<apellido1>Pérez</apellido1>
<apellido2>Romero</apellido2>
<nombre>Fernando</nombre>
<sexo>Hombre</sexo>
<estudios>
<carrera codigo="c02"/>
<asignaturas>
<asignatura codigo="a02"/>
<asignatura codigo="a01"/>
<asignatura codigo="a04"/>
<asignatura codigo="a09"/>
</asignaturas>
</estudios>
</alumno>
<alumno id="e04">
<apellido1>Avalón</apellido1>
<apellido2>Jiménez</apellido2>
<nombre>María</nombre>
<sexo>Mujer</sexo>
<estudios>
<carrera codigo="c01"/>
<asignaturas>
<asignatura codigo="a02"/>
<asignatura codigo="a01"/>
<asignatura codigo="a07"/>
</asignaturas>
<proyecto>Estudio de Salinidad del Pantano Iris</proyecto>
</estudios>
</alumno>
</alumnos>
</universidad>

Construye las expresiones XPath que permitan obtener los siguientes datos:

  1. Nombre de la universidad.
  2. Pais de la universidad.
  3. Nombres de las carreras.
  4. Años de plan de estudio de las carreras.
  5. Nombres de todos los alumnos.
  6. Identificadores de todas las carreras.
  7. Datos de la carrera cuyo id es c01.
  8. Centro en que se estudia de la carrera cuyo id es c02.
  9. Nombre de las carreras que tengan subdirector.
  10. Nombre de los alumnos que estén haciendo proyecto.
  11. Códigos de las carreras en las que hay algún alumno matriculado.
  12. Apellidos y nombre de los alumnos con beca.
  13. Nombre de las asignaturas de la titulación c04.
  14. Nombre de las asignaturas de segundo trimestre.
  15. Nombre de las asignaturas que no tienen 4 créditos teóricos.
  16. Código de la carrera que estudia el último alumno.
  17. Código de las asignaturas que estudian mujeres.
  18. Nombre de los alumnos que están matriculados en la asignatura a02.
  19. Códigos de las carreras que estudian los alumnos matriculados en alguna asignatura.
  20. Apellidos de todos los hombres.
  21. Nombre de la carrera que estudia Víctor Manuel.
  22. Nombre de las asignaturas que estudia Luisa.
  23. Primer apellido de los alumnos matriculados en Ingeniería del Software.
  24. Nombre de las carreras que estudian los alumnos matriculados en la asignatura Tecnología de los Alimentos.
  25. Nombre de los alumnos matriculados en carreras que no tienen subdirector.
  26. Nombre de las alumnos matriculados en asignaturas con 0 créditos prácticos y que estudien la carrera de I.T. Informática.
  27. Nombre de los alumnos que estudian carreras cuyos planes son anteriores a 2002.
Solución
  1. Nombre de la universidad.
/universidad/nombre/text()
  1. Pais de la universidad.
/universidad/pais/text()
  1. Nombres de las carreras.
/universidad/carreras/carrera/nombre/text()
  1. Años de plan de estudio de las carreras.
distinct-values(/universidad/carreras/carrera/plan/text())
  1. Nombres de todos los alumnos.
/universidad/alumnos/alumno/nombre/text()
  1. Identificadores de todas las carreras.
/universidad/carreras/carrera/@id
  1. Datos de la carrera cuyo id es c01.
/universidad/carreras/carrera[@id="c01"]
  1. Centro en que se estudia de la carrera cuyo id es c02.
/universidad/carreras/carrera[@id="c02"]/centro/text()
  1. Nombre de las carreras que tengan subdirector.
/universidad/carreras/carrera[exists(subdirector)]/nombre/text()
  1. Nombre de los alumnos que estén haciendo proyecto.
/universidad/alumnos/alumno[exists(estudios/proyecto)]/nombre/text()
  1. Códigos de las carreras en las que hay algún alumno matriculado.
distinct-values(/universidad/alumnos/alumno/estudios/carrera/@codigo)
  1. Apellidos y nombre de los alumnos con beca.
/universidad/alumnos/alumno[@beca="si"]/apellido1/text() | /universidad/alumnos/alumno[@beca="si"]/apellido2/text() | /universidad/alumnos/alumno[@beca="si"]/nombre/text()
  1. Nombre de las asignaturas de la titulación c04.
/universidad/asignaturas/asignatura[@titulacion="c04"]/nombre/text()
  1. Nombre de las asignaturas de segundo trimestre.
/universidad/asignaturas/asignatura[trimestre="2"]/nombre/text()
  1. Nombre de las asignaturas que no tienen 4 créditos teóricos.
/universidad/asignaturas/asignatura[creditos_teoricos!="4"]/nombre/text()
  1. Código de la carrera que estudia el último alumno.
/universidad/alumnos/alumno[last()]/estudios/carrera/@codigo
  1. Código de las asignaturas que estudian mujeres.
distinct-values(/universidad/alumnos/alumno[sexo="Mujer"]/estudios/asignaturas/asignatura/@codigo)
  1. Nombre de los alumnos que están matriculados en la asignatura a02.
/universidad/alumnos/alumno[estudios/asignaturas/asignatura/@codigo="a02"]/nombre/text()
  1. Códigos de las carreras que estudian los alumnos matriculados en alguna asignatura.
/universidad/carreras/carrera[@id=/universidad/alumnos/alumno/estudios[exists(asignaturas/asignatura)]/carrera/@codigo]/@id
  1. Apellidos de todos los hombres.
/universidad/alumnos/alumno[sexo="Hombre"]/apellido1/text() | /universidad/alumnos/alumno[sexo="Hombre"]/apellido2/text()
  1. Nombre de la carrera que estudia Víctor Manuel.
/universidad/carreras/carrera[@id=/universidad/alumnos/alumno[nombre/text()="Ví­ctor Manuel"]/estudios/carrera/@codigo]/nombre/text()
  1. Nombre de las asignaturas que estudia Luisa.
/universidad/asignaturas/asignatura[@id=/universidad/alumnos/alumno[nombre/text()="Luisa"]/estudios/asignaturas/asignatura/@codigo]/nombre/text()
  1. Primer apellido de los alumnos matriculados en Ingeniería del Software.
distinct-values(/universidad/alumnos/alumno[estudios/asignaturas/asignatura/@codigo=/universidad/asignaturas/asignatura[nombre/text()="Ingeniería del Software"]/@id]/apellido1/text())
  1. Nombre de las carreras que estudian los alumnos matriculados en la asignatura Tecnología de los Alimentos.
/universidad/carreras/carrera[@id=/universidad/alumnos/alumno/estudios[asignaturas/asignatura/@codigo=/universidad/asignaturas/asignatura[nombre/text()="Tecnología de los Alimentos"]/@id]/carrera/@codigo]/nombre/text()
  1. Nombre de los alumnos matriculados en carreras que no tienen subdirector.
/universidad/alumnos/alumno[estudios/carrera/@codigo=/universidad/carreras/carrera[not(exists(subdirector))]/@id]/nombre/text()
  1. Nombre de las alumnos matriculados en asignaturas con 0 créditos prácticos y que estudien la carrera de I.T. Informática.
/universidad/alumnos/alumno[estudios[carrera/@codigo=/universidad/carreras/carrera[nombre/text()="I.T. Informática"]/@id]/asignaturas/asignatura/@codigo=/universidad/asignaturas/asignatura[creditos_practicos="0"]/@id]/nombre/text()
  1. Nombre de los alumnos que estudian carreras cuyos planes son anteriores a 2002.
/universidad/alumnos/alumno[estudios/carrera/@codigo=/universidad/carreras/carrera[plan<2002]/@id]/nombre/text()