E <      ^ R pdf    Documentation Xdepo > Guide utilisateur >                

 

Rechercher des documents XML

2005-02-11 / 2005-02-27
Sévigny, Martin (AJLSM, France)

Xdepo offre des fonctionnalités de recherche dans les documents XML d'une base de données. On peut distinguer deux fonctionnalités : la recherche simple et la recherche XQuery.

1) La recherche simple

La recherche simple est toujours accessible depuis la fenêtre de navigation Xdepo, dans la zone de recherche. Cette barre de recherche se présente sous cette forme :

Pour effectuer une recherche, vous pouvez indiquer quatre information différentes :

  1. La zone de recherche dans les documents, soit le texte intégral ou les identifiants Xdepo . Une liste déroulante en début de barre de recherche vous permet de spécifier cette information. Par défaut, la recherche se fait en texte intégral.
  2. Les mots à chercher. Une zone de texte en milieu de barre de recherche vous permet d'indiquer ces mots.
  3. Dans le cas où la recherche porte sur plusieurs mots, vous pouvez indiquer si vous souhaitez que tous les mots soient présents dans un document ou au moins un des mots. Des boutons radio vous permettent d'effectuer ce chois, sur la deuxième ligne de la barre de recherche. Par défaut, tous les mots doivent être présents.
  4. La localisation, soit les dossiers Xdepo où effectuer la recherche. Une liste déroulante vous propose toujours deux valeurs, soit la racine /, ce qui signifie toute la base de données, ou encore le dossier en cours de consultation. Vous pouvez choisir l'une ou l'autre option.

Une fois ces renseignements fournis, vous pouvez activer la recherche à l'aide du bouton Rechercher dans la barre de recherche.

Vous obtiendrez alors une fenêtre de résultats de recherche qui ressemblera à celle-ci :

Il s'agit en fait d'une interface très proche de la zone des documents dans la fenêtre de navigation standard de Xdepo. Chaque document trouvé est présenté sur une rangée, avec nue icône pour modifier le document et pour le télécharger. Ensuite, vous pouvez consulter le document en cliquant sur son titre, ou encore aller dans le dossier qui contient le document est cliquant sur le chemin du dossier, tout juste avant le nom.

Ce moteur de recherche simple est destiné en premier lieu à identifier rapidement les documents sur lesquels vous souhaitez travailler : modifier, consulter, copier, etc. Pour aller encore plus loin dans ce sens, Xdepo vous offre la particularité de recherche un document par son identifiant, si vous connaissez cette information. Dans ce cas, vous devriez obtenir un seul document en réponse et pouvoir agir dessus rapidement.

A noter que comme pour toute recherche, vous ne pourrez jamais retrouver des documents pour lesquels vous n'avez pas de droits de lecture.

2) La recherche XQuery

XQuery est un langage de recherche – et beaucoup plus – en phase de standardisation au W3C. Dans Xdepo, il permet de retrouver des documents en utilisant des requêtes complexes qui manipulent à la fois la structure et le contenu des documents XML. Mais il peut aussi servir à produire des rapports détaillés sur le contenu d'une base de données.

Les informations qui suivent vous permettent de savoir comment utiliser les fonction XQuery dans Xdepo, mais il ne s'agit en aucun cas d'une formation complète à cette norme.

Exécuter une recherche XQuery

Pour exécuter une recherche XQuery, vous devez utiliser le bouton XQuery dans la zone d'administration de la fenêtre de navigation Xdepo :

Après avoir cliqué sur ce bouton, vous obtiendrez le formulaire d'exécution de recherches XQuery tel que celui-ci :

Dans ce formulaire, vous pouvez spécifier la zone de recherche, vous pouvez sélectionner une requête prédéfinie ou encore saisir une nouvelle requête de recherche, vous pouvez spécifier une transformation XSLT à utiliser pour le traitement des résultats, et enfin vous devez déterminer le type de sortie. Nous allons reprendre chaque élément dans les paragraphes qui suivent.

La zone de recherche est spécifiée à l'aide de la liste déroulante Localisation . Cette liste contient deux entrées : la racine / ainsi que le dossier en cours. Pour chercher dans toute la base de données, sélectionner la racine /. Pour rechercher uniquement dans le dossier en cours, sélectionnez-le dans la liste déroulante.

