Trasformazioni PDF con XSL-FO

di Riccardo Golia, in XML,
  • 0
  • 0
  • 0
  • 18,91 KB

XML ( eXtensible Markup Language ) è un linguaggio basato su marcatori, creato per strutturare informazioni in modo gerarchico in un albero di contenuti. Secondo la sintassi XML, è possibile definire namespace per identificare gli ambiti di validità dei vari tag utilizzati. Nell'ambito dello stesso documento XML è così possibile costruire vere e proprie famiglie di elementi e attributi, identificati da un stesso prefisso e distinti dagli altri nodi. Questo permette di definire grammatiche XML, di cui XSL-FO (insieme a XSLT e XSD) è uno degli esempi più rappresentativi.

Tramite un'applicazione (processore o parser ) in grado di interpretare una specifica grammatica, è possibile trattare i contenuti di un documento XML basato su quella grammatica al fine di ottenere qualcosa di diverso. Nel caso di XSL-FO, l'idea di base è quella di trasformare i contenuti XML in un documento formattato secondo certe regole di impaginazione. La trasformazione dei contenuti iniziali si basa su alcune direttive espresse ancora in XML ed interpretate di conseguenza dal parser al fine di produrre un documento di output nel formato voluto.

Uno dei formati di presentazione di informazioni più usati sul Web è senza dubbio il Portable Document Format di Adobe ( PDF ). Esistono svariate librerie (per .NET e non solo) disponibili gratuitamente piuttosto che a pagamento che permettono di generare documenti PDF via codice. In alternativa si possono sfruttare le potenzialità della grammatica XSL-FO ( Formatting Objects ) e le funzionalità di un parser FO come Apache FOP per generare documenti PDF partendo da un documento XML.

La prima parte di questo articolo riporta una veloce, ma completa panoramica di tutto quello che c'è da sapere su XML: regole sintattiche, grammatiche, formattazione e validazione. La seconda parte è invece dedicata a XSL-FO ed, in particolare, viene spiegato come generare un documento in formato PDF grazie ai Formatting Objects. L'articolo è corredato di utili esempi, per approfondire e capire al meglio i concetti esposti.

Il linguaggio XML

Nato nel febbraio del 1998, XML ( eXtensible Markup Language ) è un linguaggio di markup derivato da SGML ( Standard Generalized Markup Language ) orientato alla strutturazione gerarchica di contenuti testuali. Essendo un standard basato su formato testuale, XML ha come principale punto di forza la compatibilità con qualsiasi piattaforma software e hardware. Per questo motivo viene spesso utilizzato per trasferire informazioni tra sistemi eterogenei.

La struttura di un file XML si basa su marcatori o tag <TAG></TAG> non sovrapposti. Deve esistere sempre un tag che funge da radice ( root ) in cui sono contenuti tutti gli altri. In genere i dati sono rappresentati dalle sezioni di testo contenute tra i tag di apertura e chiusura. Un tag può essere provvisto di attributi il cui valore deve essere racchiuso tra apici o doppi apici. I nomi dei tag e degli attributi seguono regole sintattiche abbastanza rigide: sono case-sensitive, non possono iniziare con numeri, ma solo con caratteri o con l'underscore, non possono contenere spazi e devono essere sempre necessariamente aperti e chiusi (solo nel caso dei tag, ovviamente). Un file XML inizia sempre con una sezione di intestazione e dichiarativa costituita da una o più processing instruction <? ... ?>. Tag, attributi e contenuti testuali vengono denominati in modo generico nodi . Un file XML conforme alle regole sintattiche sopra menzionate si dice well formed (ben costruito).

In XML è possibile definire i namespace , ovvero raggruppamenti di parole chiave utilizzate per denominare tag e attributi. In questo modo è possibile distinguere il contesto di validità di un tag e definire tag omonimi appartenenti a namespace diversi. Per definire un namespace si utilizzano due notazioni: URL ( Uniform Resource Locator ) e URN ( Uniform Resource Name ). URL è un metodo univoco per referenziare e localizzare risorse nell'ambito di Internet, mentre URN si basa sull'assegnazione di nomi univoci da parte dell'authority mondiale IANA. Grazie ai namespace è possibile definire grammatiche XML (esempi: XSD e XSLT).

Validazione di documenti XML

Per validazione si intende il meccanismo tramite il quale un documento XML viene verificato affinchè possa essere identificato come conforme non solo sintatticamente ( well formed ), ma anche semanticamente, in linea col contesto applicativo e con le specifiche di funzionamento del sistema sottostante. Quindi si definisce un documento XML ben costruito come valido se è corretto sintatticamente e conforme semanticamente rispetto ad uno schema di riferimento. La definizione della struttura semantica di un documento XML può essere eseguita tramite tre diversi standard: DTD, XDR e XSD. DTD ( Document Type Definition ) è stata la prima tecnologia di validazione, mentre XDR ( XML Data Reduced ) è stata una tecnologia successivamente introdotta da Microsoft in alternativa a DTD (oggi ormai superata). Oggi lo standard più diffuso e utilizzato è XSD ( XML Schema Definition ), che ha soppiantato i suoi precursori decretandone l'obsolescenza.

