Blog


« Précédent | Suivant »

XSLT pour transformer un fichier XBEL en fichier FreeMind

Par Black Fox le 08 Septembre 2004 @ 21:10

FreeMind est un logiciel de créations de MindMap, c'est à dire d'arbres qui permettent de réfléchir sur un sujet ou de stoquer des choses sans contrainte (Bien pratique pour réfléchir à quelquechose sans l'oublier)

Un exemple de MindMap

Et il est parfois pratique de disposer de ses bookmarks sous FreeMind pour les ajouter facilement à une MindMap que l'on est en train de créer ou autre.

Le format XBEL ainsi que celui de FreeMind étant le XML j'ai donc écrit un fichier XSLT (Une syntaxe XML qui décrit une transformation à appliquer à un fichier XML pour le transformer en autre chose, principalement un autre document XML) qui permets de générer une MindMap FreeMind à partir d'un fichier XSLT.

Le fichier est ici : Xbel To Freemind ou en clair dans la suite de ce post (Mais illisible pour ceux qui ont un navigateur trop ancien comme Internet Explorer 6, voir mon post IE et les CDATA ).

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

  <!-- Variables -->
  <xsl:variable name="process-alias" select="true()" />
  <xsl:variable name="alias-arrow" select="true()" />
  <xsl:variable name="default-folded" select="true" /> <!-- A implémenter -->

  <xsl:template match="/">
    <map version="0.7.1">
      <!-- L'élément Root est nomé "xbel" -->
      <xsl:apply-templates select="xbel" />
    </map>
  </xsl:template>

  <xsl:template match="xbel|folder|bookmark" mode="identified-item">
    <!-- Titre -->
    <xsl:attribute name="TEXT">
      <xsl:value-of select="title"/>
    </xsl:attribute>

    <!-- Id -->
    <xsl:if test="@id">
      <xsl:attribute name="ID">
        <xsl:value-of select="@id"/>
      </xsl:attribute>
    </xsl:if>
  </xsl:template>

  <xsl:template match="xbel|folder">
      <node>
        <!-- Couleurs -->
        <xsl:if test="name()='folder'">
          <xsl:attribute name="COLOR">#006699</xsl:attribute>
        </xsl:if>
        <xsl:if test="name()='xbel'">
          <xsl:attribute name="COLOR">#006633</xsl:attribute>
        </xsl:if>

        <!-- Titre et Id -->
        <xsl:apply-templates select="." mode="identified-item"/>

        <!-- Folded ? -->
        <xsl:if test="@folded='yes'">
          <xsl:attribute name="FOLDED">true</xsl:attribute>
        </xsl:if>
        <xsl:if test="@folded='no'">
          <xsl:attribute name="FOLDED">false</xsl:attribute>
        </xsl:if>

        <!-- Décendants -->
        <xsl:apply-templates select="folder" />
        <xsl:apply-templates select="bookmark" />
        <xsl:if test="$process-alias">
          <xsl:apply-templates select="alias" />
        </xsl:if>

        <!-- icone -->
        <xsl:if test="name()='xbel'">
          <icon BUILTIN="gohome" />
        </xsl:if>
      </node>
  </xsl:template>

  <xsl:template match="bookmark">
      <node COLOR="#0000FF">
        <xsl:apply-templates select="." mode="identified-item"/>
        <!-- Lien -->
        <xsl:attribute name="LINK">
          <xsl:value-of select="@href"/>
        </xsl:attribute>
      </node>
  </xsl:template>

  <xsl:template match="alias">
    <node COLOR="#999999">
      <!-- Titre -->
      <xsl:attribute name="TEXT">Alias pour <xsl:value-of select="(/xbel//folder|/xbel//bookmark|/xbel)[@id=current()/@ref]/title"/></xsl:attribute>

      <!-- Flèche -->
      <xsl:if test="$alias-arrow">
        <arrowlink ENDARROW="Default">
          <!-- Cible du lien -->
          <xsl:attribute name="DESTINATION">
            <xsl:value-of select="@ref"/>
          </xsl:attribute>
        </arrowlink>
      </xsl:if>

      <!-- Police -->
      <font NAME="Default" SIZE="10"/>
    </node>
  </xsl:template>
</xsl:stylesheet>

Menu de navigation