Accueil > Développement d'applications SDX > L'indexation


La transformation préalable des documents

Dernière modification : 2001/11/02 14:27:52     Contact : Martin Sévigny

Présentation

Dans certaines situations, il peut être préférable de demander à SDX de gérer un document légèrement différent de celui qu'on lui fournit. Par exemple, pour supprimer l'appel à une DTD ou pour résoudre certains liens au préalable, améliorant ainsi les performances.

SDX offre cette fonctionnalité nativement. Pour ce faire, on doit spécifier l'élément sdx:transformation dans le fichier de configuration, et avec celui-ci indiqué une feuille de style XSLT qui fera la transformation. Cette transformation se déroule avant l'indexation, et cette dernière opère sur le document transformé, et non sur le document original.

De plus, lorsqu'on demande à SDX de consulter un document, c'est le document transformé qui est envoyé, et non le document original. Ce dernier est utilisé seulement lors d'une opération de sauvegarde de la base de documents.

La transformation peut être quelconque, elle doit seulement être écrite en XSLT et produire un document XML bien formé en sortie.


<sdx:fieldList> <sdx:field code="texte" type="word" default="1"/> <sdx:field code="titre" type="field" brief="1"/> <sdx:field code="categorie" type="field" brief="1"/> </sdx:fieldList>

Dans cette base, nous voulons ajouter ce document :

<?xml version="1.0"?>
<doc id="d001" categorie="a2">
  <titre>Un essai d'indexation</titre>
  <corps>
    <p>L'indexation avec SDX est très facile, mais
       surtout elle est très souple!</p>
  </corps>
</doc>

La feuille de style XSLT qui permet l'indexation pourrait avoir cette allure :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:sdx="http://www.culture.gouv.fr/ns/sdx/sdx"
>

  <xsl:template match="/">
    <sdx:document id="{doc/@id}">

      <sdx:field code="texte"><xsl:value-of select="."/></sdx:field>

      <sdx:field code="titre">
        <xsl:value-of select="normalize-space(doc/titre)"/>
      </sdx:field>

      <sdx:field code="categorie">
        <xsl:choose>
          <xsl:when test="doc/@categorie = 'a1'">
            Informatique
          </xsl:when>
          <xsl:when test="doc/@categorie = 'a2'">
            XML
          </xsl:when>
          <xsl:when test="doc/@categorie = 'a3'">
            Java
          </xsl:when>
        </xsl:choose>
      </sdx:field>

    </sdx:document>
  </xsl:template>

</xsl:stylesheet>

L'application de cette feuille de style au document plus haut donnera comme résultat :

<?xml version="1.0"?>
<sdx:document id="d001" xmlns:sdx="http://www.culture.gouv.fr/ns/sdx/sdx">
  <sdx:field code="texte">
   Un essai d'indexation L'indexation avec SDX est très facile, mais
       surtout elle est très souple!
  </sdx:field>
  <sdx:field code="titre">
    Un essai d'indexation
  </sdx:field>
  <sdx:field code="categorie">XML</sdx:field>
</sdx:document>

C'est ce dernier document qui sera donc fourni au moteur d'indexation de SDX. Pour ce document, les champs texte, titre et categorie auront les valeurs indiquées dans le document. Ils seront indexés correctement, en fonction de leur type.

Le point clé est donc la feuille de style pour l'indexation, et le résultat qu'elle doit produire, deux aspects documentés par ailleurs.

Quelques remarques

Le scénario précédent illustre quelques concepts reliés à l'indexation dans SDX. Voici quelques remarques à ce sujet.


e your rights under this License.