Activitats

Consultes XPath

L’objectiu d’aquesta activitat és fer servir expressions XPath per extreure resultats d’un document XML.

Tenim un fitxer XML que conté informació de les notes finals de diferents alumnes i de diferents cicles:

Fitxer XML ( 1.1 KB )

i se us demana que genereu les expressions XPath que responen les preguntes següents:

1) Quins cicles formatius s’imparteixen en l’institut?

//especialitat/cicle/text()

2) Quins cicles formatius de grau mitjà s’imparteixen en l’institut?

/institut/cicles/especialitat/cicle[@grau="Mig"]

3) Quins són els noms dels alumnes suspesos?

//alumne[@aprovat="NO"]/nom

4) Quantes dones cursen el cicle d’ASIX?

//classe[@nom="ASIX"]/alumne[genere="Dona"]

5) Quins alumnes suspesos tenen un compte a Hotmail?

//alumne[@aprovat="NO" and contains(email,"hotmail")]/email/text()

6) Quina és la llista de classe d’SMX?

//classe[@nom="ASIX"]/alumne/nom/text()

7) En quins cicles hi ha alumnes que han tret un 10?

//alumne[nota="10"]/../@nom

8) Quants alumnes han aprovat ASIX?

count(//classe[@nom="ASIX"]/alumne[@aprovat="SI"]) 

9) Quin percentatge d’aprovats té el centre?

count(//alumne[@aprovat="SI"]) div count(//alumne) * 100

Consultes XPath

L’objectiu d’aquesta activitat és fer servir expressions XPath per extreure resultats d’un document XML.

En la lliga dels Rovellons s’emmagatzemen els resultats del campionat en un document XML:

Document XML ( 986 B )

A partir d’aquest fitxer es volen obtenir tota una sèrie de respostes a partir d’expressions XPath:

1) Quants partits han jugat els Vermells?

count(//equip[nom='Vermells'])

2) Quins partits han jugat a casa els Blancs?

//equip[nom='Blancs' and @juga="local"]

3) Quants jugadors han marcat gols abans de la mitja part (minut 45) tot jugant com a locals?

//equip[@juga="local"]/gols/jugador[@minut<45]    

4) Quants partits en els quals jugaven els Blancs han quedat empatats?

count(//partit[equip[1]/resultat = equip[2]/resultat]/equip[nom="Blancs"])

5) En quines jornades els Verds han jugat a casa?

//equip[nom="Verds" and @juga="local"]/../../@num

6) En quina jornada s’han fet més gols?

//jornada[partit/equip[resultat=max(//partit/equip/resultat)]]

7) Quina és la mitjana de gols per partit dels Vermells?

sum(//equip[nom="Vermells"]/resultat) div count(//equip[nom="Vermells"])

8) Quants punts han fet els Blaus?

18 - count(//equip[nom="Blaus" and resultat = min(./../equip/resultat)])*3 + count(//partit[equip[1]/resultat = equip[2]/resultat]/equip[nom="Blaus"])

Consultes XPath

L’objectiu d’aquesta activitat és fer servir expressions XPath per extreure resultats d’un document XML.

A partir d’un XML que conté informació sobre les previsions del temps de diferents poblacions de Catalunya durant el maig de 2018:

Fitxer XML ( 1.2 KB )

elaboreu les expressions XPath que responguin les preguntes següents:

1) Quin temps farà a Girona el 23 de maig a les 14.00?

//poblacio[nom="Girona"]/data[@dia="22-05-2018"]/previsio[@hora="14:00"]/estat/text()

2) Quina quantitat de pluja caurà a Salt el dia 22 de maig?

//poblacio[nom="Salt"]/data[@dia="22-05-2018"]/pluja/text()

3) Quins dies plourà a Olot?

//poblacio[nom="Olot"]/data[pluja]/@dia

4) En quines poblacions plourà durant aquests dies?

//pluja/../../nom/text()

5) Quines són totes les temperatures previstes per a les 8 del matí a Camprodon?

/temps/poblacio[nom="Camprodon"]/data/previsio[@hora="08:00"]/graus/

6) En quina població hi haurà 24 graus a les 8 del matí?

//previsio[@hora="08:00"][graus="24"]/../../nom/text()

7) Quina és la mitjana de temperatures de l’Alt Empordà?

sum(//poblacio[comarca="Alt Empordà"]/data/previsio/graus) div count(//poblacio[comarca="Alt Empordà"]/data/previsio)

8) En quin lloc hi haurà la temperatura més alta?

//poblacio/nom[../data/maxima=max(//maxima)]/text()

Transformar un document XML en text

L’objectiu d’aquesta tasca és aprendre a transformar un document XML en un document de text.

En un centre educatiu tenen un document XML

Document XML ( 557 B )

que conté les notes de diferents mòduls.

Els cal una llista de notes del mòdul de Llenguatge de marques que tingui aquesta forma:

Notes de //Llenguatges de marques//
--------------------------------
Federicu Garcia : 6            
Filomenu Pi : 10            
Manolito Puigdevall : 2            
Bernat Alegria : 5            
Filibert Blanch : 7            
Magdalena Roig : 5                    

