Export des tableaux de Doctek vers DITA

Transformation des tableaux

Transformation relativement complexe car les tableaux peuvent contenir des cellules fusionnées, ce qui se traduit par des spans horizontaux ou verticaux.

La difficulté principale est que le mode de représentation des spans horizontaux en DITA est différent de la façon de faire sous Scenari, et la transformation n'est donc pas triviale.

Voici un résumé de la transformation à effectuer :

transformationTableaux

cols correspond au nombre maximum de cellules « unitaires » (sans span) sur une ligne.

Les valeurs entrées dans namest et nameend sont des valeurs déclarées dans des colspec et doivent correspondre à la colonne de début et celle de fin suivant la plage sur laquelle on veut que la cellule s'étende.

Solution apportée

Voici la solution que nous avons adoptée pour résoudre le problème :

<xsl:template match="sc:column">

<colspec colname="{count(preceding::sc:column) +1}"/>

</xsl:template>

On obtient ainsi des colspec numérotées de 1 à n pour les n colonnes, ainsi on peut se resservir de ces numéros de colonne lorsque l'on veut définir des spans horizontaux (les spans verticaux sont assez simples et consistent en un changement de balise (rowSpan devient morerows) sans oublier de décrémenter la valeur de 1)

Pour les spans horizontaux, il faut savoir dans quelle colonne on se trouve. Namest spécifie la première colonne « logique » à partir de laquelle (incluse) le span horizontal s'étend, cela correspond donc à la somme des colonnes logiques précédentes plus 1. Dans la transformation il faut tenir compte du fait que les colonnes précédentes peuvent également comporter un colSpan. De même, nameend spécifie la dernière colonne « logique » incluse dans le span horizontal, c'est-à-dire la somme des colonnes logiques précédant le span plus la longueur du span. Voici comment cela peut s'écrire :

<xsl:template match="sc:cell[@colSpan > 1]">

<entry>

<xsl:attribute name="namest">

<xsl:value-of select=" count(preceding-sibling::sc:cell[not(@colSpan)]) + sum(preceding-sibling::sc:cell/@colSpan) + 1"/>

</xsl:attribute>

<xsl:attribute name="nameend">

<xsl:value-of select="count(preceding-sibling::sc:cell[not(@colSpan)]) + sum(preceding-sibling::sc:cell/@colSpan) + @colSpan"/>

</xsl:attribute>

...