🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.text.xml
Article #9020

Re: Simplement à quoi sert xsl:key et key()

#9020
From: Thomas Broyer
Date: Fri, 22 Jun 2001 16:21
60 lines
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-mail
References: <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