Télécharger
    Installer
    Présentation
    Configuration
    Indexation
    Recherche
    OAI
    Javadoc
    Référence API-XSP
       Pages XSP
       Paramètres SDX
       Vue d'ensemble
          Structure
          Paramètres et flux
          Identification
          Droits
          Localisation
          Pipelines
          Thesaurus
          Indexation
          Recherche
             Index
            +Requêtes <-
             Paramètres
             Amender
             Résultats
          Documents
       Liste alphabétique
    Migration
    Schemas
    Performances


SDX

Exécution des requêtes

Concepts clés

Introduction

SDX est avant tout un outil de recherche d'informations dans une collection de documents XML. Il offre ainsi au développeur un large panel d'éléments pour construire les outils de recherche de son application. Il n'est pas question de développer les caractéristiques de la recherche documentaire dans cette page. Cet aspect très important de SDX occupe déjà un chapitre complet de cette documentation (TODO : lien vers le chapitre). On se contentera de reprendre quelques informations.

Génération d'une requête

La génération d'une requête (et donc d'un résultat de requête) dans SDX se déroule en trois phases :

  1. La construction de la requête ;

  2. L'exécution de la requête ;

  3. Le résultat de la requête.

Il est important d'avoir cette vue d'ensemble de la génération d'une requête pour bien comprendre l'emploi des outils de l'API-XSP de SDX décrits dans cette documentation technique. Cette page ne présente que les deux première phases de génération (la construction et l'exécution). Les éléments SDX liés aux résultats d'une interrogation sont décrits dans la section Gestion des résultats .

Le tableau ci-après classe les différents éléments de l'API-XSP entrant dans la construction de la recherche documentaire dans une application SDX selon la place qu'ils occupent dans ce processus :

Type de requêteDescriptionElément de constructionElément d'exécution
Types de requêtes
Recherche sur champ Retrouver une valeur précise dans un champ. sdx:fieldQuery sdx:executeFieldQuery
Recherche sur liste Retrouver plusieurs valeurs dans un ou plusieurs champs. sdx:listQuery sdx:executeListQuery
Recherche par date Retrouver une date précise ou dans un intervalle de temps. sdx:dateQuery sdx:executeDateQuery
Recherche simple Retrouver un ou plusieurs mots dans un document. sdx:simpleQuery sdx:executeSimpleQuery
Syntaxe de requête
Recherche linéaire Formuler des requêtes sur un même niveau. sdx:linearQuery sdx:executeLinearQuery
Recherche complexe Formuler des requêtes à plusieurs niveaux de regroupements sdx:complexQuery sdx:executeComplexQuery
Recherche simple Formuler une requête d'après la syntaxe Lucene (moteur de recherche par défaut de SDX) sdx:simpleQuery sdx:executeSimpleQuery

En guise de conclusion de cette introduction, il convient de noter que SDX offre plusieurs manières d'améliorer une requête. On peut choisir (a priori du résultat) d'étendre celle-ci à l'aide d'un thesaurus ou, au contraire, d'y appliquer un filtre. Il est également possible de reprendre une recherche (on agit ici a posteriori du résultat) pour la retravailler. Ces éléments de l'API-XSP de SDX sont décrits plus loin.

sdx:fieldQuery(CHECK)

Description

Dans le panel des actions de recherche mises à disposition par SDX, sdx:fieldQuery représente la recherche la plus précise, celle qui permet de réduire le bruit à son minimum. Pour cela, sdx:fieldQuery recherche une valeur précise dans un champ. Par exemple, on peut retrouver les documents dont le sujet est explicitement Cartographie de la France. Ce type de requête ne prendra pas en compte les documents dont le sujet s'en approche tel que Cartographie de l'Aquitaine ou Archéologie de la France. C'est en cela que ce type de recherche est le plus précis.

Il est toutefois important de noter que cette méthode n'est logiquement utilisable que sur des index de type field. C'est-à-dire des champs indexés tels quels, les termes qu'ils contiennent étant considérées comme une seule et même valeur. Utiliser une requête sur champ sur un index de type word (chaque terme correspond à une valeur à indexer) serait illogique et n'aurait peu ou pas de chance d'aboutir à un résultat.

Note

