Pagine

martedì 10 marzo 2015

Informatica - XML e trasformazioni XSLT


Cari ragazzi, in questo articolo vi spiegherò nel più semplice dei modi cosa sia l'XML e vi proporrò un esempio di utilizzo dei dati strutturati in XML che fa uso delle trasformazioni XSLT.

XML sta per eXtensible Markup Language, mentre XSLT sta per eXtensible Stylesheet Language Transformations.

Voi già sapete come è fatto un documento html, almeno nei suoi elementi essenziali. Sapete anche che ad un documento html possono essere associati degli stili, e addirittura dei fogli di stile, che modificano il modo in cui i diversi elementi della pagina html sono visualizzati (rendered).

Dobbiamo tuttavia domandarci: da dove arrivano i dati che sono visualizzati su una pagina html? In alcuni rari casi essi vengono scritti insieme alla pagina html, manualmente, da qualcuno che la compila. Se questo metodo fosse generalizzato vi sarebbe una sola alternativa: o una enorme richiesta di esperti di html e fogli di stile... oppure un numero enormemente inferiore di pagine html sul web. Come stiano le cose lo sapete: la richiesta di esperti di html e fogli di stile è piuttosto limitata (servono ben altre competenze per operare professionalmente in questo campo) mentre le pagine html sul web sono miliardi e miliardi. Dunque, chi le scrive?

La risposta è nel fatto che i dati vengono archiviati e gestiti in modo indipendente da come sono rappresentati. Per fare un esempio: le cravatte vengono prodotte nelle fabbriche di cravatte, poi ogni commerciante le espone come vuole nella sua vetrina.

I dati sono ospitati in sistemi chiamati DBMS (Data Base Management System), e le pagine web sono l'equivalente delle vetrine in cui i commercianti le espongono. L'analogia finisce qui perché, mentre nella vita reale serve almeno un commesso che sistemi le cravatte in vetrina o sugli scaffali, nel mondo dell'informatica anche i commessi sono virtuali, cioè a dire sono delle procedure automatiche. Sono cioè dei programmi che qualcuno ha scritto.

Il problema è complicato dal fatto che è necessario assicurare la massima capacità, ai dati che attraversano la rete Internet, di transitare in tutti i suoi nodi, indipendentemente dalla presenza di sistemi hardware e software diversi, come pure di sistemi firewall. Serve, cioè, un formato per il loro trasporto che sia considerato affidabile e sia compreso da qualsiasi sistema informatico. La soluzione è la codifica ASCII.

Dunque un set di dati in XML è codificato in ASCII. Tutto quello che è codificato in ASCII può andare ovunque, è come un tiepido venticello primaverile che nessuno teme, di per sé.

Nei DBMS non è detto che i dati siano codificati in ASCI, anzi spesso non lo sono. Dunque un set di dati, che serve per realizzare una pagina html, per poter transitare in tutta tranquillità sulla rete deve prima essere ricodificato in ASCII. Questa operazione si chiama "serializzazione", un'operazione in cui l'XML gioca un ruolo importante ma di cui non ci occuperemo per il momento.

Osservate lo schema seguente:



Quando voi chiedete una pagina web (digitando un indirizzo), la richiesta viene servita da un web-server. Se il web-server ha bisogno, per "servire" la pagina web, di attingere a dei dati, si rivolge a un suo collaboratore chiamato "application server". Questo è responsabile di effettuare la richiesta dei dati al DBMS. Affinché i dati possano viaggiare sulla rete che connette tutti gli attori sulla scena, senza "destare sospetti", è necessario, come detto, che siano codificati in ASCII. Fanno eccezione alcuni tipi di dati standard, ad esempio i documenti PDF e le immagini gif, jpg e png, che sono da tutti considerati sicuri, ma vi sarà capitato spesso di dover fornire un'autorizzazione per accettare alcuni tipi di dati, ad esempio i dati binari in files con estensione exe. L'uso dell'ASCII fa sì che voi e i sistemi intermedi non dobbiate continuamente analizzare e autorizzare ogni transito di dati. L'ASCII è considerato sicuro.

Tuttavia l'ASCII non basta. E' necessario che i dati abbiano una "struttura" per poter essere interpretati correttamente dai sistemi che devono gestirli. Questa struttura deve corredare i dati con dei metadati, cioè ulteriori informazioni che spiegano il loro significato. Facciamo un esempio considerando il seguente set di dati:

124,4
59,2
8,97
132

Vi dicono qualcosa? Ora guardateli in questa forma:
  • Altezza: 124,4 mm
  • Larghezza: 59,2 mm
  • Profondità: 8,97 mm
  • Peso: 132 grammi