A noter que lorsque vous souhaitez recherche dans un dossier spécifique, vous devez donc naviguer jusqu'à ce dossier avant d'actionner le bouton XQuery sinon vous ne pourrez pas le sélectionner.

Dans tous les cas, la zone de recherche inclus le dossier sélectionné dans la liste et tous ses sous-dossiers.

La liste déroulante des requêtes prédéfinies contient le titre des requêtes qui ont été préenregistrées dans le système. Vous pouvez en sélectionner une afin de l'exécuter. Les autres paramètres du formulaire seront utilisés pour paramétrer l'exécution de cette requête : localisation, transformation XSLT, type de sortie.

Sinon, vous pouvez saisir une requête ad hoc dans la zone de texte Requête de recherche . Si vous souhaitez une zone de saisie plus grande, sur plusieurs lignes, cliquez sur le lien plus grand à droite de la zone de texte, et vous obtiendrez alors une zone telle que celle-ci :

Le résultat d'une requête XQuery est en général du XML. Si vous souhaitez traiter ce XML avec une transformation XSLT pour produire un autre format XML ou du HTML, vous pouvez indiquer une transformation XSLT qui sera utilisée. Pour ce faire, il suffit de saisir l'URL de la XSLT à utiliser dans la zone de texte Transformation XSLT . A noter que cette URL doit être accessible au serveur, donc si vous indiquez une URL de type file:// il faut que le système de fichiers soit celui du serveur.

Regardons quelques exemples de requêtes de recherche.

Voici une requête de recherche qui trouve tous les documents ayant un titre en français :

/*[dc:title[@xml:lang]]

Une telle requête est plutôt une requête XPath mais le moteur de recherche de Xdepo les supporte sans problème. Chaque document qui respecte ce patron sera donc retourné. Avec un type de sortie Navigation Xdepo , le résultat sera semblable à celui-ci :

Avec un type de sortie XML Xdepo, le résultat obtenu sera le suivant :

<?xml version="1.0" encoding="UTF-8"?>
<xdepo:results count="4" usergroups=",dba,query,">
    <xdepo:result iter="0" uri="/docs/" doc="_meta.xml">
        <metadata xdepo:datatype="../xdepo-system/forms/meta" xdepo:id=""
                xdepo:savetype="auto" xdepo:timestamp="1109343973361">
            <dc:title xml:lang="fr">Documentation</dc:title>
            <dc:title xml:lang="en">Documentation</dc:title>
        </metadata>
    </xdepo:result>
    <xdepo:result iter="1" uri="/docs/test/" doc="_meta.xml">
        <metadata xdepo:datatype="../xdepo-system/forms/meta" xdepo:id=""
                xdepo:savetype="auto" xdepo:timestamp="1109343995323">
            <dc:title xml:lang="fr">Documents de test</dc:title>
            <dc:title xml:lang="en">Testing documents</dc:title>
        </metadata>
    </xdepo:result>
    <xdepo:result iter="2" uri="/docs/off/" doc="_meta.xml">
        <metadata xdepo:datatype="../xdepo-system/forms/meta" xdepo:id=""
                xdepo:savetype="auto" xdepo:timestamp="1109344056581">
            <dc:title xml:lang="fr">Documents officiels</dc:title>
            <dc:title xml:lang="en">Official documents</dc:title>
        </metadata>
    </xdepo:result>
    <xdepo:result iter="3" uri="/docs/drafts/" doc="_meta.xml">
        <metadata xdepo:datatype="../xdepo-system/forms/meta" xdepo:id=""
                xdepo:savetype="auto" xdepo:timestamp="1109368193281">
            <dc:title xml:lang="fr">Brouillons</dc:title>
        </metadata>
    </xdepo:result>
</xdepo:results>

Cette sortie montre que Xdepo fournit un élément xdepo:results pour des informations générales sur la requête, de même qu'un élément xdepo:result par résultat pour le contextualiser. Ensuite, il fournit le contenu du résultat. Ces informations peuvent vous permettre d'effectuer des mises en page sophistiquées sur des résultats de recherche.

Voici une requête de recherche qui liste les titres de documents en français en ordre alphabétique et affiche le titre en question :

<documents>
{
   for $title in /*/dc:title[@xml:lang='fr']
   order by $title
   return $title
}
</documents>

