<?xml version="1.0"?>
<!DOCTYPE webpage PUBLIC "-//Norman Walsh//DTD Website V2.1b1//EN" "../../../dtd/website.dtd" [
  <!ENTITY applications SYSTEM "applications.xml" NDATA XML>
  <!ENTITY bases SYSTEM "bases.xml" NDATA XML>
  <!ENTITY debuter SYSTEM "debuter.xml" NDATA XML>
  <!ENTITY entrepots SYSTEM "entrepots.xml" NDATA XML>
  <!ENTITY params SYSTEM "../reference/parametres_sdx.xml" NDATA XML>
  <!ENTITY xconf SYSTEM "../configuration/configuration.xml" NDATA XML>
]>

<webpage id="multilinguisme"> 

  <head>
	 <title lang="fr">SDX et le multilinguisme</title>
	 <titleabbrev>Multilinguisme</titleabbrev>
	 <author>
		<firstname>Martin</firstname>
		<surname>Sévigny</surname>
		<affiliation>
		  <orgname>AJLSM</orgname> 
		</affiliation>
	 </author>
	 <revhistory>
		<revision>
		  <revnumber>1.0</revnumber> 
		  <date>2003-06-04</date> 
		</revision>
	 </revhistory>
  </head>

  <para lang="fr">SDX est un outil de recherche et de consultation de documents XML qui accorde une grande importance à la <emphasis>langue</emphasis>. C'est pourquoi il est présenté comme un outil <emphasis>multilingue</emphasis>. Ce concept est large et nous allons décrire ici d'une part ce qu'il signifie pour SDX et d'autre part quels sont les <emphasis>services multilingues</emphasis> offerts par SDX. Avant d'y arriver, il est important de rappeler un fait important à ce sujet :</para>
  <blockquote lang="fr"> 
	 <para><emphasis role="bold">SDX est une plate-forme qui permet de réaliser des applications de recherche multilingues</emphasis> ; cela ne signifie pas que SDX prévoit déjà tous les outils nécessaires pour traiter correctement toutes les langues souhaitées par un développeur.</para>
  </blockquote> 
  <section lang="fr" id="langue_sdx"> 
	 <title>Qu'est-ce qu'une langue pour SDX ?</title>
	 <para>Toute discussion sur le multilinguisme doit d'abord bien préciser ce qu'est une langue dans SDX-2. D'autant plus que SDX est construit autour de deux technologies qui ont leur propre conception de la langue (Java et XML) ; heureusement ces deux conceptions ne sont pas opposées.</para>
	 <para>Pour Java, une langue est en fait une "locale" (voir la classe 
		<ulink url="http://java.sun.com/j2se/1.3/docs/api/java/util/Locale.html">java.util.Locale</ulink> pour une définition complète) ; c'est-à-dire une combinaison d'un code de langue (ISO-639), d'un code de pays (ISO-3166) et d'une "variante", optionnelle, qui permet de préciser certaines options concernant la langue.</para>
	 <para>Pour XML, la 
		<ulink url="http://www.w3.org/TR/REC-xml#sec-lang-tag">section 2.12</ulink> de la norme indique ce qu'est une langue et comment elle peut être représentée. Ainsi, XML prévoit un attribut spécial (<sgmltag class="attribute">xml:lang</sgmltag>) pour identifier une langue. Cet attribut doit avoir une valeur définie dans le 
		<ulink url="http://www.ietf.org/rfc/rfc1766.txt">RFC-1766 de l'IETF</ulink>. Essentiellement, cette norme prévoit qu'une langue est spécifiée par la combinaison d'un code de langue, suivi d'un code de pays selon les mêmes normes que pour Java, bien que cette combinaison puisse être remplacée par un 
		<ulink url="http://www.isi.edu/in-notes/iana/assignments/languages/">code de langue enregistré auprès de l'IANA</ulink>.</para>
	 <para>A partir de ces deux définitions, il a été décidé que pour SDX-2, une langue est une combinaison d'un code de langue ISO-639, d'un code de pays ISO-3166 (optionnel) et d'une variante (optionelle). Toutefois, pour représenter ces langues dans un contexte XML, l'attribut <sgmltag class="attribute">xml:lang</sgmltag> est utilisé pour les deux premières parties, un attribut <sgmltag class="attribute">variant</sgmltag> est utilisé pour la troisième. C'est pourquoi on peut avoir, par exemple :</para>
	 <programlisting>
  &lt;sdx:field xml:lang="fr-CA" variant="qc".../&gt;
