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:
- Nombre de la universidad.
- Pais de la universidad.
- Nombres de las carreras.
- Años de plan de estudio de las carreras.
- Nombres de todos los alumnos.
- Identificadores de todas las carreras.
- Datos de la carrera cuyo id es
c01
. - Centro en que se estudia de la carrera cuyo id es
c02
. - Nombre de las carreras que tengan subdirector.
- Nombre de los alumnos que estén haciendo proyecto.
- Códigos de las carreras en las que hay algún alumno matriculado.
- Apellidos y nombre de los alumnos con beca.
- Nombre de las asignaturas de la titulación
c04
. - Nombre de las asignaturas de segundo trimestre.
- Nombre de las asignaturas que no tienen 4 créditos teóricos.
- Código de la carrera que estudia el último alumno.
- Código de las asignaturas que estudian mujeres.
- Nombre de los alumnos que están matriculados en la asignatura
a02
. - Códigos de las carreras que estudian los alumnos matriculados en alguna asignatura.
- Apellidos de todos los hombres.
- Nombre de la carrera que estudia Víctor Manuel.
- Nombre de las asignaturas que estudia Luisa.
- Primer apellido de los alumnos matriculados en Ingeniería del Software.
- Nombre de las carreras que estudian los alumnos matriculados en la asignatura Tecnología de los Alimentos.
- Nombre de los alumnos matriculados en carreras que no tienen subdirector.
- Nombre de las alumnos matriculados en asignaturas con 0 créditos prácticos y que estudien la carrera de I.T. Informática.
- Nombre de los alumnos que estudian carreras cuyos planes son anteriores a 2002.
Solución
- Nombre de la universidad.
/universidad/nombre/text()
- Pais de la universidad.
/universidad/pais/text()
- Nombres de las carreras.
/universidad/carreras/carrera/nombre/text()
- Años de plan de estudio de las carreras.
distinct-values(/universidad/carreras/carrera/plan/text())
- Nombres de todos los alumnos.
/universidad/alumnos/alumno/nombre/text()
- Identificadores de todas las carreras.
/universidad/carreras/carrera/@id
- Datos de la carrera cuyo id es
c01
.
/universidad/carreras/carrera[@id="c01"]
- Centro en que se estudia de la carrera cuyo id es
c02
.
/universidad/carreras/carrera[@id="c02"]/centro/text()
- Nombre de las carreras que tengan subdirector.
/universidad/carreras/carrera[exists(subdirector)]/nombre/text()
- Nombre de los alumnos que estén haciendo proyecto.
/universidad/alumnos/alumno[exists(estudios/proyecto)]/nombre/text()
- Códigos de las carreras en las que hay algún alumno matriculado.
distinct-values(/universidad/alumnos/alumno/estudios/carrera/@codigo)
- 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()
- Nombre de las asignaturas de la titulación
c04
.
/universidad/asignaturas/asignatura[@titulacion="c04"]/nombre/text()
- Nombre de las asignaturas de segundo trimestre.
/universidad/asignaturas/asignatura[trimestre="2"]/nombre/text()
- Nombre de las asignaturas que no tienen 4 créditos teóricos.
/universidad/asignaturas/asignatura[creditos_teoricos!="4"]/nombre/text()
- Código de la carrera que estudia el último alumno.
/universidad/alumnos/alumno[last()]/estudios/carrera/@codigo
- Código de las asignaturas que estudian mujeres.
distinct-values(/universidad/alumnos/alumno[sexo="Mujer"]/estudios/asignaturas/asignatura/@codigo)
- Nombre de los alumnos que están matriculados en la asignatura
a02
.
/universidad/alumnos/alumno[estudios/asignaturas/asignatura/@codigo="a02"]/nombre/text()
- 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
- Apellidos de todos los hombres.
/universidad/alumnos/alumno[sexo="Hombre"]/apellido1/text() | /universidad/alumnos/alumno[sexo="Hombre"]/apellido2/text()
- 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()
- Nombre de las asignaturas que estudia Luisa.
/universidad/asignaturas/asignatura[@id=/universidad/alumnos/alumno[nombre/text()="Luisa"]/estudios/asignaturas/asignatura/@codigo]/nombre/text()
- 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())
- 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()
- 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()
- 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()
- 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()