[ODF] Création de sections Docbook
Bonjour,
Je voudrais permettre à mes collègues de saisir leurs pages web sous Word pour plus de facilités. La procédure est la suivante : créer un document word stylé (toute la mise en page autorisée est disponible dans les styles), l'ouvrir dans Open Office, l'enregistrer dans Open Office au format Docbook (xml), l'importer dans notre portail web (après avoir supprimé la ligne de DTD).
Je travaille donc sur la feuille XSLT d'Open Office pour transformer les styles crés sous word en xml lisible par notre portail web.
Je connais la docbook, je n'ai aucune formation en XSLT, je ne suis pas informaticienne et je n'ai personne qui puisse m'aider. Voilà pour la présentation.
Le problème le plus important que je rencontre :
Je voudrais avoir une structure :
Code:
1 2 3 4 5 6 7 8 9
| <article>
- <section id="titre">
<title>Titre vert</title>
</section>
- <section label="text">
<title>Titre rouge</title>
<para>.........</para>
</section>
</article> |
mais je ne sais pas comment créer une section qui imbrique tout le reste.
Je sais créer une section pour un élement :
Code:
1 2 3 4 5 6 7 8
| <xsl:template match="text:p[@text:style-name='Titre vert']">
<xsl:element name="section">
<xsl:attribute name="id">titre</xsl:attribute>
<xsl:element name="title">
<xsl:apply-templates/>
</xsl:element>
</xsl:element>
</xsl:template> |
Je sais que la création de section est présente dans mon fichier dans les séquences suivantes (avec make-section) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| <xsl:template match="text:h[@text:level='1']">
<xsl:choose>
<xsl:when test=".='Abstract'">
<abstract>
<xsl:apply-templates select="key('headchildren', generate-id())"/>
<xsl:apply-templates select="key('children', generate-id())"/>
</abstract>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="make-section">
<xsl:with-param name="current" select="@text:level"/>
<xsl:with-param name="prev" select="1"/>
</xsl:call-template>
<!--<sect1>
<title>
<xsl:apply-templates/>
</title>
<xsl:apply-templates select="key('headchildren', generate-id())"/>
<xsl:apply-templates select="key('children', generate-id())"/>
</sect1>-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="text:h[@text:level='2'] | text:h[@text:level='3']| text:h[@text:level='4'] | text:h[@text:level='5']">
<xsl:variable name="level" select="@text:level"/>
<xsl:call-template name="make-section">
<xsl:with-param name="current" select="$level"/>
<xsl:with-param name="prev" select="preceding-sibling::text:h[@text:level < $level][1]/@text:level "/>
</xsl:call-template>
</xsl:template>
<xsl:template name="make-section">
<xsl:param name="current"/>
<xsl:param name="prev"/>
<xsl:choose>
<xsl:when test="$current > $prev+1">
<xsl:text disable-output-escaping="yes"><section label="</xsl:text>
<xsl:value-of select="$prev +1"/>
<xsl:text disable-output-escaping="yes">"></xsl:text>
<title>
</title>
<xsl:call-template name="make-section">
<xsl:with-param name="current" select="$current"/>
<xsl:with-param name="prev" select="$prev +1"/>
</xsl:call-template>
<xsl:text disable-output-escaping="yes"></section</xsl:text>
<xsl:text disable-output-escaping="yes">></xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text disable-output-escaping="yes"><section label="</xsl:text>
<xsl:value-of select="$current"/>
<xsl:text disable-output-escaping="yes">"></xsl:text>
<xsl:choose>
<xsl:when test="$current < 3">
<title>
<xsl:apply-templates/>
</title>
</xsl:when>
<xsl:otherwise>
<title/>
<subtitle>
<xsl:apply-templates/>
</subtitle>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="key('headchildren', generate-id())"/>
<xsl:apply-templates select="key('children', generate-id())"/>
<xsl:text disable-output-escaping="yes"></section</xsl:text>
<xsl:text disable-output-escaping="yes">></xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template> |
Mais je ne comprends pas ce que signifient ces séquences et comment je dois les modifier pour obtenir ce que je veux.
Merci de votre aide !