En sortie XML brut, le résultat peut être le suivant (nous avons omis les déclarations d'espace de noms pour plus de clarté) :

<?xml version="1.0" encoding="UTF-8"?>
<documents>
    <dc:title xml:lang="fr">Brouillons</dc:title>
    <dc:title xml:lang="fr">Documentation</dc:title>
    <dc:title xml:lang="fr">Documents de test</dc:title>
    <dc:title xml:lang="fr">Documents officiels</dc:title>
</documents>

On peut aussi utiliser la sortie XML brut pour effectuer une mise en forme HTML du résultat. Soit la transformation XSLT suivante :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
>
    <xsl:template match="documents">
        <html>
            <head>
                <title>Liste des documents avec un titre en français</title>
            </head>
            <body>
                <h1>Liste des documents avec un titre en français</h1>
                <ol>
                    <xsl:apply-templates/>
                </ol>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="dc:title">
        <li><xsl:apply-templates/></li>
    </xsl:template>
</xsl:stylesheet>

Si on indique le chemin de cette XSLT au moment d'effectuer la requête, le résultat obtenu en HTML sera :

3) Stocker une requête XQuery

Xdepo propose une interface permettant de créer des requêtes XQuery, de les stocker dans la base de données et ensuite pour les exécuter lorsque souhaité. Cette interface est matérialisée par un type de données xquery et par un formulaire associé. C'est pourquoi vous pouvez créer une telle requête n'importe où dans les dossiers de la base de données, en utilisant les mécanismes habituels de création de documents . Toutefois, nous allons expliquer ici les détails du formulaires de saisie d'une requête XQuery.

Pour créer une requête XQuery, cliquer sur le bouton Ajouter un document dans le dossier souhaité. Puis, dans le formulaire de choix d'un type de données, formulaire et modèle, choisissez les options suivantes :

Lorsque vous aurez cliqué sur le bouton Créer le document , vous aurez le formulaire de création d'une requête XQuery, tel que celui-ci :

Ce formulaire est semble à celui d'exécution d'une requête XQuery, du moins dans les concepts utilisés. On y retrouve le nom de la requête, la localisation où effectuer la requête, le contenu de la XQuery elle-même, la transformation XSLT à utiliser, le type de sortie de la XSLT, le nombre de paramètres dans la XQuery, ainsi que le type de sortie souhaité pour la XQuery. Nous allons reprendre ces concepts un par un.

Mais avant toute chose, soulignons que le document créé avec ce formulaire est un document XML qui contient toutes les informations saisies dans le formulaire. Vous pouvez le gérer comme tous les autres documents de la base de données : déplacer, copier, modifier les permissions, etc.

Le nom développé permet de donner un nom significatif à la XQuery. C'est également le titre qui sera utilisé dans la fenêtre de navigation Xdepo. Vous pouvez définir plusieurs noms avec des langues différentes.

La localisation est le dossier racine où exécuter la XQuery. Ce dossier et tous ces dossiers seront recherchés. Pour chercher dans toute la base, utiliser la localisation racine : /.

Vous pouvez charger une transformation XSLT à utiliser pour traiter les résultats de la requête XQuery. Pour ce faire, vous n'avez qu'à utiliser le bouton Parcourir... pour sélectionner la XSLT sur votre poste de travail.

Si vous avez chargé une transformation XSLT, alors vous devez également spécifier le type de sortie de votre transformation , soit XML ou HTML.

Xdepo permet de paramétrer les requêtes de recherche . Ainsi, vous pouvez insérer dans la XQuery des chaînes spéciales param_0:# , param_1:# , etc. et ensuite ces valeurs seront remplacées par celles fournies au moment de l'exécution de la requête. Ce mécanisme est très utile pour définir des requêtes relativement générique et les spécialiser au moment de l'exécution. Dans le formulaire, vous devez indiquer le nombre de paramètres de recherche.

Enfin, vous devez spécifier le type de sortie de la requête XQuery que vous souhaitez, celle qui sera envoyée au navigateur ou à la transformation XSLT si une telle transformation est spécifiée. Les options sont les mêmes que pour les requêtes de recherche ad hoc expliquées ci-dessus.

Une fois que vous cliquez sur le bouton Enregistrer , le document XML sera créé et vous pourrez l'utiliser par la suite.