Non è più chiaro? Abbiamo aggiunto ai dati, per renderli intellegibili, delle metainformazioni, cioè "informazioni sulle informazioni".

Ora, poiché è necessario che ci sia un metodo standard per aggiungere le metainformazioni alle informazioni, e il tutto deve essere codificato in ASCII, ecco che è stato sviluppato il linguaggio XML. In XML le metainformazioni sono distinte dai dati perché sono racchiuse all'interno dei simboli "<" e ">". Il nome delle metainformazioni è quello che viene chiamato "tag".


Anche l'HTML è scritto in XML


Chi decide come chiamare le metainformazioni, cioè i tag? Nel caso dell'HTML (ma non solo) la decisione spetta agli estensori dello standard HTML, cioè al w3c. In moltissimi casi però sono gli stessi programmatori che possono liberamente scegliere il nome dei tag, come meglio fa comodo a loro. Ad esempio, le informazioni precedenti potrebbero essere così impacchettate (strutturate):

<?xml version="1.0"?>
<oggetto>
<altezza unit="mm">124,4</altezza>
<larghezza unit="mm">59,2</larghezza>
<profondita unit="mm">8,97</profondita>
<peso unit="grammi">132</peso>
</oggetto>

Nulla impedirebbe di utilizzare tag diversi, ad esempio:


<?xml version="1.0"?>
<package>
<high unit="mm">124,4</high>
<width unit="mm">59,2</width>
<deep unit="mm">8,97</deep>
<weight unit="grams">132</weight>
</package>

La sola cosa importante è che il programma che riceve i dati conosca il significato dei tag usati dal programma che li ha confezionati per la spedizione. Ovvero che i due team di sviluppo si siano accordati.

Un esempio di dati in XML


Consideriamo questo file xml: cdcatalog.xml, di cui riporto una parte:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
</catalog>

Esso contiene le informazioni relative a un catalogo di dischi. Possiamo ragionevolmente immaginare che le informazioni siano inizialmente contenute in un DBMS, in forma binaria (non ASCII) e che l'application server (vedi figura), su richiesta del web server le debba reperite e successivamente impacchettate (serializzate) in formato xml. I dati giungono in questa forma al web server, il quale deve restituirli al browser che aveva inizialmente richiesto la pagina html contenente tali dati.

Tuttavia presentare i dati in questo modo non è il massimo dell'eleganza, né della leggibilità. In realtà il web server deve inserire questi dati all'interno di una pagina html, magari insieme con molti elementi e informazioni, e deve farlo in modo automatico. Per fare ciò il programmatore del web server ha a disposizione diverse tecnologie, anzi una miriade, una delle quali è costituita dalle trasformazioni XSLT.

Il programmatore del web server può creare una documento XSLT nel quale inserisce le direttive di formattazione dei dati in oggetto utilizzando un linguaggio chiamato XSLT. Questo file definisce il modo in cui i dati grezzi in XML verranno trasformati in HTML. Ecco un esempio di trasformazione XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Si noti che nel file XSLT sono presenti anche dei tag tipici dell'HTML. Per applicare la trasformazione XSLT al file XML originario è sufficiente, a questo punto, aggiungere una sola riga al file XML originario (evidenziata in rosso nel seguito):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.w3schools.com/xsl/cdcatalog.xsl"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
</catalog>


Il risultato è questo:

My CD Collection

TitleArtist
Empire BurlesqueBob Dylan
Hide your heartBonnie Tyler
Greatest HitsDolly Parton
Still got the bluesGary Moore
ErosEros Ramazzotti
One night onlyBee Gees
Sylvias MotherDr.Hook
Maggie MayRod Stewart
RomanzaAndrea Bocelli
When a man loves a womanPercy Sledge
Black angelSavage Rose
1999 Grammy NomineesMany
For the good timesKenny Rogers
Big Willie styleWill Smith
Tupelo HoneyVan Morrison
SoulsvilleJorn Hoel
The very best ofCat Stevens
StopSam Brown
Bridge of SpiesT`Pau
Private DancerTina Turner
Midt om nattenKim Larsen
Pavarotti Gala ConcertLuciano Pavarotti
The dock of the bayOtis Redding
Picture bookSimply Red
RedThe Communards
Unchain my heartJoe Cocker

Nota: a causa di un mio errore, nel video una parte del testo (sulla sinistra) non compare. Chiedo scusa, ma credo che il tutto sia, comunque, comprensibile. Questa volta è andata così.

Nessun commento:

Posta un commento