Creeu la plantilla XSLT per fer la transformació.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. version="1.0">
  4. <xsl:template match="/">
  5. Notes de Llenguatges de marques
  6. --------------------------------
  7. <xsl:apply-templates select="//credit[nom='Llenguatges de marques']"/>
  8. </xsl:template>
  9.  
  10. <xsl:template match="credit">
  11. <xsl:value-of select="../../nom"/><xsl:text> </xsl:text>
  12. <xsl:value-of select="../../cognom"/> : <xsl:value-of select="nota"/>
  13. <xsl:text>
  14. </xsl:text>
  15. </xsl:template>
  16. </xsl:stylesheet>

Transformar un document XML

L’objectiu d’aquesta activitat és transformar un document XML en un altre del que només se’n té l’especificació.

Tenim una agenda en un format XML

Document XML ( 609 B )

i la volem transformar a un altre format que es pugui validar amb aquest DTD:

  1. <!ELEMENT agenda (cita*)>
  2. <!ELEMENT cita (quan, perque,ambqui?)>
  3. <!ELEMENT quan (data, hora)>
  4. <!ELEMENT data (#PCDATA)>
  5. <!ELEMENT hora (#PCDATA)>
  6. <!ELEMENT perque (motiu, comentari)>
  7. <!ELEMENT motiu (#PCDATA)>
  8. <!ELEMENT comentari (#PCDATA)>
  9. <!ELEMENT ambqui (nom+)>
  10. <!ELEMENT nom (#PCDATA)>
  11. <!ATTLIST nom correu CDATA #IMPLIED >

Creeu una plantilla XSLT per fer la transformació d’un format a l’altre.

L’única “trampa” d’aquest codi és el fet de que l’element <ambqui> no sempre ha de sortir. Per aquest motiu es pot fer servir <xsl:if> per evitar posar-lo quan no cal.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. version="1.0">
  4. <xsl:output indent="yes"/>
  5. <xsl:template match="/">
  6. <agenda>
  7. <xsl:apply-templates select="//cita"/>
  8. </agenda>
  9. </xsl:template>
  10.  
  11. <xsl:template match="cita">
  12. <cita>
  13. <quan>
  14. <data><xsl:value-of select="../@dia"/></data>
  15. <hora><xsl:value-of select="@hora"/></hora>
  16. </quan>
  17. <perque>
  18. <motiu><xsl:value-of select="titol"/></motiu>
  19. <comentari><xsl:value-of select="comentari/text"/></comentari>
  20. </perque>
  21. <xsl:if test="count(comentari/contacte)">
  22. <ambqui>
  23. <xsl:apply-templates select="comentari/contacte"/>
  24. </ambqui>
  25. </xsl:if>
  26. </cita>
  27. </xsl:template>
  28.  
  29. <xsl:template match="contacte">
  30. <nom>
  31. <xsl:attribute name="correu">
  32. <xsl:value-of select="correu"/>
  33. </xsl:attribute>
  34. <xsl:value-of select="nom"/>
  35. </nom>
  36. </xsl:template>
  37.  
  38. </xsl:stylesheet>

Transformar un document XML

L’objectiu d’aquesta activitat és generar un document XSL per transformar documents XML d’un format a un altre.

La cadena de televisió Un TV rep un fitxer amb les audiències dels programes de totes les cadenes en format XML:

Document XML ( 643 B )

Una TV té un programa de gestió que permet importar les dades en XML però lamentablement necessita que estigui en un format diferent del que rep. Aquest és un exemple del format que necessiten:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <cadena>
  3. <nom>Un TV</nom>
  4. <programes>
  5. <programa hora="15:00">
  6. <nom-programa>Un TV</nom-programa>
  7. <audiencia>22</audiencia>
  8. </programa>
  9. <programa hora="18:00">
  10. <nom-programa>Un TV</nom-programa>
  11. <audiencia>13</audiencia>
  12. </programa>
  13. <programa hora="22:00">
  14. <nom-programa>Un TV</nom-programa>
  15. <audiencia>9</audiencia>
  16. </programa>
  17. <programa hora="24:00">
  18. <nom-programa>Un TV</nom-programa>
  19. <audiencia>0,1</audiencia>
  20. </programa>
  21. </programes>
  22. </cadena>

Us demanen que creeu un fitxer de transformació XSL que adapti el fitxer original a les necessitats de la cadena.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3.  
  4. <xsl:output indent="yes"/>
  5.  
  6. <xsl:template match="/">
  7. <cadena>
  8. <nom>Un TV</nom>
  9. <programes>
  10. <xsl:apply-templates select="//cadena[@nom='Un TV']"/>
  11. </programes>
  12. </cadena>
  13. </xsl:template>
  14.  
  15. <xsl:template match="cadena">
  16. <programa>
  17. <xsl:attribute name="hora">
  18. <xsl:value-of select="../../hora"/></xsl:attribute>
  19. <nom-programa><xsl:value-of select="@nom"/></nom-programa>
  20. <audiencia><xsl:value-of select="@percentatge"/></audiencia>
  21. </programa>
  22. </xsl:template>
  23.  
  24. </xsl:stylesheet>

Anar a la pàgina anterior:
Conversió i adaptació de documents XML
Anar a la pàgina següent:
Exercicis d'autoavaluació