Capítol 6. Anàlisi i modificació de les Fulles d'Estil.

Sumari

6.1. Com modificar el comportament de les Fulles d'Estil
6.1.1. La capa de Personalització.
6.2. Anàlisi de les Directrius d'Accessibilitat.
6.2.1. Directriu 1
6.2.2. Directriu 2
6.2.3. Directriu 3
6.2.4. Directriu 4
6.2.5. Directriu 5
6.2.6. La resta de directrius.

6.1. Com modificar el comportament de les Fulles d'Estil

Les Fulles d'estil tenen un comportament molt versàtil per tal que es puguen ajustar a les nostres necessitats sense haver de tocar el codi XSLT en la majoria dels casos. Els canvis més radicals requeriran una modificació del codi.

Utilitzar els paràmetres

En la documentació de les Fulles d'estil que podem veure a http://docbook.sourceforge.net/release/xsl/current/doc/ hi ha una referència completa dels paràmetres per a la transformació a HTML i per a la transformació a XSL:FO. Els paràmetres es poden passar per la línia de comandaments al processador XSLT, però degut a la gran quantitat i complexitat d'algun d'ells és preferible utilitzar una capa de personalització, que consisteix en un fitxer de text que conté els paràmetres i els seus valors. A més aquesta capa també contindrà les plantilles que modifiquem o creem.

6.1.1. La capa de Personalització.

Consisteix en un arxiu XML que segueix l'esquema XSLT, és a dir que és una fulla d'estil. Aquesta fulla d'estil contindrà les modificacions que realitzem, separades de les fulles d'estil original, amb la ventaja de mantenir els canvis localitzats al mateix fitxer i no haver de buscar entre tots els que componen les fulles d'estil, i que podem actualitzar les fulles d'estil a les noves versions que ixin sense cap problema. En el transcurs de la realització d'aquest projecte s'han actualitzat les fulles d'estil de la versió 1.70.1 a la 1.71.1 i només ha calgut substituir la carpeta amb la nova versió.

El procés és el següent: creem la nostra capa de personalització i al cridar la transformació per la línia de comandaments, en lloc de referenciar la fulla d'estil, el que referenciem és l'arxiu que conté la capa de personalització. Dins d'aquest arxiu el que es fa és incloure la fulla d'estil que anem a utilitzar. Per exemple, si el que es vol és transformar DocBook a HTML en un sol arxiu, hem d'utilitzar la fulla d'estil /html/docbook.xsl. Creem la nostra capa de personalització amb sintaxi XSLT, i la primera instrucció que apareix és <xsl:import href="file:///c:/docbook-xsl-1.71.1/html/docbook.xsl"/> i després tota la llista de paràmetres amb la sintaxi XSLT, que es poden especificar de varies maneres:

  • <xsl:param name="nom-parametre" select="'valor-parametre'"/>

  • <xsl:param name="nom-parametre">valor-parametre</xsl:param>

Suggeriment

Si el valor del paràmetre és una cadena de caracters, ha d'anar entre cometes simples si l'especifiquem de la primera manera, i estes al mateix temps entre cometes dobles, ja que sinó la sintaxi XSLT agafa el valor del paràmetre com al nom d'un element, no com a una cadena de caracters.

Els paràmetre més complexes es defineixen em a grup d'atributs, i la seva sintaxi és la següent:

<xsl:attribute-set name="nom-grup-atributs">
  <xsl:attribute name="nom-atribut">
    <xsl:value-of select="$nom-parametre"/>
  </xsl:attribute>
  <xsl:attribute name="nom-atribut">valor-atribut</xsl:attribute>
  ...
  <xsl:attribute name="nom-atribut">valor-atribut</xsl:attribute>
</xsl:attribute-set>
			

Al grup d'atributs anterior podem veure com un dels atributs pren el valor d'un paràmetre.

A continuació un exemple de capa de personalització simple que especifica el valor d'un paràmetre i utilitza la fulla d'estil /html/docbook.xsl per a transformar DocBook a HTML:

Exemple 6.1. Capa de personalització simple amb un paràmetre.

<?xml version='1.0'?>                                      (1)
<xsl:stylesheet                                            (2)
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" versio(3)n="1.0">

<xsl:import href="file:///c:/docbook-xsl-1.71.1html/docbook(4).xsl"/>

<!--Aquest paràmetre indica quin fitxer conté el codi
    css per a associar amb l'arxiu HTML generat.    -->
<xsl:param name="html.stylesheet" select="'estil.css'"/>   (5)

</xsl:stylesheet>                                          (6)
			
(1)

Versió XML que s'utilitza a l'arxiu.

(2)

Aquesta etiqueta indica l'inici d'una fulla d'estil XSLT.

(3)

L'atribut xmlns:xsl indica que les etiquetes que pertanyen al codi XSLT comensen amb el prefixe xsl:. Aquest prefixe és necessari ja que les fulles d'estil mesclen dos llenguatges XML, el propi de les fulles d'estil i el del llenguatge que estàn transformant. D'aquesta manera el processador XSLT pot distinguir quins elements pertanyen a XSLT i quins no.

(4)

Amb aquesta etiqueta s'importa la fulla d'estil estàndard per a transformar a HTML. La localització del fitxer ha de seguir la sintaxi de l'estàndard URI (URI), com la majoria de referències en la família de llenguatges XSL.

(5)

El paràmetre i el seu valor, seguint la sintaxi explicada prèviament.

(6)

Etiqueta que tanca la fulla d'estil.


Modificar les plantilles o templates

Les fulles d'estil s'estructuren el plantilles de dos tipus, les que tenen un patró per a identificar a quin element de DocBook s'apliquen i les que tenen un nom únic per a poder ser instanciades per altre plantilles, amb la següent sintaxi:

  • <xsl:template match="elementDocBook">...codi XSLT de la plantilla...</xsl:template>

  • <xsl:template name="nom-plantilla">...codi XSLT de la plantilla...</xsl:template>

Si el codi que volem generar per a un determinat element DocBook no es pot aconseguir mitjançant l'ús de paràmetres, hem de localitzar la plantilla que transforma eixe element, fent una cerca de l'atribut match que siga igual al element en qüestió. S'ha de tindre en compte que pot haver més d'una plantilla que modifique un element, per exemple l'element <para> pot tindre una plantilla amb l'atribut mathc="para" i una altra amb match="chapter/para". La segon plantilla s'aplica a un element <para> dins d'un element <chapter> i és més especifica. El processador sempre triarà la plantilla que siga més específica.

Una vegada localitzada la plantilla en qüestió, la copiem a la capa de personalització i la modifiquem. La precedència dels xsl:import fa que el processador aplique abans la nostra plantilla que no la de les fulles d'estil. És per això que si hi ha vàries plantilles per a un element, hem de copiar-les totes encara que només ne modifiquem una, per a mantenir la precedència entre elles.