Il est important de noter que ce type de requête ne fait pas intervenir l'analyseur de mot, contrairement aux autres types de recherche. Il n'y a donc pas de transformation de la valeur recherchée : value="France" signifie que l'on recherchera sera recherchée telle que, et non pas france.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationDans une sdx:executeComplexQuery ou un sdx:executeFieldQuery .
Contenu éventuelUn élément sdx:expandQuery offrant l'utilisation d'un thesaurus. Des stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (la requête n'est pas valide), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

NomDescriptionPrésence
field Nom du champ interrogé.Obligatoire
f Idem. Déprécié  
value Valeur ou terme recherché.Obligatoire
v Idem. Déprécié  

sdx:executeFieldQuery(CHECK)

Description

sdx:executeFieldQuery apporte l'environnement nécessaire à l'exécution d'une requête sur champ.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationN'importe où dans sdx:page .
Contenu éventuelDes stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (il n'y a aucun résultat à la requête posée), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

Paramètres communs aux actions de requêtes (facultatifs).

NomDescriptionPrésence
field Nom du champ interrogé.Obligatoire
f Idem. Déprécié  
value Valeur ou terme recherché.Obligatoire
v Idem. Déprécié  

Exemples

Exemple 1. Rechercher les documents ayant un même auteur

Dans l'exemple suivant, on veut obtenir la liste des documents écrits par le même auteur, et seulement ces documents.

<sdx:page>
 <sdx:executeFieldQuery base="sdxworld" field="auteur" value="Emile Zola"/>
</sdx:page>

Exemple 2. Rechercher un terme dans un index

Dans l'exemple suivant, on recherche l'ensemble des documents d'une base de documents. On recherche dons strictement la même chose dans l'exemple illustrant une recherche simple. La manière d'y arriver n'est cependant pas la même.

<sdx:page>
 <sdx:executeFieldQuery
   base="sdxworld sdxdoc"
   field="sdxall"
   value="1"
   hpp="-1"
 />
</sdx:page>

On trouvera un exemple atypique de l'utilisation de sdx:executeFieldQuery dans la description de sdx:debug.

sdx:listQuery

Description

Dans le panel des actions de recherche SDX, sdx:listQuery représente la recherche d'une liste de termes. On peut y voir une extension de la recherche sur champ.

Lorsqu'une base indexe un champ répétable (auteur(s), sujet(s), etc.), il peut être intéressant de rechercher les documents répondant à plusieurs valeurs sur ce même champ. La recherche d'une liste (paramètre value répétable sur le champ field), correspond à la requête simple +field:value1 +field:value2 +field:value3. Notez que l'opérateur par défaut est un ou logique. Il peut être modifié en et (op=or|and) pour donner la requête suivante : field:value1 field:value2 field:value3.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationDans une sdx:executeComplexQuery ou un sdx:executeFieldQuery .
Contenu éventuelUn élément sdx:expandQuery offrant l'utilisation d'un thesaurus. Des stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (la requête n'est pas valide), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

NomDescriptionPrésence
op Opérateur de requête. L'opérateur par défaut est un ou logique.Facultatif
field Nom du champ interrogé.Obligatoire
f Idem. Déprécié  
value Valeur ou terme recherché.Obligatoire
v Idem. Déprécié  

sdx:executeListQuery(CHECK)

Description

sdx:executeListQuery apporte l'environnement nécessaire à l'exécution d'une requête sur liste.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationN'importe où dans sdx:page .
Contenu éventuelDes stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (il n'y a aucun résultat à la requête posée), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

Paramètres communs aux actions de requêtes (facultatifs).

NomDescriptionPrésence
op Opérateur de requête. L'opérateur par défaut est un ou logique.Facultatif
field Nom du champ interrogé.Obligatoire
f Idem. Déprécié  
value Valeur ou terme recherché.Obligatoire
v Idem. Déprécié  

Exemples

Exemple 3. Rechercher plusieurs termes dans un index

Dans l'exemple suivant, on recherche les termes "verne" et "jules" dans un index répétable "auteur". On omet de préciser l'application et la base de documents ; il s'agit de l'application et de la base de documents courantes comme décrit dans la section sur les paramètres.

<sdx:page>
 <sdx:executeListQuery field="auteur" value="verne jules" op="and"/>
</sdx:page>

sdx:dateQuery(CHECK)

Description

Dans le panel des actions de recherche fournies par SDX, sdx:dateQuery représente une recherche de dates (représentant ou non un intervalle).

La recherche par intervalle de dates ne donnera de résultats intéressants que pour un champ de type date. Il s'agit d'une recherche où l'on peut spécifier une date de début ou une date de fin (voire les deux) et trouver des résultats dont le champ spécifié contient une date entre ces deux valeurs. Si l'une des deux dates n'est pas spécifiée, la recherche n'est pas bornée. Si aucune date n'est spécifiée, il y aura une erreur d'exécution.

TODO : décrire l'usage de 2 champs s'appliquant réciproquement au champ concerné par to (!) puis à celui concerné par from

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationDans une sdx:executeComplexQuery ou un sdx:executeDateQuery .
Contenu éventuelDes stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (la requête n'est pas valide), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

NomDescriptionElément correspondant 
field Le nom du champ que l'on souhaite interroger. sdx:fields Obligatoire
f Idem. Déprécié sdx:fields  
from Borne de départ (on recherchera les dates plus récente que celle-ci). sdx:from Obligatoire (si to n'est pas donné).
to Borne de fin (on recherchera les dates plus anciennes que celle-ci). sdx:to Obligatoire (si from n'est pas donné).

sdx:executeDateQuery(CHECK)

Description

sdx:executeDateQuery apporte l'environnement nécessaire à l'exécution d'une requête sur date.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationN'importe où dans sdx:page .
Contenu éventuelDes stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (il n'y a aucun résultat à la requête posée), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

Paramètres communs aux actions de requêtes (facultatifs).

NomDescriptionElément correspondant 
field Le nom du champ que l'on souhaite interroger. sdx:fields Obligatoire
f Idem. Déprécié sdx:fields  
from Borne de départ (on recherchera les dates plus récente que celle-ci). sdx:from Obligatoire (si to n'est pas donné).
to Borne de fin (on recherchera les dates plus anciennes que celle-ci). sdx:to Obligatoire (si from n'est pas donné).

Exemples

Exemple 4. Recherche sur un intervalle de dates

Dans l'exemple suivant, on recherche les documents qui ont été créés (champ creation) entre le 23 et le 24 mai 2003. On omet de préciser l'application et la base de documents ; il s'agit de l'application et de la base de documents courante comme décrit dans la section sur les paramètres.

<sdx:page>
 <sdx:executeDateQuery field="creation" from="2003-05-23" to="2003-05-24"/>
</sdx:page>

sdx:dateIntervalQuery Déprécié (CHECK)

L'action sdx:dateIntervalQuery est identique à sdx:dateQuery . On se reportera à cette dernière pour en connaître la définition.

sdx:executeDateIntervalQuery Déprécié (CHECK)

L'action sdx:executeDateIntervalQuery est identique à sdx:executeDateQuery . On se reportera à cette dernière pour en connaître la définition.

sdx:simpleQuery

Description

Malgré son nom sdx:simpleQuery représente sans doute l'élément le complexe ou le puissant des API décrites ici. La lecture du tableau de classement au début de cette page peu laisser perplexe dans la mesure où sdx:simpleQuery apparaît à deux endroits, dans les types ainsi que dans les syntaxes de requêtes. Cela traduit, en effet, le double aspects de cet élément.

D'un côté il représente le type le plus simple de requête supporté par SDX. On recherche un mot dans le champ par défaut (défini dans application.xconf ; s'il n'y en a pas Lucene prend le dernier de la liste : FIXME). De l'autre côté, sdx:simpleQuery permet d'effectuer une requête directement dans le langage de l'analyseur de requête (query parser) de Lucene (i.e., le moteur de recherche par défaut supporté par SDX). Cela signifie que l'on peut concrètement effectuer l'ensemble des types de recherche décrits ci-avant :

La recherche sur liste

+titre:france +titre:cartographie

La recherche linéaire

+titre:france +auteur:verne -auteur:jules

La recherche par date

+creation:[2002-05-28 TO 2003-05-28]

La recherche complexe

(+titre:france +titre:cartographie) -(+auteur:verne +:auteur:jules) +creation:[2002-05-28 TO 2003-05-28]

SDX ajoute une fonctionnalité à cette syntaxe déjà importante. Il permet l'utilisation d'un opérateur |. Lorsque cet opérateur englobe le terme recherché, il déconnecte l'analyseur de mot. De cette manière, il est possible d'effectuer une recherche sur champ. La requête simple titre:|France| donnera tous les documents dont le champ titre contient le mot "France" avec la majuscule.

Note

Il est bien entendu indispensable que le champ titre en question ait été indexé en field et non comme word, sinon on obtiendra les documents qui ont France, mais également autre chose dans le titre

Une requête simple peut-être exécutée en tant que telle grâce à l'action sdx:executeSimpleQuery . Elle peut également entrer dans la construction d'une requête complexe.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationDans une sdx:executeComplexQuery ou un sdx:executeSimpleQuery .
Contenu éventuelUn élément sdx:expandQuery offrant l'utilisation d'un thesaurus. Des stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (la requête n'est pas valide), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

NomDescription 
query Le contenu de la requête (les termes recherchés ou la syntaxe Lucene).Obligatoire
q Idem. Déprécié  
field Identifiant du champ dans lequel on souhaite effectuer la recherche. S'il n'est pas spécifié, SDX emploie le champ marqué par défaut dans le fichier application.xconf.Facultatif
f Idem. Déprécié  
op Opérateur de requête. Par défaut, il s'agit d'un ou logique.Facultatif

sdx:executeSimpleQuery(CHECK)

Description

sdx:executeSimpleQuery apporte l'environnement nécessaire à l'exécution d'une requête simple.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationN'importe où dans sdx:page .
Contenu éventuelDes stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (il n'y a aucun résultat à la requête posée), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

Paramètres communs aux actions de requêtes (facultatifs).

NomDescriptionElément correspondant 
query Le contenu de la requête (syntaxe Lucene). sdx:simpleQuery Obligatoire
q Idem. Déprécié sdx:simpleQuery  
op Opérateur de requête. L'opérateur par défaut est un ou logique. sdx:simpleQuery Facultatif

Exemples

Exemple 5. Rechercher l'ensemble des documents

Dans l'exemple suivant, on recherche l'ensemble des documents contenus dans deux bases de document sdxworld et sdxdoc (ce sont les deux bases de documents définies dans l'application SDXTest). Lors de l'indexation, chaque document se voit affecté un champ sdxall avec une valeur de 1. De cette manière, il suffit d'interroger sur ce champ pour avoir l'ensemble des documents. Le paramètre hpp positionné à -1 indique que l'on veut toutes les réponses dans une seule page de résultats.

<xsp:page>
 <sdx:executeSimpleQuery
  base="sdxworld sdxdoc"
  query="sdxall:1"
  hpp=-1
 />
</xsp:page>

sdx:linearQuery(CHECK)

Description

Avec sdx:complexQuery et sdx:simpleQuery , sdx:linearQuery est l'une des trois actions de recherche décrivant une syntaxe donnée. Cela signifie que sdx:linearQuery n'effectue pas de recherche particulière comme sdx:fieldQuery pour une recherche dans un champ ou sdx:dateQuery pour rechercher une date. Elle propose une certaine forme de rédaction. sdx:complexQuery en propose une autre.

La requête linéaire est un outil commode pour formuler une recherche avancée par formulaire. Elle permet de formuler des requêtes sur un même niveau (i.e. en ligne). Ainsi la question « Trouve moi les livres ayant le mot monde dans le titre et ayant la physique pour sujet, ou alors écrit par Einstein » peut se traduire sous la forme d'une URL (avec une base de documents configurée en ce sens) : ?op=and&f=titre&v=monde&op=and&f=sujet&v=physique&op=or&f=auteur&v=einstein, ce qui donnera une requête simple +titre:monde +sujet:physique auteur:einstein.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationD'un point de vue théorique, il est possible d'intégrer sdx:linearQuery dans une requête complexe . Mais est-ce véritablement intéressant ?
Contenu éventuelUn élément sdx:expandQuery offrant l'utilisation d'un thesaurus. Des stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (la requête n'est pas valide), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

NomDescriptionElément correspondant 
op Opérateur de requête. L'opérateur par défaut est un ou logique. Il se place avant les champ/valeur sur lesquels il doit prendre effet. Facultatif
field Code du champ que l'on souhaite interroger. sdx:fields Obligatoire
f Idem. Déprécié sdx:fields  
value Valeur recherchée. sdx:values Obligatoire
v Idem. Déprécié sdx:values  

sdx:executeLinearQuery(CHECK)

Description

sdx:executeLinearQuery apporte l'environnement nécessaire à l'exécution d'une requête linéaire (cf. plus haut).

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationN'importe où dans sdx:page .
Contenu éventuelDes stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (il n'y a aucun résultat à la requête posée), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

Paramètres communs aux actions de requêtes (facultatifs).

NomDescriptionElément correspondant 
op Opérateur de requête. L'opérateur par défaut est un ou logique. sdx:linearQuery Facultatif
field Le code du champ que l'on souhaite interroger. sdx:fields Obligatoire
f Idem. Déprécié sdx:fields  
value Valeur recherchée. sdx:values Facultatif
v Idem. Déprécié sdx:values  

sdx:complexQuery(CHECK)

Description

Avec sdx:linearQuery et sdx:simpleQuery , sdx:complexQuery est l'une des trois actions de recherche décrivant une syntaxe donnée. Cela signifie que sdx:complexQuery n'effectue pas de recherche particulière comme sdx:fieldQuery pour une recherche dans un champ ou sdx:dateQuery pour rechercher une date. Elle propose une forme de rédaction, sans doute la plus élaborée.

Une recherche complexe permet d'élaborer un arbre de requêtes reliées par des opérateurs ( complexop ). Cette méthode permet de représenter des niveaux de parenthèses. L'objectif serait qu'une requête complexe puisse comporter des requêtes elles-mêmes complexes. Cette possibilité n'est pas encore complètement supportée par SDX, car, pour l'essentiel, l'information provient de formulaires (généralement plats). On peut au moins combiner toutes les requêtes précédemment décrites afin d'affiner les recherches avancées.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationDans une sdx:executeComplexQuery ou un sdx:executeDateQuery .
Contenu éventuelUn élément sdx:expandQuery offrant l'utilisation d'un thesaurus. Des stratégies peuvent être définies grâce à l'utilisation des actions de contrôle de flux sdx:fallback et sdx:success . En cas d'échec de la requête (la requête n'est pas valide), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

NomDescription 
complexop Opérateur de requête. Par défaut, l'opérateur est un ou logique.Facultatif
bqid Identifiant de la requête que l'on souhaite affiner ou étendre.Facultatif
bop Opérateur de requête. Par défaut , l'opérateur est un ou logique.Facultatif

sdx:executeComplexQuery(CHECK)

Description

sdx:executeComplexQuery apporte l'environnement nécessaire à l'exécution d'une requête complexe.

Code implémentant cette action sdx-queries.xsl
Contexte d'utilisationN'importe où dans un sdx:page .
Contenu éventuelL'ensemble des actions de recherche décrites dans cette page : sdx:simpleQuery  ; sdx:fieldQuery  ; sdx:listQuery  ; sdx:dateQuery . Comme les autres actions d'exécution de requête, sdx:executeComplexQuery peut contenir les actions de contrôle de flux : sdx:fallback et sdx:success . En cas d'échec de la requête (il n'y a aucun résultat à la requête posée), les actions et/ou éléments contenus dans l'ensemble sdx:fallback sont traités. Sinon, ce sont ceux de sdx:success lorsqu'il existe.

Paramètres

Paramètres communs aux actions de requêtes (facultatifs).

NomDescriptionElément correspondant 
complexop Opérateur de requête. L'opérateur par défaut est un ou logique. sdx:complexQuery Facultatif

Exemples

Exemple 6. Construction d'une requête complexe

Le code qui suit provient d'un cas réel.

<sdx:executeComplexQuery>
  <sdx:sort field="region" order="descending"/>
  <sdx:sort field="departement" order="descending"/>
  <sdx:simpleQuery queryParam="fulltext"/>
  <sdx:listQuery
    field="pays"
    valueParam="pays"
    complexopParam="pays_op"/>
  <sdx:listQuery
    field="themes"
    valueParam="themes_v"
    op="and"
    complexopParam="themes_op"/>
  <sdx:simpleQuery
    field="title"
    queryParam="title"
    complexopParam="title_op"/>
</sdx:executeComplexQuery>

On repérera le paramètre complexop qui permet de relier chaque requêtes entre elles, selon le même mécanisme booléen que la requête linéaire. On découvre aussi qu'à chaque execute*Query correspond un *Query. Cette action construit une requête, mais sans l'exécuter. Un objet est construit ; il est combiné dans la requête complexe. Mais les résultats sont sortis par sdx:executeComplexQuery, selon la même manière que les requêtes précédentes.



Auteurs : Malo Pichot ( AJLSM ) ; Pierrick Brihaye - 2003-11-26