DTD è stata la prima tecnologia di validazione introdotta. Si basa sui concetti di elemento, ovvero tag (ELEMENT), attributo (ATTLIST) ed entità (ENTITY). Tramite DTD è possibile individuare la tipologia del contenuto di un tag (ANY, PCDATA o EMPTY), definire raggruppamenti di elementi con la relativa molteplicità. E' inoltre possibile qualificare i vari attributi di un tag, specificando le caratteristiche distintive per ciascuno di essi (valore di default, vincoli di presenza, tipizzazione semplificata). Infine DTD permette di definire le entità, ovvero entity-name come &gt; oppure &amp; a cui corrispondono caratteri, parole o sequenze di parole che possono essere richiamate nell'ambito del documento XML a cui la DTD è associata. Le DTD possono essere di due tipi: pubbliche (PUBLIC), ovvero aperte a tutti, oppure di sistema (SYSTEM), ovvero private e non di pubblico dominio.

XSD è una grammatica XML che è stata introdotta nel 2001 ed oggi rappresenta lo standard di riferimento per quanto riguarda la validazione dei documenti XML. Rispetto a DTD, oltre che essere basata su XML, XSD permette di definire il nome e la posizione dei tag e degli attributi, specificandone il tipo (si tratta di una tipizzazione molto evoluta rispetto a DTD, basata su tipi di dati di largo uso e consumo, come integer, string, boolean, ecc.), il formato tramite l'uso di espressioni regolari, la molteplicità ed eventuali restrizioni. Esistono due classi di tipi di dato: tipi semplici e tipi complessi. I tipi semplici si distinguono in 19 tipi primitivi e 25 tipi derivati da questi ultimi (esempio di tipi primitivi: decimal, string, boolean, date, ecc. - esempio di tipi derivati: integer che deriva da decimal, token che deriva da string, ecc.). I tipi complessi sono stati pensati per definire elementi che non contengano solo testo, ma anche altri elementi e/o attributi.

Formattazione e grammatiche XML

XML nasce come un metalinguaggio semplicemente per strutturare informazioni. Quando l'esigenza è anche quella di presentare in un certo modo le informazioni all'utente finale, occorre associare al documento XML un foglio di stile (CSS) e/o una trasformazione (XSLT e XSL-FO) che permetta di rappresentare i dati in modo diverso (in XML, in HTML o in un altro formato).

Tramite CSS ( Cascading Style Sheet ) è possibile associare ai tag di un documento XML le informazioni di stile necessarie per rappresentare i contenuti in modo personalizzato. E' possibile associare stili direttamente ad una determinata tipologia di tag oppure definendo delle classi di rappresentazione. Le regole definite tramite CSS si applicano solamente ai nodi di tipo testo presenti nel documento XML, mentre gli attributi associati ai tag vengono trascurati e quindi non renderizzati.

XSLT ( eXtensible Stylesheet Language for Transformation ) è una grammatica XML introdotta nel 1999 che permette di trasformare un documento XML in ingresso in un documento di uscita ancora in formato XML (valido però rispetto ad uno schema differente), in HTML o in testo puro. Un documento XSLT è pertanto un documento XML ben costruito contenente elementi e attributi della grammatica XSLT. L'elemento fondamentale in un documento XSLT è il tag template , che rappresenta il modello di trasformazione (<xsl:template match="...">). I modelli di trasformazione vengono applicati ai diversi percorsi dell'albero dei nodi del documento XML di ingresso, utilizzando i criteri di ricerca e le regole di filtraggio XPath . La trasformazione si basa su costrutti per la lettura e la copia dei valori di un nodo (<xsl:value-of select="...">), su costrutti condizionali (<xsl:if test="...">, <xsl:choose><xsl:when test="...">...<xsl:otherwise>...), iterativi (<xsl:for-each select="...">) e di ordinamento (<xsl:sort select="...">).

XSL-FO ( eXtensible Stylesheet Language - Formatting Objects ) è una grammatica XML introdotta nel 1999 che è stata ideata per definire la formattazione di contenuti XML, per la successiva presentazione all'utente finale. Partendo dal documento XML ben costruito iniziale e passando attraverso una trasformazione XSLT, si può ottenere un documento XSL-FO da sottoporre ad un parser (per esempio: Apache-FOP). Il risultato finale è un documento in qualche formato non necessariamente testuale (PDF, RTF, PostScript, ecc.). Pertanto XSL-FO è una grammatica costituita da elementi e attributi per la definizione di informazioni tipografiche e di impaginazione, in maniera del tutto indipendente dal formato finale di presentazione. Il concetto base è quello di area : un documento FO definisce una serie di aree tipografiche in cui inserire i contenuti secondo stili di rappresentazione personalizzabili. Il parser di generazione non fa altro che interpretare l'albero delle aree e produrre l'output di conseguenza.

2 pagine in totale: 1 2

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata