Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'crit en ce moment mme. XMLfr vous aide  la suivre et  en dgager les tendances.Les listes de discussions XMLfr sont  votre disposition pour ragir sur nos articles ou simplement poser une question.Si vous tes passionne(e) par XML, pourquoi ne pas en faire votre mtier ?XMLfr n'est heureusement pas le seul site o l'on parle de XML. Dcouvrez les autres grce  XMLfr et  l'ODP.Les partenaires grce auxquels XMLfr peut se dvelopper.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'tes peut-tre pas le premier...Les traductions en franais des bibles XML.Ces articles sont des rfrences dans leur domaine.Tout ce qu'il faut savoir pour dmarrer sur un sujet XML...


Ignorer casse (majuscules/minuscules) et diacritique (accents) avec XPath/XSLT 1.0

Est-il possible avec XPath et XSLT 1.0 d'ignorer la casse (majuscules/minuscules) et les diacritiques (accents)?

Eric van der Vlist, Dyomedea (vdv@dyomedea.com).
mardi 04 janvier 2005

Table des matires

Question

Rponse

Principe

Implmentations

Conversion de majuscules en minuscules base sur les tables Unicode

Utilisation de chanes de caractres gnres partir des tables Unicode

Rfrences

Question

Est-il possible avec XPath et XSLT 1.0 d'ignorer la casse (c'est dire le fait qu'un caractre soit en majuscules ou en minuscules) et les diacritiques (c'est dire les accents) et de considrer par exemple que "Modr" est gal "modere" ?

Comment faire?

Rponse

Principe

La fonction XPath 1.0 qui convient le mieux pour cette opration est la fonction "translate" qui permet des remplacements caractre par caractre.

Ainsi pour ignorer les accents sur le caractre "e" dans la chane "$ma-chaine", il faudra remplacer les caractres "", "" et "" par le caractre "e" au moyen de l'expression XPath :

translate($ma-chaine, "", "eee")

Pour ignorer la casse de ce mme caractre "e", il faudra galement remplacer les caractres "E", "", "" et "" par le caractre "e" :

translate($ma-chaine, "E", "eeeeeee")

Si le principe est simple, son application correcte pour prendre en compte l'ensemble des variations lies la casse et aux diacritiques est laborieuse et source d'erreurs.

De plus, pour la grer compltement, il faudrait pouvoir grer les transformations d'un caractre unique en plusieurs caractres (tel le " allemand, qui devient "ss").

On peut donc galement chercher effectuer une transformation plus rigoureuse partant des tables de "case mapping" Unicode.

Implmentations

Conversion de majuscules en minuscules base sur les tables Unicode

Paul Terray a publi une implmentation convertissant les majuscules en minuscules et partant des tables Unicode.

Elle est disponible l'adresse http://www.h2o.be/Telechargements/CaseFolding.zip et utilisable librement la condition d'en conserver les en-ttes.

Cette implmentation fonctionne sur un transcodage XML de la table de conversion Unicode et gre l'ensemble des transcodages. Elle porte sur l'ensemble des caractres caractres latins, grecs, cyrilliques et armniens.

Pour pouvoir grer les conversions gnrant plusieurs caractres, elle utilise un template nomm rcursif qui traite les caractres les uns aprs les autres et est donc assez lente.

Utilisation de chanes de caractres gnres partir des tables Unicode

Si l'on ne s'intresse pas aux conversions gnrant plusieurs caractres, il est plus simple d'utiliser des chanes de caractres gnres une fois pour toute partir des tables Unicode.

Les chanes suivantes ont t gnres partir de la table UnicodeData-4.0.1.txt en ne s'intressant qu'aux blocs Basic Latin et Latin-1 Supplement qui comprennent les caractres usuels en franais.

  • Liste des caractres en majuscules :
ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • Liste des caractres en minuscules :
abcdefghijklmnopqrstuvwxyz
  • Liste des caractres accentus :

  • Liste des caractres sans accents :
AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy
  • Liste des caractres en majuscules et minuscules, avec ou sans accents :
AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

  • Liste des caractres en minuscules, sans accents :
aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzzaaaaaaaaaaaa
cceeeeeeeeiiiiiiiinnoooooooooouuuuuuuuyy

Ces chanes peuvent tre copies/colles dans des transformations XSLT et elles permettent de grer les cas courants, par exemple :

  • Pour convertir en minuscules en gardant les accents :
translate($ma-chaine, "ABCDEFGHIJKLMNOPQRSTUVWXYZ
", "abcdefghijklmnopqrstuvwxyz
")
  • Pour enlever les accents en gardant la casse :
translate($ma-chaine, "
", "AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuu
uyy")
  • Pour enlever les accents et convertir en minuscules en une seule opration :
translate($ma-chaine, "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUu
VvWwXxYyZz
", "aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzzaaaa
aaaaaaaacceeeeeeeeiiiiiiiinnoooooooooouuuuuuuuyy")

Lorsque l'on utilise ces chanes plusieurs fois dans une transformation, on pourra les placer dans une variable, par exemple :

<xsl:variable name="majuscules">ABCDEFGHIJKLMNOPQRSTUVWXYZ
</xsl:variable>
<xsl:variable name="minuscules">abcdefghijklmnopqrstuvwxyz
</xsl:variable>
...
<xsl:value-of select="translate($ma-chaine, $majuscules, $minuscu
les)"/>

Rfrences

Copyright 2005, Eric van der Vlist


 

Mots cls.



L'histoire de XML s'crit en ce moment mme. XMLfr vous aide  la suivre et  en dgager les tendances.


Les documents publis sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, ralisation et hbergement
Questions ou commentaires
  redacteurs@xmlfr.org