Activitats

Convertir XML a dades relacionals

L’objectiu d’aquesta activitat és veure una possible relació entre els documents XML i les bases de dades relacionals.

Disposeu del següent document:

Document XML ( 609 B )

les dades del qual s’han d’afegir a una base de dades relacional que té l’estructura següent:

Figura Estructura de la base de dades

Quines són les instruccions SQL que s’han d’executar per poder entrar les dades del fitxer XML a la base de dades?

  1. INSERT INTO Agenda("10-10-2011","10:00","Visita al dentista",60,"")
  2. INSERT INTO Agenda("12-10-2011","8:00","Excursió a la Salut de Terrades", 240, "Trucar a en Pere i en Pau per veure si vénen")
  3. INSERT INTO contactes ("12-10-2011","8:00","Pere","pere@mailz.com")
  4. INSERT INTO contactes ("12-10-2011","8:00","Pau","pau_papau@aquibegracies.cat")
  5. INSERT INTO Agenda("12-10-2011","21:00","Cinema", 240, "Trucar un dia abans a la Maria per confirmar si pot venir")
  6. INSERT INTO contactes ("12-10-2011","21:00","Maria","pere@mailz.com")
  7. INSERT INTO Agenda("13-10-2011","8:00","Reunió amb els representants de Porquets, SA", 180, "")
  8. INSERT INTO Agenda("14-10-2011","8:00","Congrés de telefonia mòbil", 480, "")

Consultes XQuery

L’objectiu d’aquesta activitat és realitzar consultes XQuery en un document XML.

A partir de l’arxiu:

de l’empresa Porquets, SA feu una expressió XQuery que doni resposta a les peticions següents:

  • Quins són els noms dels clients que tenen una factura més gran de 500 €?

for $factura in doc("facturacio.xml")//factura
where $factura/total > 500
return $factura/client/raosocial/nom

  • En quants rebuts s’ha venut l’article “Porquets de xocolata”?

count(
for $rebut in doc("facturacio.xml")//rebut
where $rebut/linies/producte[@codi="11115"]
return $rebut
)

  • Quants diners s’han ingressat per la venda de porquets de xocolata blanca?

sum (for $article in doc("facturacio.xml")//producte[@codi="11112"]
return $article/quantitat * $article/preuunitari )

  • En quins rebuts s’han venut 3 o més articles?

for $rebut in doc("facturacio.xml")//rebut
let $total := sum($rebut/linies/producte/quantitat)
where $total>2
return <albara> { $rebut/@numero } </albara>

  • Feu una llista del total de les factures emeses als clients, ordenades de més a menys import.

for $client in doc("facturacio.xml")//factura
order by number($client/total) descending
return <client>{$client/client/raosocial/nom,$client/total}</client>

Consultes XQuery

L’objectiu d’aquesta activitat és respondre a un seguit de preguntes sobre les dades emmagatzemades en XML utilitzant XQuery.

A partir d’aquest document:

Document ( 1.6 KB )

en què hi ha els resultats del torneig de les 6 nacions de rugbi de l’any 2011, feu servir XQuery per respondre les preguntes següents:

  • Quants punts en total ha aconseguit anotar França en el torneig?

let $partits := doc("6nations11.xml")//team[@name='France']
return <torneig>{sum($partits/@score)}</torneig>

  • Quins partits ha jugat Escòcia?

for $equip in doc("6nations11.xml")//summary
where some $a in $equip/team 
satisfies ($a/@name="Scotland")
return <partit>{concat($equip/team[1]/@name," - ", $equip/team[2]/@name)}</partit>

  • Feu la llista de tots els partits que s’han jugat especificant quins equips s’enfrontaven.

for $equip at $pos in doc("6nations11.xml")//summary
return <partit num="{$pos}">{concat($equip/team[1]/@name," - ",$equip/team[2]/@name)}</partit>

  • Quin partit ha guanyat Itàlia?

for $equip in doc("6nations11.xml")//summary
where some $a in $equip/team 
satisfies ($a/@name="Italy" and $a/@score = max($equip//team/@score) )
return <partit>{concat($equip/team[1]/@name," - ", $equip/team[2]/@name)}</partit>

  • Genereu una llista ordenada de més a menys amb els punts totals que ha anotat cada equip.

for $equip in distinct-values( doc("6nations11.xml")//team/@name)
let $punts := doc("6nations11.xml")//team[@name=$equip]
order by sum($punts/@score) descending
return <team equip="{$equip}" anotacions="{sum($punts/@score)}" />

eXist-db

L’objectiu d’aquesta activitat és fer la instal·lació d’un sistema de bases de dades XML.

  1. Instal·leu la base de dades eXist-db com un servidor fent servir les instruccions que proporciona la seva pàgina web.
  2. Carregueu aquests arxius en aquesta base de dades:

Base de dades ( 1.7 KB )

La instal·lació d’eXist-db no té dificultat excessiva, ja que en el web s’ofereixen paquets autoinstal·lables que no ofereixen cap dificultat.

Cal tenir en compte que l’instal·lador no inicia la base de dades, i per tant abans de poder-hi connectar caldrà iniciar-la.

Per crear una col·lecció descomprimiu els arxius en un directori, i per mitjà de qualsevol de les seves interfícies connecteu-vos a la base de dades amb un client, i amb el botó de la barra d’eines o amb la instrucció mkcol creeu una nova col·lecció, Bodega.

Feu dos clics sobre la nova col·lecció per afegir els documents XML que vulgueu dins d’aquesta.

I tindreu els arxius XML en la col·lecció.