</programlisting> 
	 <para>A noter toutefois que pour la langue d'interface (dont il est question dans la 
		<olink targetdocent="debuter">section suivante</olink>) la notion de variante n'est jamais exploitée ; on peut seulement retrouver un code de langue et un code de pays, tous deux identifiés à l'aide d'un attribut <sgmltag class="attribute">xml:lang</sgmltag> par exemple.</para>
  </section> 
  <section lang="fr" id="langue_interface"> 
	 <title>La langue d'interface</title>
	 <para>Les applications Web construites avec SDX utilisent en général le langage XSP pour constuire les pages Web dynamiques. Ces pages XSP présentent généralement un élément <sgmltag class="element">sdx:page</sgmltag> qui permet d'utiliser par la suite l'un ou l'autre des services SDX. L'utilisation de cet élément (peu importe ce qu'on y retrouve) a un impact important : le document XML (virtuel) résultant de la page XSP aura à sa racine un élément <sgmltag class="element">sdx:document</sgmltag> possédant un attribut <sgmltag class="attribute">xml:lang</sgmltag>. Ce dernier identifie la langue souhaitée pour l'interface. </para>
	 <example lang="fr"> 
		<title>L'attribut <sgmltag class="attribute">xml:lang</sgmltag></title>
		<programlisting>&lt;sdx:document xml:lang="fr-CA"&gt;
  ...
  &lt;sdx:results ...&gt;
    ...
  &lt;/sdx:results&gt;
&lt;/sdx:document&gt;</programlisting> 
		<para>Cet attribut est toujours présent ; il est destiné à servir de base pour créer des interfaces multilingues. Ainsi, dans une transformation XSLT appliquée à ce document virtuel afin d'obtenir une page HTML, il est possible d'utiliser cette information pour sortir du contenu différent en fonction de la langue :</para>
		<programlisting>...
&lt;xsl:variable name="l" select="string(/sdx:document/@xml:lang)"/&gt;
...
&lt;xsl:choose&gt;
  &lt;xsl:when test="starts-with($l, 'fr')"&gt;Bonjour&lt;/xsl:when&gt;
  &lt;xsl:when test="starts-with($l, 'en')"&gt;Hello&lt;/xsl:when&gt;
  ...
&lt;/xsl:choose&gt;
...</programlisting> 
	 </example> 
	 <para>Cet aspect est intéressant (sans être une révolution), mais il pose une question fondamentale : <emphasis role="bold">comment SDX détermine la langue spécifiée dans cet attribut</emphasis> ? En fait, SDX va chercher cette information à différents endroits, dans un ordre bien précis. La première langue qu'il trouve est celle qu'il va mettre dans l'attribut. Nous allons donc documenter ces différents endroits où la langue est définie et dans quel ordre ils sont examinés :</para>
	 <section lang="fr" id="langue_localisation"> 
		<title>Où trouver la langue ?</title>
		<section id="langue_application"> 
		  <title>La langue de l'application</title>
		  <para>Dans le 
			 <olink targetdocent="xconf">fichier de configuration</olink> (<filename>application.xconf</filename>), l'élément supérieur <sgmltag class="element">sdx:application</sgmltag> doit avoir un attribut <sgmltag class="attribute">xml:lang</sgmltag>. La valeur de cet attribut peut être utilisée par SDX pour identifier la langue de consultation. On peut considérer cette valeur comme la langue par défaut de l'application ; pour une application unilingue cet attribut est en général suffisant pour indiquer la langue.</para>
		</section> 
		<section id="langue_user"> 
		  <title>La langue de l'utilisateur</title>
		  <para>Les applications Web construites avec SDX offrent des services à des utilisateurs qui demandent les différentes pages du Web. Même lorsqu'il n'y a pas d'identification formelle des personnes qui consultent, pour SDX il y a un utilisateur spécial, l'utilisateur <emphasis>anonyme</emphasis>. Aucune langue n'est associée à cet utilisateur, mais il s'agit d'une exception. Tous les autres utilisateurs auront une langue associée et cette langue peut être utilisée pour déterminer la langue d'interface.</para>
		  <para>Dans l'interface de création des utilisateurs de SDX, il est possible d'associer une langue à l'utilisateur. Les applications qui ont leur propre interface de gestion des utilisateurs peuvent, de leur côté, associer une langue avec la méthode de leur choix, SDX pourra tout de même utiliser cette langue pour indiquer la langue d'interface.</para>
		</section> 
		<section id="langue_xsp"> 
		  <title>La langue de la page XSP</title>
		  <para>Dans une page XSP, il est possible d'indiquer directement une langue et de faire en sorte que SDX utilise cette langue comme indication de langue d'interface. Cette spécification de la langue doit se faire par un attribut <sgmltag class="attribute">xml:lang</sgmltag> de l'élément <sgmltag class="element">sdx:page</sgmltag> ou de son élément parent <sgmltag class="element">xsp:page</sgmltag>. Par exemple :</para>
		  <programlisting>
&lt;xsp:page&gt;
  &lt;sdx:page xml:lang="es"&gt;
  ...
  &lt;/sdx:page&gt;
&lt;/xsp:page&gt;
</programlisting> 
		</section> 
		<section id="langue_param"> 
		  <title>Le paramètre dynamique de langue</title>
		  <para>L'API-SDX utilise un concept générique de paramètres et offre de nombreuses façons de spécifier ces paramètres dans une page XSP. Pour en connaître les détails, il est préférable de consulter la 
			 <olink targetdocent="params">documentation sur cette notion de paramètres</olink>. Nous allons ici illustrer leur utilisation pour la langue.</para>
		  <para>Les paramètres SDX ont nécessairement un nom ; pour la langue, le nom du paramètre concerné est <emphasis role="code">lang</emphasis>. Ensuite, SDX prévoit cinq façons de spécifier la valeur d'un paramètre. Ces façons sont dans l'ordre de priorité :</para>
		  <orderedlist>
			 <listitem>
				<para>une variable Java de type <sgmltag class="attvalue">String</sgmltag>, non nulle, définie dans la XSP ;</para>
			 </listitem><listitem>
				<para>un paramètre défini dans la Sitemap ; </para>
			 </listitem><listitem>
				<para>une valeur provenant d'un paramètre de la requête HTTP (donc de l'URL) ;</para>
			 </listitem><listitem>
				<para>une valeur explicite dans la page XSP ;</para>
			 </listitem><listitem>
				<para>une valeur par défaut dans SDX.</para>
			 </listitem>
		  </orderedlist>
		  <para> Nous pouvons tout de suite signaler que, pour la langue, il n'y a pas de valeur par défaut dans SDX. Cet aspect importe peu, car la langue de l'application (définie dans le <filename>application.xconf</filename>) joue le rôle de valeur par défaut. Nous devons également mentionner que l'utilisation d'une valeur explicite d'un paramètre n'apporte rien par rapport à l'utilisation de l'attribut <sgmltag class="attribute">xml:lang</sgmltag> dans la page XSP, tel que mentionné plus haut.</para>
		  <para>Ce paramètre <emphasis role="code">code</emphasis> doit nécessairement être associé à l'élément <sgmltag class="element">sdx:page</sgmltag>. L'exemple suivant illustre les différentes façons de le faire :</para>
		  <programlisting>
