[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]
[volume]
[parte]
Capitolo 342. XSLT e XSL-FO
Fino a questo punto, XSLT e XSL-FO sono stati descritti separatamente, per evitare confusione, mentre fanno parte di un sistema integrato. Avendo compreso il meccanismo di XSLT e di XSL-FO, non dovrebbe essere difficile unire le due cose per trasformare un documento XML in un file XSL-FO, allo scopo di arrivare poi alla composizione finale.
In precedenza è stato mostrato un file XML molto semplice, associando a questo la trasformazione in formati comuni:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE relazione [
<!ELEMENT relazione (titolo?, data, contenuto)>
<!ATTLIST relazione
xml:lang CDATA "">
<!ELEMENT titolo (#PCDATA)>
<!ELEMENT data (#PCDATA)>
<!ELEMENT contenuto (paragrafo+, firma+)>
<!ELEMENT paragrafo (#PCDATA)>
<!ELEMENT firma (#PCDATA)>
]>
<relazione xml:lang="it">
<titolo>Relazione introduttiva su XML</titolo>
<data>11/11/2011</data>
<contenuto>
<paragrafo>XML sta per Extensible Markup Language. bla bla bla...
Perché,... così,... perciò,... sarà...</paragrafo>
<paragrafo>Bla, bla, bla....</paragrafo>
<firma>Pinco Pallino</firma>
</contenuto>
</relazione>
|
|
Per trasformare questo tipo di file in un foglio di stile XSL-FO, si può usare un foglio di stile XSLT come quello seguente; si osservi anche la presenza della dichiarazione del dominio applicativo associato al prefisso fo:.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output
method="xml"
indent="yes"
encoding="UTF-8" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="normale"
page-width="210mm" page-height="297mm"
margin-top="2cm" margin-bottom="2cm"
margin-left="2cm" margin-right="2cm">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="normale"
language="{relazione/@xml:lang}">
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates />
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="titolo">
<fo:block font-size="4mm"
space-after="1cm"
text-align="right"
color="blue">
<xsl:apply-templates />
</fo:block>
</xsl:template>
<xsl:template match="data">
<fo:block space-after="5mm">
<xsl:apply-templates />
</fo:block>
</xsl:template>
<xsl:template match="paragrafo">
<fo:block>
<xsl:apply-templates />
</fo:block>
</xsl:template>
<xsl:template match="firma">
<fo:block>
<xsl:apply-templates />
</fo:block>
</xsl:template>
</xsl:stylesheet>
|
|
In questo caso la trasformazione genera il file XSL-FO seguente:
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="normale" page-width="210mm"
page-height="297mm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm"
margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="normale" language="it">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="4mm" space-after="1cm" text-align="right"
color="blue">Relazione introduttiva su XML</fo:block>
<fo:block space-after="5mm">11/11/2011</fo:block>
<fo:block>XML sta per Extensible Markup Language. bla bla bla...
Perché,... così,... perciò,... sarà...</fo:block>
<fo:block>Bla, bla, bla....</fo:block>
<fo:block>Pinco Pallino</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
|
|
Il risultato della composizione:
Per il resto, si veda quanto già descritto in precedenza a proposito di XSLT nel capitolo 337.
342.1
Riferimenti
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome xslt_e_xsl_fo.htm
[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]