Documentation SDX v 1.1
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.
Document précédent : L'indexation des documents XML |
Table des matières | Document suivant : La feuille de style d'indexation |
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.
L'utilisation de la structure se fait au moment de l'indexation, et cette utilisation de la structure est limitée seulement par la puissance expressive de la norme XSLT, ce qui est intéressant.
La norme XSLT prévoit une fonction appelée document() qui permet d'inclure dans le traitement des informations provenant de n'importe quel flux XML (par exemple un fichier) que l'on peut obtenir par une adresse URL. Ainsi, dans l'exemple précédent, on aurait pu remplacer la logique sur la catégorie par un fichier de définition des catégories, en XML, et utiliser ce fichier pour inclure des données complètes plutôt que des codes.
SDX peut indexer non seulement le contenu des documents XML, mais également du contenu généré. Ce mécanisme peut être très puissant, et l'exemple des catégories l'exprime quelque peu. Ainsi, dans une base SDX, on peut faire des recherches sur des mots et trouver des résultats, même si aucun document ne contient ces mots !
Document précédent : Le fichier de configuration d'une base de documents |
Table des matières | Document suivant : La transformation préalable des documents |