spacer spacer
Indice   Page down
spacer

Riassunto

Esempio d'applicazione di XSLT per la conversione di documenti XML in documenti HTML al fine di pubblicarli su Internet. L'esempio é mantenuto semplice in modo da facilitare l'assimilazione dei concetti di base. Al lettore sono offerte delle istruzioni per poter verificare sul suo ordinatore il funzionamento dell'esempio.

Ringraziamenti

Un sentito grazie a Max Froumentin del W3C per i suoi utili commenti.
spacer spacer
Introduzione  
Page up Page down
Non possiamo che essere impressionati se guardiamo al considerevole lavoro dedicato negli ultimi anni dal W3 Consortium allo sviluppo del "Extensible Markup Language" (XML) e del "Extensible Stylesheet Language" ( XSL). Il loro obiettivo principale é stato di contribuire maggiore flessibilità alla gestione di documenti, riuscendo in modo egregio ad aggirare numerose limitazioni e svantaggi connessi con l'uso del quasi universale standard Hypertext Markup Language (HTML) Maggiore chiarezza, semplicità, modularità e coerenza certamente non furono soltanto retorica se esaminiamo i molteplici sviluppi che ha originato.  Nel frattempo sono apparsi alcuni interessanti strumenti in relazione con XML e XSL i quali, benché non ancora completi, ci permettono già di fare primi passi nella loro applicazione. Qui di seguito presentiamo un breve studio di un esempio su come si é potuto migliorare la gestione di pagine pubblicate sul presente sito con l'introduzione di un specifico linguaggio di notazione (markup) basato su XML risultante fra l'altro de facto in una estensione indiretta di HTML. Questa presentazione assume che il lettore abbia nozioni di base su XHTML, XML, XSL, XSLT.
spacer spacer
Il problema con documenti HTML  
Page up Page down
All'inizio sembrava che scrivere documenti atti ad essere pubblicati sull'Internet fosse qualcosa di lineare: tutto quel che richiedeva era un decente programma di videoscrittura e le specificazioni HTML per poter applicare in modo appropriato la notazione, ma con il progredire del lavoro apparvero alcuni inconvenienti che portarono alla conclusione che mescolare elementi di notazione strutturale con quelli stilistici non sia stata una buona idea. Il primo disappunto venne dalla scoperta che non tutte le pagine somigliavano in modo consistente alla presentazione desiderata se visualizzati con differenti "browser" e/o sistemi operativi. Per aggirare il problema si dovette ricorrere all'accurata scelta di una struttura e uno stile HTML di compromesso, attualmente ancora alla base delle pagine di questo sito.
L'osservazione che un mucchio di annotazioni di stile e di presentazione aveva quasi sommerso il contenuto dei documenti portò l'autore a postulare un meccanismo per il quale la presentazione e lo stile potessero essere derivati dalle annotazioni che strutturano un documento.
 Fino a non molto fa una soluzione viabile non era in vista però con il recente rilascio di MSXML 3.0 della Microsoft Corporation combinato con l'utilitaria MSXSL.EXE della stessa ditta hanno ora provveduto a dare l'opportunità per l'implementazione di una soluzione. In alternativa potete usare Instant Saxon 6.5.3, un'applicazione scritta da Michael Kay.