&lt;!--
Valeur explicite 
--&gt;
&lt;sdx:page lang="fr"&gt;

&lt;!--
Valeur provenant de l'objet de 
session dont la clé est "langue"
--&gt;
&lt;sdx:page langSession="langue"&gt;

&lt;!--
Valeur provenant d'un paramètre 
HTTP "l" (par exemple l'URL test.xsp?l=fr)
--&gt;
&lt;sdx:page langParam="l"&gt;

&lt;!--
Valeur provenant d'une variable 
Java de type String préalablement définie
--&gt;
&lt;xsp:logic&gt;
  String l = "fr";
&lt;/xsp:logic&gt;
&lt;sdx:page langString="l"&gt;
</programlisting> 
		  <para>Ces exemples utilisent tous la méthode des attributs pour identifier un paramètre. Mais SDX offre une seconde méthode : celle des sous-éléments <sgmltag class="element">sdx:parameter</sgmltag> permettant de spécifier des paramètres. Ainsi, il est possible de remplacer le troisième exemple ci-dessus par ce code :</para>
		  <programlisting>
&lt;sdx:page&gt;
  &lt;sdx:parameter name="lang" valueParam="l"/&gt;
</programlisting> 
		  <para>Cette méthode des paramètres est très souple. Elle est d'ailleurs nécessaire pour créer de véritables applications Web dynamiques et multilingues. Par exemple, il est possible d'ajouter à toutes les URL de l'interface le paramètre <emphasis role="code">l</emphasis>, de lui donner une valeur de langue et dans la page XSP utiliser l'attribut <sgmltag class="attribute">langParam="l"</sgmltag> pour ainsi toujours avoir une valeur appropriée comme langue d'interface.</para>
		  <para>Toutefois, cette approche comporte un inconvénient : le développeur doit toujours faire attention à inclure le paramètre <emphasis role="code">l</emphasis> dans les liens hypertextes, ce qui est sujet à erreur. Une solution est de stocker cette valeur dans un objet de session. Ainsi, une fois que l'objet de session est défini, SDX peut l'exploiter. Pour y arriver, il s'agit tout simplement d'utiliser ceci dans les pages XSP :</para>
		  <programlisting>
&lt;sdx:page langSession="l" langParam="l"&gt;
</programlisting> 
		  <para>Mettre ces deux indications n'est pas contradictoire. Au contraire, puisque SDX définit une priorité : le paramètre d'URL (attribut <sgmltag class="attribute">langParam</sgmltag>) est prioritaire sur l'objet de session, mais cette priorité n'est exploitée que s'il y a effectivement ce paramètre dans l'URL. De plus, s'il est présent, alors, non seulement SDX l'utilise, mais en plus il va conserver sa valeur en objet de session, à cause de la présence de l'attribut <sgmltag class="attribute">langSession</sgmltag> avec la même valeur que celle de l'attribut <sgmltag class="attribute">langParam</sgmltag>.</para>
		  <para>Cette caractéristique des paramètres SDX est problablement celle qui permet la plus grande souplesse et aussi la plus grande simplicité pour la gestion de la langue. Nous allons l'illustrer avec un exemple. </para>
		  <example id="langue_param_ex"> 
			 <title>Définition de la langue dans les paramètres</title>
			 <para>Supposons que le code ci-dessus soit dans une page XSP nommée <filename>index.xsp</filename>. On va faire plusieurs appels successifs à cette page avec différentes valeurs de paramètres et voir comment est définie la langue d'interface :</para>
			 <orderedlist>
				<listitem>
				  <para><filename>index.xsp</filename> : la langue est celle définie dans l'objet de session dont la clé est <emphasis role="code">code</emphasis>. Si celui-ci n'existe pas, alors SDX cherche la langue ailleurs ;</para>
				</listitem><listitem>
				  <para><filename>index.xsp?l=en</filename> : la langue sera <emphasis role="code">en</emphasis> ;</para>
				</listitem><listitem>
				  <para><filename>index.xsp</filename> : la langue ne change pas, c'est toujours <emphasis role="code">en</emphasis> ;</para>
				</listitem><listitem>
				  <para><filename>index.xsp?l=fr</filename> : la langue change pour <emphasis role="code">fr</emphasis>.</para>
				</listitem>
			 </orderedlist>
			 <para>Bref, cette approche permet au développeur de spécifier un paramètre d'URL seulement lorsqu'il désire changer la langue d'interface. Notons également qu'il est possible d'ajouter un attribut <sgmltag class="attribute">langString</sgmltag> qui se comporte de la même manière que <sgmltag class="attribute">langParam</sgmltag>, mais avec une valeur définie par une variable Java de type <sgmltag class="attribute">String</sgmltag> et avec une priorité encore plus grande. Cela permet de spécifier la langue selon une logique plus fine que celle permise par de simples valeurs de paramètres URL, si nécessaire.</para>
		  </example> 
		</section> 
	 </section> 
	 <section lang="fr" id="priorite"> 
		<title>Règle de priorité</title>
		<para>Nous avons vu que SDX peut aller chercher l'information sur la langue dans les paramètres dynamiques, dans la page XSP explicitement, dans les informations sur l'utilisateur en cours et dans la configuration de l'application. Tous ces endroits peuvent avoir des informations de langue, alors il est nécessaire de définir une priorité. La logique veut que les informations dynamiques soient prioritaires par rapport aux informations de configuration ou mentionnées explicitement ; par ailleurs nous appliquons une seconde logique qui veut que les informations qui se trouvent dans la page XSP sont prioritaires par rapport aux informations qui se trouvent à l'extérieur de cette page.</para>
		<para>Par conséquent, l'ordre de priorité est le suivant  :</para>
		<orderedlist>
		  <listitem>
			 <para>Les paramètres dynamiques ;</para>
		  </listitem><listitem>
			 <para>La langue de la page XSP ;</para>
		  </listitem><listitem>
			 <para>La langue de l'utilisateur ;</para>
		  </listitem><listitem>
			 <para>La langue de l'application (<filename>application.xconf</filename>).</para>
		  </listitem>
		</orderedlist>
	 </section> 
  </section> 
  <section lang="fr" id="langue_recherche"> 
	 <title>La langue et la recherche</title>
	 <para>L'autre aspect important du multilinguisme pour SDX est sa relation avec la recherche. En effet, toute application qui manipule le texte est influencée par la langue de ces textes. En recherche documentaire, cette influence se fait sentir de trois façons :</para>
	 <orderedlist>
		<listitem>
		  <para>Lors de l'indexation et dans les requêtes de recherche, il est nécessaire de séparer le texte en <emphasis>mots</emphasis> et cette séparation dépend nécessairement de la langue du texte en question ;</para>
		</listitem><listitem>
		  <para>Lors de l'indexation et dans les requêtes de recherche, il peut être nécessaire de transformer le texte pour, par exemple, le mettre en minuscules, supprimer les diacritiques, etc. Encore une fois, la langue du texte influence cette transformation ;</para>
		</listitem><listitem>
		  <para>Lors du tri des résultats de recherche selon des informations textuelles contenues dans les valeurs des différents champs. Le tri sur du contenu textuel est également une opération qui dépend de la langue du texte.</para>
		</listitem>
	 </orderedlist>
	 <para>SDX permet au développeur d'applications de contrôler les opérations dépendantes de la langue de façon très fine ; ce contrôle se fait en grande partie au niveau des champs d'une base de documents. Lors de la définition de ces champs, on peut leur attribuer une langue et, optionnellement, un analyseur de mots spécifique. Il est important de noter que la discussion ci-dessous est spécifique à l'utilisation de moteur de recherche Lucene par SDX. Eventuellement, si SDX permet d'utiliser d'autres moteurs de recherche, ces informations pourraient ne pas s'appliquer.</para>
	 <section id="analyseur"> 
		<title>L'analyseur de mots</title>
		<para>Lorsque SDX indexe du contenu textuel dans un champ de type <emphasis role="code">word</emphasis>, ce contenu textuel sera d'abord transformé par un <emphasis>analyseur de mots</emphasis>. En effet, chaque mot individuel est stocké dans l'index. De plus, ces mots peuvent être transformés, par exemple pour mettre tout le texte en minuscules et supprimer les diacritiques.</para>
		<example> 
		  <title>Analyse de mots en indexation et en requête</title>
		  <para>Lors de l'indexation du contenu textuel « Première personne de la soirée », un analyseur pourrait fournir trois mots à indexer : <emphasis>premiere</emphasis>, <emphasis>personne</emphasis> et <emphasis>soiree</emphasis>. Cet analyseur serait ainsi responsable de la suppression de mots vides éventuels.</para>
		  <para>Pour ce que système fonctionne, il est nécessaire d'appliquer la même transformation (et donc d'utiliser le même analyseur de mots) sur la requête de recherche. Ainsi, si un utilisateur cherche <emphasis>Soirée</emphasis>, l'analyseur de mots va retourner le mot <emphasis>soiree</emphasis>, ce qui permettra de trouver le document ayant le contenu donné en exemple.</para>
		</example> 
		<para>Il serait difficile de concevoir un analyseur de mots qui fonctionne bien pour toutes les langues, car nous l'avons vu, l'identification des mots et leur transformation dépend en général de la langue du texte. C'est pourquoi SDX permet au développeur d'applications d'utiliser des analyseurs de mots différents pour tous les champs des bases de documents. Ces analyseurs peuvent être soit inclus dans SDX, soit fournis par le développeur lui-même ; un analyseur de mots est tout simplement une classe Java qui étend (directement ou indirectement) la classe 
		  <ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer</filename></ulink>. Les analyseurs de mots inclus dans SDX 2 sont les suivants :</para>
		<itemizedlist>
		  <listitem>
			 <para><ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer_cn.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_cn</filename></ulink> : chinois ;</para>
		  </listitem><listitem>
			 <para><ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer_cn.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_de</filename></ulink> : allemand ;</para>
		  </listitem><listitem>
			 <para><ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer_cn.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_en</filename></ulink> : anglais ;</para>
		  </listitem><listitem>
			 <para><ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer_cn.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_fr</filename></ulink> : français ;</para>
		  </listitem><listitem>
			 <para><ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer_cn.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_ru</filename></ulink> : russe.</para>
		  </listitem>
		  <listitem>
			 <para><ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer_ar.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_ar</filename></ulink> : arabe (version 2.2 ou supérieure).</para>
		  </listitem>
		</itemizedlist>
		<para>D'autres analyseurs seront éventuellement ajoutés dans SDX ; toute contribution est acceptée avec plaisir.</para>
		<para>Pour rendre encore plus souple l'utilisation des analyseurs ou pour faire en sorte que les mêmes analyseurs puissent être utilisés de façon légèrement différente, SDX prévoit un mécanisme de configuration des analyseurs. Cette configuration se fait à l'aide d'un document XML qui contient différentes informations qui peuvent être spécifiques à un analyseur ou valables pour tous les analyseurs, sauf exception. Un fichier de configuration pour chaque langue est inclus avec SDX dans un fichier situé dans <filename>sdx/resources/conf/analysis</filename> à partir du dossier d'installation de SDX (par exemple <filename class="directory">.../webapps/sdx</filename>). Voici un extrait du fichier de configuration pour le français :</para>
		<programlisting>
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;french useStopWords="true" keepAccents="false"&gt;
   &lt;stopWords&gt;
     &lt;stopWord&gt;le&lt;/stopWord&gt;
     &lt;stopWord&gt;la&lt;/stopWord&gt;
     &lt;stopWord&gt;les&lt;/stopWord&gt;
     ...
  &lt;/stopWords&gt;
