Article View: fr.comp.text.xml
Article #9020Re: Simplement à quoi sert xsl:key et key()
From: Thomas Broyer
Date: Fri, 22 Jun 2001 16:21
Date: Fri, 22 Jun 2001 16:21
60 lines
4199 bytes
4199 bytes
In <qLIY6.1183$ln3.885829@nnrp6.proxad.net>, Rapha�l THERY wrote:
> quelqu'un pourrait m'expliquer (assez simplement) le r�le, la philosophie
> de xsl:key et/ou de key()
> car je ne saisis pas trop
Pour r�sumer en quelques mots : "a key is a kind of generalized ID"
xsl:key d�clare des cl�s (un ensemble nom/valeur) pour certains noeuds.
<xsl:key name="nom" match="motif" use="expression"/> d�clare une cl� de nom
"nom" et de valeur "expression" pour chaque noeud correspondant au motif
"motif" (la valeur est en fait l'expression �valu�e avec pour noeud courant
le noeud sur lequel attacvher la cl�)
key() permet ensuite d'acc�der aux �l�ments par leurs cl�s. Le premier
argument est le nom de la cl�, le second une valeur. La fonction retourne
tous les noeuds du document (du m�me document que le noeud courant) ayant
une cl� de m�me nom et de m�me valeur.
Le rapprochement avec les ID est assez facile. Un ID est une cl� dont le
nom ne nous importe pas et dont la valeur est celle de l'attribut de
l'�l�ment qui a �t� d�clar� de type ID dans la DTD (c'est la DTD qui
remplace les xsl:key dans la d�claration de la cl�)
La fonction id() retourne le noeud ayant la cl� sp�ciale de m�me valeur que
l'argument pass� � la fonction. id() remplace ici key().
Les diff�rences entre ID et cl�s sont list�es dans la spec XSLT. En gros :
� un ID est unique, il peut exister plusieurs cl�s de m�me nom et m�me
valeur, mais de noeud diff�rent, ou de m�me nom et noeud mais de valeur
diff�rente, ou encore de m�me noeud et m�me valeur mais de nom diff�rent.
� un ID s'int�resse au type d'un attribut, une cl� � la structure du
document (et pas n�cessairement aux attributs)
� un ID est attach� � un �l�ment uniquement, une cl� s'attache � n'importe
quel noeud
� la valeur d'une cl� n'a pas de contrainte syntaxique comme celle d'un ID
Pour r�sumer, tr�s sommairement, une cl� est un moyen d'acc�s rapide �
certains noeuds pr�sentant une "structure" similaire. C'est une fa�on de
stocker ces noeuds dans un coin (xsl:key) et pouvoir aller les chercher
simplement (key()), sans besoin d'une �norme expression XPath cherchant
dans tout le document.
Par exemple, pour trouver tous les clients (�l�ments 'client') dans le
d�partement 21 (code postal dispo dans le sous-�l�ment 'CP' du sous-�l�ment
'adresse'), avec une expression XPath, tu devras faire :
//client[substring(normalize-space(adresse/CP), 1, 2) = '21']
et si tu veux maintenant le d�partement 01, tu devras recopier l'expression
en changeant le 21 par 01.
Avec les cl�s c'est bien plus facile :
1. tu d�clares une cl� de nom "d�partement" attach� � chaque �l�ment
"client" et ayant pour valeur les 2 premiers chiffres du code postal
(adresse/CP)
<xsl:key name="d�partement" match="client"
use="substring(normalize-space(adresse/CP), 1, 2)" />
2. tu utilises ces cl�s :
key("d�partement", "21") => tous les clients en C�t� d'Or
key("d�partement", "01") => tous les clients dans l'Ain
Tom.
Technical Details
Message-ID:
<5147587.FTl31r3eYU@ltgt.net>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!193.251.151.101!opentransit.net!proxad.net!feeder2-1.proxad.net!nnrp1.proxad.net.POSTED!not-for-mailReferences:
<qLIY6.1183$ln3.885829@nnrp6.proxad.net>Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII X-Google-Thread: 114f60,71a26263d752254c X-Google-Attributes: gid114f60,public X-Google-ArrivalTime: 2001-06-22 09:21:23 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!193.251.151.101!opentransit.net!proxad.net!feeder2-1.proxad.net!nnrp1.proxad.net.POSTED!not-for-mail Message-ID: <5147587.FTl31r3eYU@ltgt.net> From: Thomas Broyer <ptittom+news@free.fr> Subject: Re: Simplement à quoi sert xsl:key et key() Newsgroups: fr.comp.text.xml References: <qLIY6.1183$ln3.885829@nnrp6.proxad.net> Lines: 60 Organization: </> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8Bit Date: Fri, 22 Jun 2001 16:21:21 GMT NNTP-Posting-Host: 217.128.160.52 X-Complaints-To: abuse@proxad.net X-Trace: nnrp1.proxad.net 993226881 217.128.160.52 (Fri, 22 Jun 2001 18:21:21 CEST) NNTP-Posting-Date: Fri, 22 Jun 2001 18:21:21 CEST