Un altra via per implementare la separazione del contenuto dalla presentazione implica l'uso di "Cascading Style Sheets" (CSS), un meccanismo ben concepito ma che sfortunatamente non é stato adeguatamente implementato nella maggioranza dei "browser" dando molte frustrazioni a coloro che hanno cercato di usarlo. Quando parliamo di una soluzione viabile ovviamente escludiamo il dover trasferire le frustrazioni da una tecnologia ad un'altra. Questo problema dovrebbe gradualmente sparire con la diffusione delle recenti versioni di "browser".
spacer spacer
Che ruolo giocano XML, DTD, e XSLT  
Page up Page down
Il primo mattone nella costruzione della nostra soluzione ci viene dallo standard "eXtended Markup Language" ( XML) il quale ci permette di strutturare un documento seguendo un insieme relativamente semplice di regole. Ad esempio possiamo dare uno sguardo al testo sorgente del documento strutturato con XML page_ex.xml alla base della pagina HTML page_ex.html . (Suggeriamo di aprire queste pagine in finestre separate onde poter comparare il testo sorgente XML con quello HTML di page_ex.html usando l'opzione "mostra testo sorgente" del browser.) La più parte dei browser in giro ancora non sono in grado di trattare in modo utile un tale documento per cui, al fine di poter visualizzare page_ex.xml, dobbiamo convertirlo in un documento HTML.
Qui va il secondo mattone della nostra soluzione: lo standard "eXtensible Stylesheet Language Transformations" (XSLT) il quale ci permette di specificare per mezzo di regole canovaccio (template rules) in quale modo un documento XML va convertito in uno HTML con l'ausilio di un processore XSL.
 Dalla terza riga del preambolo del nostro esempio possiamo desumere che lo "stylesheet" applicabile a questo documento XML si trova nella risorsa page_ex.xsl . Questo "stylesheet" viene utilizzato dal processore XSL, nel nostro caso il programma utilitario MSXSL.EXE della Microsoft Corporation, per derivare la versione HTML di page_ex.xml.
L'ultimo mattone della nostra soluzione é rappresentato dal "Document Type Definition" (DTD), definizione del tipo di documento, il quale, benché non necessario al funzionamento della nostra soluzione, descrive la struttura del contenuto del nostro documento ed é un prezioso ausilio per assicurare la conformità del documento alla struttura di contenuto desiderata. La seconda riga del preambolo ci dice che il DTD per il documento page_ex.xml si trova in page_ex.dtd . Con questo DTD un processore XSL é in grado di individuare qualsiasi inconsistenza e/o errore nel documento. Le definizioni specifiche al contenuto del documento sono raggruppate alla fine dell'archivio.
spacer spacer
Aspetti interessanti di questa soluzione  
Page up Page down
In sostanza, lo "stylesheet" page_ex.xsl descrive un canovaccio strutturato di documento pronto ad essere riempito con del contenuto. La generazione di page_ex.html può essere vista come un processo di fusione tra questo canovaccio e il contenuto strutturato di page_ex.xml dove i nomi degli elementi aiutano ad piazzare al posto giusto i vari pezzi del testo. Una inaspettata e potente caratteristica del disegno di XSLT é il fatto che si descrive una sola volta come un particolare elemento di testo va trattato, indipendentemente da quante volte e dove possa trovarsi. Se in uno sviluppo ulteriore bisogna distinguere a dipendenza dal contesto il trattamento di un elemento si può modificare lo "stylesheet" senza aver bisogno di riscriverlo di nuovo. Il DTD permette di usare qualsiasi notazione HTML valida in un blocco "BODY" per facilitare la transizione da HTML a XML con documenti esistenti. Si noti però che lo "stylesheet" page_ex.xsl definisce solo il trattamento del sottoinsieme di annotazioni HTML effettivamente utilizzate nell'esempio.  Per esempio gli attributi "home", "previous", e "next" dell'elemento "page" controllano automaticamente la funzione ausiliare di navigazione nell'intestazione. Questo é ottenuto dalle seguenti definizioni in page_ex.xsl:

<TD class="rheader">
  <xsl:apply-templates select="@home"/>
  <xsl:call-template name="br"/>
  <xsl:apply-templates select="@previous"/>
  <xsl:call-template name="br"/>
  <xsl:apply-templates select="@next"/>
</TD>
Questo naturalmente potrebbe venire ulteriormente perfezionato facendo apparire una icona con associata mappa etc..., come é fatto per le pagine di questo sito.
Se esaminiamo la notazione HTML generata per page_ex.html notiamo che alcuni elementi di notazione sono in minuscolo mentre altri sono in maiuscolo. Questo é fatto con il proposito di distinguere cosa é stato inserito dal processore XSLT (maiuscolo) da quello proveniente direttamente dal documento XML (minuscolo). I browser non fanno distinzione tra minuscolo e maiuscolo quando leggono la notazione HTML.
spacer spacer
 
Page up Page down
É possibile parametrizzare la presentazione attraverso attributi aventi dei valori predefiniti ai quali lo "stylesheet" può riferirsi come con "indent" e "separation" nel seguente ritaglio preso dalla definizione "sections" in page_ex.xsl :

<TR><TD width="{@indent}">
    <xsl:call-template name="nbsp"/></TD>
  <TD width="{@separation}">
    <xsl:call-template name="nbsp"/></TD>
  ...
</TR>
Nel DTD page_ex.dtd possiamo trovare le corrispondenti righe dalle quali vengono presi i valori:

<!ELEMENT sections   (section+, body?)>
<!ATTLIST sections
  %core.att;
  width         %RelativeLength;  "95%"
  height        %RelativeLength;  "80%"
  indent        %RelativeLength;  "30%"
  separation    %RelativeLength;  "2%"
>
Questo modo di parametrizzare ci dà l'opportunità di cambiarli in casi eccezionali semplicemente specificando localmente l'attributo dell'elemento con i valori particolari.
 Coloro che esamineranno più da vicino la notazione HTML generata e le dichiarazioni nell'intestazione di page_ex.html o lo sottopongono a un validatore HTML scopriranno delle divergenze. L'esempio presentato é effettivamente il risultato di un compromesso tra generare pura notazione HTML4 e generare notazione XHTML1, perché XML, XSL, e XSLT esigono che ogni elemento deve avere la sua corrispondente notazione di terminazione. Per esempio non si può specificare in XSLT la generazione di un elemento META senza la corrispondente chiusura /META (a meno che non si ricorra a un laborioso e oscurante trucco comprendente elementi xsl:text, vedi la specifica canovaccio "br" come esempio molto semplice del genere). Verifiche fatte con vari "browser" hanno mostrato che elementi con chiusura, benché non contemplato dallo standard HTML4, non causano inconvenienti.
L'attributo "height" che appare negli elementi table non è contemplato dalle specifiche HTML4, ciononostante viene riconosciuto dalla maggior parte dei navigatori per motivi di compatibilità con versioni precedenti. Viene utilizzato spesso per controllare la messa in pagina in questo sito.
spacer spacer
Cosa guadagnamo con XML, XSL, XSLT?  
Page up Page down
Qui una lista di vantaggi decisivi che caratterizzano questi nuovi standard:
  • É più facile concentrare l'attenzione sul contenuto di documenti strutturati secondo lo standard XML.
  • Con "stylesheet" XSLT separati possiamo ottenere presentazioni specifiche dello stesso contenuto a destinazione di media diversi.
  • É preservata la continuità con l'esistente standard HTML.
  • XSLT permette di controllare la presentazione dei vostri documenti a partire dalla loro strutturazione.
  • Flessibilità nel tracciare la frontiera tra struttura del contenuto e caratteristiche della sua presentazione.
  • Facoltà di modificare lo stile di presentazione senza dover alterare il contenuto.
  • Necessità di determinare una sola volta il compromesso di notazione HTML funzionante con diversi "browser".
 Ciò che vale per XSLT naturalmente vale pure per XSL, uno standard che incorpora XSLT, Xpath, e "Formatting Objects". Con XSL si fornisce una ricetta su come il contenuto in un documento XML dev'essere presentato senza dover alterarlo. Una volta operazionale nella maggioranza dei "browser", XSL diventerà un'alternativa interessante dato che non richiede lo standard HTML.
Ovviamente, per poter approfittare di questi vantaggi, dobbiamo investire del tempo nell'elaborazione di metodi di lavoro più consistenti, e cosa ancor più importante dobbiamo assicurare la coerenza dell'informazione trattata.
spacer spacer
Provate l'esempio sul vostro ordinatore  
Page up Page down
Le seguenti istruzioni passo per passo vi permetteranno di giocare un po' sul vostro ordinatore con l'esempio presentato:
  1. Scaricare MSXML 3.0 ed installarlo in modalità "replace" (vedi istruzioni della Microsoft):
  2. Scaricare MSXSL.EXE .
  3. Scaricare l'archivio ZIP page_ex.zip contenente gli archivi sorgente di questo esempio e decomprimerli in un indirizzario di vostra scelta. Assieme agli archivi sorgente vi é pure un piccolo archivio "batch" chiamato xml.bat il quale deve venire modificato in modo da indicare l'indirizzario dove avete installato il progr. utilitario msxsl.exe (vedi commento scritto nello stesso).
  4. Aprire l'"Internet Explorer" della Microsoft (MSIE) e caricare l'archivio page_ex.xml; se MSXML 3.0 é stato installato correttamente il documento dovrebbe venir visualizzato nella sua forma HTML (conversione interna fatta da MSIE).
 
  1. Ora aprite una finestra di comando DOS, posizionatevi nell'indirizzario in cui avete messo gli archivi dell'esempio e fatte eseguire il comando
    
    xml page_ex
    
    Questo dovrebbe generare l'archivio page_ex.html il quale può essere esaminato con qualsiasi browser.
  2. Se volete esperimentare di più con XML e XSLT potreste pure scaricare Microsoft XML Notepad per visionare ed editare al volo archivi XML e Microsoft XML Parser SDK con la documentazione per MSXML 3.0 (esiste solo in inglese).
    Potreste pure prendere in considerazione di utilizzare uno strumento più specifico quale l' XMLwriter della Wattle Software.
spacer spacer
Conclusioni  
Page up Page down
Nella nostra presentazione abbiamo messo in evidenza la flessibilità che i nuovi standard introducono nella gestione di documenti. Però i documenti dovrebbero contenere dell'informazione, non oscurante linguaggio di notazione ed é proprio questo che possiamo ottenere usando XML, XSL, XSLT. Si potrebbe ben ribattere che nell'esempio presentato compare ancora della notazione HTML però a questo proposito dobbiamo dapprima distinguere la notazione della struttura da quella di presentazione; quest'ultimo dovrebbe quasi scomparire ma volendolo bandire completamente non sarebbe saggio perché per potente che possa essere XML combinato con XSL e XSLT, vi sono per ora sempre ancora situazioni che possono essere trattate più efficientemente con le note ricette.  La conversione delle pagine facenti parte della presente pubblicazione Internet sarebbe stata difficilmente fattibile se lo standard XML non avesse provveduto la necessaria flessibilità per fare la transizione. Ancora per un po' queste pagine saranno rese accessibili sotto forma di documenti HTML ma non appena i browser capaci di trattare XML saranno più largamente diffusi queste pagine verranno messe a disposizione direttamente nella loro forma XML. A quel momento l'XSL nativo diventerà determinante per la gestione della loro presentazione al pubblico, rendendo la transizione definitiva.

Louis JEAN-RICHARD

Novembre 2000

Rev. Ottobre 2004

spacer spacer
Riferimenti bibliografici   Page up
  1. The World Wide Web Consortium
  2. Extensible Markup Language (XML) 1.0
  3. Extensible Stylesheet Language (XSL) 1.0
  4. XSL Transformations (XSLT) 1.0
  5. Hypertext Markup Language (HTML) 4.01
  6. Cascading Style Sheets (CSS)
  7. MSXSL.EXE Command Line Utility by Microsoft Corporation
  8. MSXML 3.0 by Microsoft Corporation
  9. Microsoft XML Notepad
  10. Microsoft XML Parser SDK
  11. Instant Saxon 6.5.3
  12. page_ex.zip con le sorgenti degli esempi utilizzati in questo articolo
  13. XMLwriter by Wattle Software