Le mécanisme de tri
Configurer un nœud d’élément de schéma pour trier consiste en deux étapes :
1.Dans le Mode Design, sélectionnez un nœud d’élément de schéma qui doit être trié. Notez qu’il s’agit des instances de l’élément this dans le document XML qui sera trié. Souvent, il n’est pas tout de suite apparent quel élément doit être trié. Par exemple, si vous prenez la structure affichée dans la capture d'écran ci-dessous.

Chaque newsitem a une dateline contenant un élément place avec un attribut city. Les nœuds @city de tous les éléments newsitem sont la sortie par ordre alphabétique. Dans le design, le nœud @city devrait-il être sélectionné pour le tri, ou les éléments place, dateline, ou newsitem ? Avec @city sélectionné, il n’existera que le nœud city qui sera trié. Avec place ou dateline sélectionné, il n’y aura que l’élément respectif à trier, puisqu’à l’intérieur de leurs parents, ils apparaissent seuls. Avec newsitem sélectionné, toutefois, il y aura de multiples éléments newsitem à l’intérieur de l’élément newsitems parent. Dans ce cas, il s’agit de l’élément newsitem qui doit ête trié, utilisant une sort-key de dateline/place/@city.
2.Après avoir sélectionné l’élément à trier, dans le menu contextuel (obtenu en cliquant sur la touche de droite de la sélection de l’élément), cliquez sur la commande Tri de sortie. Ceci ouvre le dialogue Définir l’ordre de tri de la sortie (capture d’écran ci-dessous), dans lequel vous insérez ou ajoutez une ou plusieurs instructions.
![]() |
Chaque instruction de tri contient : (i) une sort-key (saisie dans la colonne Match); (ii) le datatype que le nœud sort-key devrait être (texte ou nombre); (iii) et l’ordre de tri (ascendant ou descendant). L’ordre dans lequel les instructions de tri sont listées est important. Le tri est exécuté utilisant chaque instruction de tri à son tour, en commençant par le premier, et en procédant vers le bas de la liste lorsque de multiples items ont la même valeur. Tout nombre d’instructions de tri est autorisé.
Pour un exemple à savoir comment le tri est utilisé, voir Exemple : Trier sur de multiples Sort-Keys.
Modèles définis par l'utilisateur
Les modèles définis par l’utilisateur sont des modèles qui sont appliqués à des items sélectionnés par une expression XPath que vous spécifiez. Les nœuds sélectionnés par l’expression XPath d’un modèle utilisé par l’utilisateur peut aussi être trié. Dans ce cas, le tri est appliqué dans le modèle défini par l’utilisateur.
Une note sur les sort-keys
L’expression XPath que vous saisissez pour la sort-key doit sélectionner un seul nœud pour chaque instance d’élément—pas un nodeset (XPath 1.0) ou une séquence d’items (XPath 2.0 et XPath 3.0) ; la clé pour chaque élément devrait être résolue vers un string ou une valeur de nombre.
Dans un XSLT 2.0 ou 3.0 SPS, si la sort-key renvoie une séquence de nœuds, une erreur de traitement XSLT sera retournée. Donc, dans l’exemple Person cité ci-dessus, avec le nœud contextuel de Person, une expression XPath expression telle que : ../Person/LastName renverrai une erreur parce que cette expression renvoie tous les éléments LastName contenus dans le parent de Person (assumant qu’il y a plus qu’un élément Person). L’expression Xpath correcte, avec Person dans le nœud contextuel, serait : LastName (puisqu’il n’y a qu’un nœud LastName pour chaque élément Person).
Dans XSLT 1.0, la spécification requiert qu’un ensemble de nœuds est retourné par un sélecteur sort-key, la valeur de texte du premier nœud est utilisée. StyleVision ne renvoie pour cette raison aucune erreur si l’expression XPath sélectionne de multiples nœuds pour la sort-key ; le texte du premier nœud est utilisé et les autres nœuds sont ignorés. Toutefois, le premier nœud sélectionné pourrait ne pas être la sort-key désirée. Par exemple, l’expression XPath ../Person/LastName de l’exemple décrit ci-dessus ne retournerait pas d’erreur. Mais elle ne trierait pas, car il s’agit de la même valeur pour chaque élément dans la boucle de tri entière (la valeur de texte du premier nœud LastName). Une expression du genre : location/@*, toutefois, trierait, utilisant le premier attribut de l’élément enfant location comme sort-key. Ce genre d’expression, toutefois, doit être évité, et une sélection plus précise de la sort-key (sélectionnant un nœud) est recommandée.