&lt;/french&gt;
</programlisting> 
		<para>Les sous-éléments <sgmltag class="element">stopWord</sgmltag> contiennent des mots vides. Par ailleurs, l'attribut <sgmltag class="attribute">keepAccents</sgmltag> indique si l'analyseur doit supprimer les diacritiques ou pas. Il s'agit donc d'une fonction optionnelle de l'analyseur de mots pour la langue française.</para>
		<para>Pour chaque champ, il doit y avoir un analyseur de mots. Cet analyseur peut être spécifié directement, indirectement, être l'analyseur par défaut de la base de documents ou l'analyseur par défaut de SDX. Nous allons voir comment ces différentes indications peuvent être utilisées.</para>
		<section id="analyseur_direct"> 
		  <title>Spécifier un analyseur de mots directement</title>
		  <para>Deux attributs peuvent être utilisés pour spécifier directement quel analyseur de mots utiliser : <sgmltag class="attribute">analyzerClass</sgmltag> et <sgmltag class="attribute">analyzerConf</sgmltag>. Ces attributs peuvent être associés à l'élément <sgmltag class="element">sdx:field</sgmltag>, et dans ce cas ils identifient l'analyseur de mots du champ en question, ou encore ils peuvent être associés à l'élément <sgmltag class="element">sdx:fieldList</sgmltag>, et dans ce cas ils identifient l'analyseur de mots par défaut pour la base de documents.</para>
		  <para>L'attribut <sgmltag class="attribute">analyzerClass</sgmltag> indique tout simplement la classe à utiliser comme analyseur ; tel qu'indiqué ci-dessus, cette classe doit étendre la classe 
			 <ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer</filename></ulink> et bien entendu elle doit être disponible dans le CLASSPATH Java.</para>
		  <para>L'attribut <sgmltag class="attribute">analyzerConf</sgmltag> donne la localisation du fichier de configuration pour l'analyseur de mots. La valeur de l'attribut est une URL, absolue ou relative au fichier <filename>application.xconf</filename>. Si cet attribut est omis, la configuration par défaut de l'analyseur est utilisée. Il est à noter que cet attribut peut également spécifier un fichier de configuration dans le cas où l'analyseur de mots est spécifié de manière indirecte.</para>
		</section> 
		<section id="analyseur_indirect"> 
		  <title>Spécifier un analyseur de mots indirectement</title>
		  <para>Il est aussi possible de spécifier un analyseur de mots indirectement, c'est-à-dire en précisant la langue du contenu du champ ou de l'ensemble des champs de la base de documents. Ainsi, si on utilise les attributs <sgmltag class="attribute">xml:lang</sgmltag> et <sgmltag class="attribute">variant</sgmltag> avec les éléments <sgmltag class="element">sdx:field</sgmltag> (pour un champ en particulier) ou <sgmltag class="element">sdx:fieldList</sgmltag> (comme valeur par défaut pour tous les champs de la base de documents), SDX tentera de trouver un analyseur de mots adéquat pour cette langue.</para>
		  <example> 
			 <title>Localisation de l'analyseur de mots</title>
			 <para>La méthode utilisée par SDX pour trouver cet analyseur peut s'exprimer plus facilement si on prend un exemple. Supposons la définition suivante :</para>
			 <programlisting>
