Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

XSL-FO

XSL-Formatting Objects: come formattare un documento XML
XSL-Formatting Objects: come formattare un documento XML
Link copiato negli appunti

In questo capitolo andiamo ad analizzare la seconda componente di XSL, XSL-FO.
XSL-Formatting Objects è un linguaggio, anch'esso basato su XML, per la specifica di una semantica di formattazione dei contenuti di un documento XML.
All'interno di un documento XSL-FO possiamo definire le regole di impaginazione delle informazioni che vogliamo visualizzare, andando ad esprimere la posizione dei singoli contenuti nella pagina.
Grazie a XSL-FO possiamo produrre, ad esempio dei documenti PDF, RTF o PS, rappresentanti il contenuto di un documento XML.
Il documento XSL-FO viene analizzato da un processore XSL-FO che si occupa di produrre il documento di output, in base alle regole specificate nel documento di input.
La struttura di un file XSL-FO è la seguente:

<?xml version="1.0"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>    
    <!--modello pagina-->
  </fo:layout-master-set>

  <fo:declarations>
    <!--dichiarazioni globali-->
  </fo:declarations>
  
  <fo:page-sequence>
    <!--contenuti pagine-->
  </fo:page-sequence>
</fo:root>

All'interno dell'elemento <layout-master-set> vanno inserite le regole di impaginazione per la pagina master, ovvero la pagina che costituisce il modello per tutte le altre pagine del documento.
Il secondo elemento (<declarations>)contiene eventuali dichiarazioni globali al file XSL-FO; mentre l'elemento <page-seguence> contiene la definizione delle informazioni contenute nelle pagine che costituiranno il documento finale.
Per cercare di capire meglio il funzionamento di XSL-FO vediamo di analizzare il seguente documento di esempio:

<?xml version="1.0"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>    
    <fo:simple-page-master master-name="PaginaA4"
      page-height="29.7cm" page-width="21cm" margin-top="1.5cm"
      margin-bottom="1.5cm" margin-left="2.5cm" margin-right="2.5cm">
      <fo:region-body margin-top="1.8cm"/>
      <fo:region-before extent="1.3cm"/>
      <fo:region-after extent="1.3cm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>  
  <fo:page-sequence master-reference="PaginaA4">
    <fo:title>Esempio XSL-FO</fo:title>
    <fo:static-content flow-name="xsl-region-before">
      <fo:block text-align="end" font-size="8pt" font-family="times">
        Esempio XSL-FO
      </fo:block>  
    </fo:static-content>
    <fo:static-content flow-name="xsl-region-after">
      <fo:block text-align="end" font-size="8pt" font-family="times">
        Pagina <fo:page-number/>
      </fo:block>  
    </fo:static-content>
    <fo:flow flow-name="xsl-region-body">
      <fo:block text-align="center" font-size="14pt" font-family="times" color="blue">
        Testo della prima pagina dell'esempio XSL-FO.
      </fo:block>
      <fo:block break-before="page" text-align="center" font-size="14pt" font-family="times" color="green">
        Testo della seconda pagina dell'esempio XSL-FO.
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

Come detto in precedenza, il modello della pagina master viene definito con l'elemento <single-page-master>.
Nel nostro caso, al suo interno, abbiamo specificato le misure di un foglio in formato A4 utilizzando gli attributi dell'elemento.
Inoltre abbiamo indicato anche la dimensione dell'intestazione (con l'elemento <region-before>), la dimensione del piè di pagina (con l'elemento <region-after>) e del contenuto della pagina (con l'elemento <region-body>).
Una volta stabilito il modello della pagina andiamo a specificare il contenuto delle pagine del nostro documento con l'elemento <page-sequence>.
Gli elementi che troviamo al suo interno sono:

  • <title>: permette di specificare il titolo del documento;
  • <static-content>: indica le informazioni che verranno ripetute in ogni pagina;
  • <flow>: elemento che contiene il contenuto delle pagine.

Nel nostro esempio abbiamo definito, in <static-content>, l'intestazione delle pagine del documento contenente il titolo e il piè di pagina con il numero di pagina, che viene calcolato in maniera automatica grazie al tag <page-number>.
Nell'elemento <flow> abbiamo definito il contenuto delle due pagine che costituiscono il nostro esempio.
Il risultato della trasformazione del documento di esempio da parte del processore XSL-FO è il documento PDF mostrato in figura.

risultato della trasformazione del documento di esempio

Se volessimo creare un documento XSL-FO in grado di visualizzare il contenuto di un documento XML allora sarebbe necessario applicare una prima trasformazione XSLT al file XML, in modo da produrre il file XSL-FO con le regole di impaginazione.
Una volta prodotto questo documento saremmo in grado di utilizzare il processore XSL-FO per creare, ad esempio, un documento PDF contenente i dati del documento XML di partenza.
Per maggiori approfondimenti su XSL-FO vi rimando, anche in questo caso, alla lettura della specifica sul sito del W3C, all'indirizzo: http://www.w3.org/tr/xsl/.

Il processore utilizzato per realizzare l'esempio è FOP, un processore XSL-FO , sviluppato in Java e liberamente prelevabile all'indirizzo: http://xml.apache.org/fop/.

Ti consigliamo anche