Les patterns sont des expressions destinées à la sélection de noeuds dans l'arborescence d'un document XML.
En général, les patterns se trouvent dans l'attribut select ou match des éléments XSL-Tranformation suivants :
<xsl:template match="pattern">
<xsl:apply-templates select="pattern">
Pattern | Description |
---|---|
paragraphe | n'importe quel élément paragraphe du noeud courant. |
*/paragraphe | n'importe quel élément paragraphe petit-fils du noeud courant. |
chapitre|paragraphe | n'impote quel élément chapître et n'importe quel élément paragraphe. |
chapître/paragraphe | tout élément paragraphe avec un élément parent chapître. |
chapître//paragraphe | tout élément paragraphe descendant d'un élément chapître à quelque niveau de profondeur que ce soit. |
/ | le noeud racine. |
./ | tous les éléments fils du noeud courant. |
../chapître | tout les éléments chapître fils du père du noeud courant. |
id("Identificateur") | l'élément avec l'identificateur unique Identificateur. |
para[1] | n'importe quel élément para qui est le premier élément enfant para de son parent |
*[position()=1 and self::para] | n'importe quel élément para qui est le premier élément enfant para de son parent |
para[last()=1] | n'importe quel élément para qui est seulement l'élément enfant para de son parent |
items/item[position()>1] | tout élément item qui a un item parent et qui n'est pas le premier item enfant de son parent. |
item[position() mod 2 = 1] | n'importe quel élément item qui est un élément enfant item impair de son parent. |
div[@class="appendice"]//para | tout élément p avec un élément div ancètre qui a un attribut class avec la valeur appendice. |
paragraphe/@class | tout attribut class des éléments paragraphe mais pas tout élément paragraphe qui a un attribut class. |
@* | tout attribut. |
Considérons l'arborescence d'un document XML suivant :
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE librairie [ <!ELEMENT librairie (categorie+)> <!ELEMENT categorie (livre+)> <!ATTLIST categorie nom CDATA #REQUIRED> <!ELEMENT livre (titre, auteur)> <!ATTLIST livre ISBN CDATA #REQUIRED> <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> ]> <?xml-stylesheet type="text/xsl" href="pattern_ex.xsl"?> <librairie> <categorie nom="Histoire"> <livre ISBN="2724267737"> <titre>La tragédie Cathare</titre> <auteur>Georges Bordonove</auteur> </livre> <livre ISBN="2744113670"> <titre>Napoléon T3</titre> <auteur>Max Gallo</auteur> </livre> <livre ISBN="9782286042110"> <titre>Le Second Empire</titre> <auteur>Pierre Miquel</auteur> </livre> </categorie> <categorie nom="Fantastique"> <livre ISBN="2744102792"> <titre>La ligne verte</titre> <auteur>Stephen King</auteur> </livre> <livre ISBN="85426951124752"> <titre>Histoires fantastiques</titre> <auteur>Edgard A. Poe</auteur> </livre> </categorie> <categorie nom="Informatique"> <livre ISBN="9782742916474"> <titre>HTML 4 & XML</titre> <auteur>Ralph Steyer</auteur> </livre> <livre ISBN="9782736115159"> <titre>3D Studio 4</titre> <auteur>Emmanuel Forsans</auteur> </livre> <livre ISBN="273612796X"> <titre>Illustrator 7.0</titre> <auteur>Mathieu Lavant</auteur> </livre> </categorie> <categorie nom="Education"> <livre ISBN="9782708005419"> <titre>La grammaire anglaise</titre> <auteur>S. Berland-Délépine</auteur> </livre> <livre ISBN="9782091855981"> <titre>Philosophie Tles F G H</titre> <auteur>Gérard Durozoi</auteur> </livre> </categorie> </librairie> <!-- La feuille de style associée --> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="ISO-8859-1"/> <xsl:template match="/"> <html> <body> <ul> <xsl:apply-templates select="librairie"/> </ul> </body> </html> </xsl:template> <xsl:template match="Pattern1"> <li><xsl:apply-templates select="Pattern2"/></li> </xsl:template> </xsl:stylesheet> |
Les patterns suivants utilisés dans la feuille de style ci-dessus, permettent d'extraire différentes données XML comme le montre le tableau ci-dessous.
Les deux premiers patterns du tableau sont les expressions spécifiées dans le modèle principal de la feuille de style.
Les autres exemples de patterns fonctionnent par couple. La première expression Pattern1 est indiqué sur la première ligne et le second Pattern2 sur la ligne suivante.
Patterns | Sélection |
---|---|
/ | <librairie>
... </librairie> |
librairie | <librairie>
... </librairie> |
librairie/categorie sans select="Pattern2" |
<categorie nom="Histoire"> |
librairie categorie[@nom='Informatique'] |
<categorie nom="Informatique"> ... </categorie> |
librairie/categorie[1] sans select="Pattern2" |
<categorie nom="Fantastique"> ... </categorie> |
librairie/categorie livre |
<livre ISBN="2724267737">
... </livre> <livre ISBN="2744113670"> ... </livre> <livre ISBN="..."> ... </livre> <livre ISBN="9782091855981"> ... </livre> |
librairie categorie[3]/*/titre |
<titre>HTML 4 & XML</titre> <titre>3D Studio 4</titre> <titre>Illustrator 7.0</titre> |
librairie categorie/@nom |
nom = "Histoire" nom = "Fantastique" nom = "Informatique" nom = "Education" |
librairie/categorie/livre @ISBN |
ISBN="2724267737" ISBN="2744113670" ISBN="..." ISBN="9782091855981" |
librairie/categorie livre[position()=2]/auteur |
<auteur>Max Gallo</auteur> <auteur>Edgard A. Poe</auteur> <auteur>Emmanuel Forsans</auteur> <auteur>Gérard Durozoi</auteur> |