Exercicios de XPath
Sumario
Ferramentas
Cando queiramos asegurarnos de que estamos escribindo correctamente a expresión XPath que precisamos existen aplicacións específicas para a avaliación das mesmas. Estas aplicacións son pequenas, lixeiras e ofrecen algunhas funcionalidades específicas para o fin que perseguen.
Algunhas son aplicacións independentes; e existen tamén aplicacións web ou extensións para o navegador que se avalían sobre o documento que teñamos aberto.
Tamén podemos empregar para avaliar expresións XPath aplicacións de edición de documentos XML que aporten esta funcionalidade, como aquelas que vimos no tema dedicado a XML.
Para a resolución exercicios na clase empregaremos XML copy editor; tes indicacións de cómo facelo.
Podes revisar, analizar outras ferramentas de avaliación de XPath se o consideras convinte.
XPath con escenario de ciclos de fp, módulos e alumnado
<?xml version="1.0" encoding="utf-8"?>
<!-- centro.xml -->
<centro>
<ciclo id="ASIR" grao="CS">
<módulo id="MP0370">
<nome>Planificación e administración de redes</nome>
<horas>213</horas>
</módulo>
<módulo id="MP0371">
<nome>Fundamentos hardware</nome>
<horas>107</horas>
</módulo>
<módulo id="MP0373">
<nome>Linguaxes de marcas e sistemas de xestión de información</nome>
<horas>70</horas>
</módulo>
<módulo id="MP0375">
<nome>Servizos de rede e Internet</nome>
<horas>140</horas>
</módulo>
<alumno id="AL0319">
<nome_apelidos>Xoan Cancedo da Foz</nome_apelidos>
<datanacemento>06/11/1991</datanacemento>
<observacións>Xa fixo outro ciclo</observacións>
<cursa id="MP0370" />
<cursa id="MP0371" nota="8" />
</alumno>
<alumno id="AL0324">
<nome_apelidos>María Penedo Suárez</nome_apelidos>
<datanacemento>26/07/1993</datanacemento>
<cursa id="MP0370" nota="9" />
<cursa id="MP0374" nota="4" />
<cursa id="MP0375" />
</alumno>
</ciclo>
<ciclo id="DAW" grao="CS">
<módulo id="MP0373">
<nome>Linguaxes de marcas e sistemas de xestión de información</nome>
<horas>70</horas>
</módulo>
<módulo id="MP0484">
<nome>Bases de datos</nome>
<horas>105</horas>
</módulo>
<módulo id="MP0485">
<nome>Programación</nome>
<horas>135</horas>
</módulo>
<alumno id="AL0497">
<nome_apelidos>Mario Fernández Salvado</nome_apelidos>
<datanacemento>03/08/1993</datanacemento>
<cursa id="MP0373" />
<cursa id="MP0484" />
<cursa id="MP0485" />
</alumno>
<alumno id="AL0324">
<nome_apelidos>María Penedo Suárez</nome_apelidos>
<datanacemento>26/07/1993</datanacemento>
<observacións>Traballa polas tardes</observacións>
<cursa id="MP0373" nota="7" />
<cursa id="MP0484" nota="8" />
</alumno>
</ciclo>
</centro>
Escribe as expresións XPath para obter os seguintes conxuntos de nodos:
- a) Os nomes e apelidos do alumnado do ciclo "ASIR".
- b) A suma das horas dos módulos do ciclo "ASIR".
- c) Os "id" dos ciclos nos que se imparta o módulo con código "MP0373".
- d) Os alumnos nados despois do ano 1992.
- e) Os alumnos que non teñan "observacións".
- f) Os alumnos que teñan algún módulo suspenso ("nota" < 5).
- g) Os "id" dos alumnos que están matriculados nalgún módulo pero todavía non teñen "nota".
- h) Os alumnos que non teñen ningún módulo aprobado.
- i) O "id" do último ciclo que figure no documento.
- j) A media das notas da alumna "María Penedo Suárez" no ciclo "DAW".
Solución
XPath con escenario de equipamento informático (básico)
<?xml version="1.0" encoding="utf-8"?>
<equipos>
<máquina nome="PC017">
<hardware>
<tipo>PC Sobremesa</tipo>
<fabricante>Dell</fabricante>
<procesador marca="Intel" num_nucleos="4" velocidade="3,1">i7</procesador>
<memoria tecnoloxía="DDR3">8</memoria>
<disco tecnoloxía="SATA" capacidade="2000"/>
<gravadora tipo="DVD"/>
</hardware>
<config>
<OS>Windows 7</OS>
<IP>192.168.20.105</IP>
<gateway>192.168.20.1</gateway>
</config>
</máquina>
<máquina nome="GALILEO">
<hardware>
<tipo>Torre</tipo>
<fabricante>Fujitsu-Siemens</fabricante>
<procesador marca="Intel" num_nucleos="4" velocidade="3">Xeon</procesador>
<memoria tecnoloxía="DDR2">2</memoria>
<disco tecnoloxía="SCSI" capacidade="200"/>
<disco tecnoloxía="SCSI" capacidade="200"/>
<disco tecnoloxía="SCSI" capacidade="200"/>
<lectora tipo="DVD"/>
</hardware>
<config>
<role>Servidor de dominio</role>
<OS>Windows 2008 Server R2</OS>
<IP>192.168.20.10</IP>
<gateway>192.168.20.1</gateway>
</config>
</máquina>
</equipos>
Rutas de localización sinxelas
Obtén as rutas de localización para obter os seguintes conxuntos de nodos:
- As máquinas que contén o documento.
- A información correspondente ao hardware das máquinas.
- A información de configuración das máquinas.
- A lista de fabricantes dos equipos.
- A lista de discos que conteñen.
- Os enderezos IP.
Rutas de localización con diversos eixos
Escribe as expresións XPath para obter os seguintes conxuntos de nodos:
- Os nomes das máquinas.
- Os nomes das máquinas que teñan gravadora óptica.
- O sistema operativo das máquinas nas que figure o "role".
Solución
XPath con escenario de equipamento informático (avanzado)
<?xml version="1.0" encoding="utf-8"?>
<equipos>
<máquina nome="PC017">
<hardware>
<tipo>PC Sobremesa</tipo>
<fabricante>Dell</fabricante>
<procesador marca="Intel" num_nucleos="4" velocidade="3.1">i7</procesador>
<memoria tecnoloxía="DDR3">8</memoria>
<disco tecnoloxía="SATA" capacidade="2000"/>
<gravadora tipo="DVD"/>
</hardware>
<config>
<OS>Windows 7</OS>
<IP>192.168.20.105</IP>
<gateway>192.168.20.1</gateway>
</config>
</máquina>
<máquina nome="PC053">
<hardware>
<tipo>Semitorre</tipo>
<memoria>0.5</memoria>
<disco capacidade="40"/>
<lectora tipo="CD"/>
</hardware>
<config>
<OS>Windows XP</OS>
</config>
</máquina>
<máquina nome="PC007">
<hardware>
<tipo>Semitorre</tipo>
<memoria tecnoloxía="DDR">0.5</memoria>
<disco capacidade="40"/>
<lectora tipo="CD"/>
</hardware>
<config>
<OS>Windows XP</OS>
</config>
<notas>Sin tarxeta de rede</notas>
</máquina>
<máquina nome="PR003">
<hardware>
<tipo>Impresora Inyección</tipo>
<fabricante>Lexmark</fabricante>
</hardware>
<config/>
</máquina>
<máquina nome="PC011">
<hardware>
<tipo>Semitorre</tipo>
<memoria>1</memoria>
<disco capacidade="80"/>
<lectora tipo="CD"/>
</hardware>
<config>
<OS>Windows 2000 SP4</OS>
<IP>192.168.10.221</IP>
</config>
</máquina>
<máquina nome="PC019">
<hardware>
<tipo>Semitorre</tipo>
<procesador marca="AMD" velocidade="1.4">Athlon</procesador>
<memoria>0.5</memoria>
<disco capacidade="40"/>
<gravadora tipo="CD"/>
</hardware>
<config>
<OS>Mandriva 2007</OS>
<IP>192.168.10.45</IP>
<gateway>192.168.10.1</gateway>
</config>
</máquina>
<máquina nome="PR007">
<hardware>
<tipo>Impresora Láser</tipo>
<fabricante>OKI</fabricante>
</hardware>
<config/>
<notas>Monocromo, dúplex, red</notas>
</máquina>
<máquina nome="COPERNICO">
<hardware>
<tipo>Torre</tipo>
<fabricante>Fujitsu-Siemens</fabricante>
<procesador marca="Intel" num_nucleos="4" velocidade="3">Xeon</procesador>
<memoria tecnoloxía="DDR">2</memoria>
<disco tecnoloxía="SCSI" capacidade="500"/>
<disco tecnoloxía="SCSI" capacidade="500"/>
<gravadora tipo="DVD"/>
</hardware>
<config>
<role>Servidor de dominio</role>
<OS>Windows 2003 Server R2</OS>
<IP>192.168.20.11</IP>
<gateway>192.168.20.1</gateway>
</config>
</máquina>
<máquina nome="GALILEO">
<hardware>
<tipo>Torre</tipo>
<fabricante>Fujitsu-Siemens</fabricante>
<procesador marca="Intel" num_nucleos="4" velocidade="3">Xeon</procesador>
<memoria tecnoloxía="DDR2">2</memoria>
<disco tecnoloxía="SCSI" capacidade="200"/>
<disco tecnoloxía="SCSI" capacidade="200"/>
<disco tecnoloxía="SCSI" capacidade="200"/>
<lectora tipo="DVD"/>
</hardware>
<config>
<role>Servidor de dominio</role>
<OS>Windows 2008 Server R2</OS>
<IP>192.168.20.10</IP>
<gateway>192.168.20.1</gateway>
</config>
</máquina>
<máquina nome="KEPLER">
<hardware>
<tipo>Rack</tipo>
<fabricante>HP</fabricante>
<procesador marca="Intel" num_nucleos="2" velocidade="3">Core2 Duo</procesador>
<memoria tecnoloxía="DDR2">4</memoria>
<disco tecnoloxía="SATA" capacidade="500"/>
<disco tecnoloxía="SATA" capacidade="500"/>
<disco tecnoloxía="SATA" capacidade="500"/>
<gravadora tipo="DVD"/>
</hardware>
<config>
<role>Servidor de arquivos</role>
<OS>Ubuntu 8.04 Server</OS>
<IP>192.168.10.10</IP>
<gateway>192.168.10.1</gateway>
</config>
</máquina>
<máquina nome="NEWTON">
<hardware>
<tipo>Rack</tipo>
<fabricante>HP</fabricante>
<procesador marca="Intel" num_nucleos="2" velocidade="3">Core2 Duo</procesador>
<memoria tecnoloxía="DDR2">4</memoria>
<disco tecnoloxía="SATA" capacidade="500"/>
<disco tecnoloxía="SATA" capacidade="500"/>
<gravadora tipo="DVD"/>
</hardware>
<config>
<role>Servidor web</role>
<OS>Ubuntu 8.04 Server</OS>
<IP>192.168.10.11</IP>
<gateway>192.168.10.1</gateway>
</config>
</máquina>
</equipos>
Rutas de localización con tests de nodo e predicados
Escribe as expresións XPath para obter os seguintes conxuntos de nodos.
- Os discos de tecnoloxía "SCSI".
- O nome do sistema operativo da máquina con IP "192.168.10.45".
- Os atributos que figuran nos procesadores da marca "AMD".
- Os textos (soamente) que figuran na configuración (elemento "config") do equipo de nome "COPERNICO".
- As máquinas de tipo "Semitorre" con sistema operativo "Windows XP".
- Os fabricantes das máquinas que teñan 4GB de memoria "DDR2".
- O sistema operativo das máquinas nas que figure o número de núcleos do procesador.
- Os nomes das máquinas que empreguen memoria con tecnoloxía "DDR2".
- As máquinas con procesador da marca "Intel" e gravadora de DVD.
- A configuración daquelas máquinas nas que figura un gateway.
Solución
<?xml version="1.0" encoding="utf-8"?>
<videoteca data_creación="24/02/2009">
<película id="1">
<importe moneda="dólar">13.56</importe>
<título>El santo</título>
<títuloorixinal>The Saint</títuloorixinal>
<ano>1997</ano>
<director>Phillip Noyce</director>
<xénero>Acción</xénero>
<duración>111</duración>
<!-- Elisabeth Shue -->
<actúa id="51"/>
<!-- Val Kilmer -->
<actúa id="156"/>
</película>
<película id="3">
<importe moneda="euro">22.18</importe>
<título>Leaving Las Vegas</título>
<títuloorixinal>Leaving Las Vegas</títuloorixinal>
<ano>1995</ano>
<director>Mike Figgis</director>
<xénero>Drama</xénero>
<duración>107</duración>
<!-- Nicolas Cage -->
<actúa id="187"/>
<!-- Elisabeth Shue -->
<actúa id="51"/>
</película>
<película id="4">
<importe moneda="dólar">11.52</importe>
<título>¿A quién ama Gilbert Grape?</título>
<títuloorixinal>What's Eating Gilbert Grape?</títuloorixinal>
<ano>1993</ano>
<director>Lasse Hallström</director>
<xénero>Drama</xénero>
<duración>118</duración>
<!-- Johnny Depp -->
<actúa id="139"/>
</película>
<actor id="51">
<nome>Elisabeth Shue</nome>
<sexo>muller</sexo>
<datanacemento>06/10/1963</datanacemento>
<url>http://www.imdb.com/name/nm0000223/</url>
</actor>
<actor id="139">
<nome>Johnny Depp</nome>
<sexo>home</sexo>
<datanacemento>09/06/1963</datanacemento>
<url>http://www.imdb.com/name/nm0000136/</url>
</actor>
<actor id="156">
<nome>Val Kilmer</nome>
<sexo>home</sexo>
<datanacemento>31/12/1959</datanacemento>
</actor>
<actor id="187">>
<nome>Nicolas Cage</nome>
<sexo>home</sexo>
<datanacemento>07/01/1964</datanacemento>
</actor>
</videoteca>
Rutas de localización con tests de nodo e predicados
Escribe as expresións XPath para obter os seguintes conxuntos de nodos:
- Os comentarios.
- Os comentarios da película "Leaving Las Vegas".
- As películas de xénero "Drama".
- Os nomes das actrices.
- Os elementos non baleiros (conteñen algún texto).
Rutas de localización avanzadas
Escribe as expresións XPath para obter:
- As películas nas que o título sexa igual ao título orixinal.
- O atributo "id" correspondente á actriz "Elisabeth Shue".
- Os títulos das películas nas que participou o actor con atributo id=51.
- Baseándote nos dous resultados anteriores, escribe a expresión correspondente aos títulos das películas nas que participou a actriz de nome "Elisabeth Shue".
- O título da última película que aparece no documento.
- A suma dos importes daquelas películas nas que o mesmo figura en dólares.
- A suma en euros dos importes das películas, considerando un cambio de 1€ = 1,4$.
Solución
- [[]]