&lt;sdx:field ... xml:lang="fr-CA" variant="qc"/&gt;
</programlisting> 
			 <para>L'algorithme sera le suivant :</para>
			 <orderedlist>
				<listitem>
				  <para>S'il existe une classe <filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_fr_CA_qc</filename> et que cette classe est disponible, elle est utilisée, sinon on passe à l'étape suivante ;</para>
				</listitem><listitem>
				  <para>S'il existe une classe <filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_fr_CA</filename> et que cette classe est disponible, elle est utilisée, sinon on passe à l'étape suivante ;</para>
				</listitem><listitem>
				  <para>S'il existe une classe <filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer_fr</filename> et que cette classe est disponible, elle est utilisée, sinon on passe à l'étape suivante ;</para>
				</listitem><listitem>
				  <para>La classe par défaut 
					 <ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.Analyzer</filename></ulink> est utilisée.</para>
				</listitem>
			 </orderedlist>
			 <para>A noter que si un attribut <sgmltag class="attribute">xml:lang</sgmltag> est utilisé conjointement avec un attribut <sgmltag class="attribute">analyzerClass</sgmltag>, c'est ce dernier qui est utilisé pour trouver un analyseur de mots. <emphasis role="bold">La méthode directe a donc priorité sur la méthode indirecte.</emphasis></para>
		  </example> 
		</section> 
		<section id="analyseur_defaut"> 
		  <title>Analyseur par défaut de SDX</title>
		  <para>Lorsqu'aucun analyseur n'est spécifié pour un champ ou une base de documents, SDX utilise l'analyseur 
			 <ulink url="../../apidocs/fr/gouv/culture/sdx/search/lucene/analysis/Analyzer_cn.html"><filename>fr.gouv.culture.sdx.search.lucene.analysis.DefaultAnalyzer</filename></ulink>. Il s'agit d'un analyseur de mots pour la langue anglaise. Il est également utilisé si un champ déclare indirectement un analyseur qui n'est pas disponible avec SDX.</para>
		</section> 
	 </section> 
	 <section id="tri"> 
		<title>Le tri</title>
		<para>Les résultats de recherche fournis par SDX peuvent être triés selon n'importe quel champ défini dans la base. Par ailleurs, les listes de termes des champs sont toujours retournés en ordre alphabétique. Ces deux opérations de tri sont effectuées par SDX en essayant de tenir compte de la langue des champs triés.</para>
		<para>Ainsi, si un élément <sgmltag class="element">sdx:field</sgmltag> a un attribut <sgmltag class="attribute">xml:lang</sgmltag> et, de façon optionelle, un attribut <sgmltag class="attribute">variant</sgmltag>, ces informations sont utilisées pour construire un <emphasis>comparateur</emphasis> (concept Java) permettant de trier correctement selon la langue en question. Pour en savoir plus sur ces comparateurs et leur utilisation pour le tri et le texte, voir la classe 
		  <ulink url="http://java.sun.com/j2se/1.3/docs/api/java/text/Collator.html">java.text.Collator</ulink> de Java.</para>
		<para>Les machines virtuelles Java sont habituellement livrées avec un certain nombre de <emphasis>collator</emphasis> pour différentes langues. Consulter la documentation de machine virtuelle en question pour connaître la liste des langues supportées.</para>
	 </section> 
  </section> 

</webpage> 
