Tải bản đầy đủ (.pdf) (5 trang)

Pratique de MySQL et PHP- P75 pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (149.1 KB, 5 trang )

348 Chapitre 8. XML
// Il y a un problème. Affichage du formulaire de saisie
// avec les valeurs du tableau
$this−>vue−>contenu = "Problème: $message<br/>"
. $tbl_film−>formulaire (TableBD::INS_BD,
"saisie" , "inserer");
}
else {
// Insertion , avec la fonction du modèle
$tbl_film−>insertion ();
// On affiche ce qu’on vient d’insérer
$this−>vue−>id_film = $tbl_film−>id ;
$this−>vue−>titre = $tbl_film−>titre ;
$this−>vue−>annee = $tbl_film−>annee ;
$this−>vue−>realisateur = $tbl_film−>nomRealisateur () ;
$this−>vue−>fichier_xml = $_FILES [ ’ fichierXML ’ ][ ’name ’ ];
$this−>vue−>setFile ("contenu" , "xml_import . tpl ") ;
}
}
echo $this−>vue−>render ("page") ;
}
En résumé, nous avons vu dans cette section comment écrire un module d’analyse
de documents XML simple mais limité, puis comment utiliser des aspects avancés
de la programmation orientée-objet pour obtenir des outils beaucoup plus puis-
sants, comprenant une bonne partie de code réutilisable en toutes circonstances.
On peut noter que cette programmation permet notamment d’éviter le recours
aux variables globales, qui mène rapidement à des scripts difficilement compréhen-
sibles.
8.4 MISE EN FORME DE DOCUMENTS AVEC XSLT
Pour conclure cette présentation des possibilités d’utilisation de documents XML en
association avec MySQL/PHP, nous montrons comment transformer un document


obtenu par export d’une base MySQL en un format quelconque avec le langage de
transformation XSLT. La motivation est la même que celle déjà explorée avec les
templates : on voudrait pouvoir séparer complètement le traitement du contenu,ici
obtenu par de la programmation PHP/MySQL, et la présentation de ce contenu. Dans
le cas des templates on utilisait des « modèles » HTML comprenant des « entités » et
on remplaçait ensuite, par programmation, ces entités par des chaînes de caractères
PHP construites dynamiquement.
La technique XML/XSLT est comparable, avec deux différences notables :

les modèles de templates sont remplacés par des règles et autres instructions
XSLT ;

au lieu de placer le contenu dans une chaîne de caractères, on le représente de
manière structurée dans un document XML.
8.4 Mise en forme de documents avec XSLT 349
Contrairement aux systèmes de templates, des solutions ad hoc dépendantes de
la bonne volonté d’un petit groupe de programmeurs, XSLT est un langage offi-
ciellement promu et défini par le World Wide Web Consortium, conçu pour offrir
toute la puissance nécessaire à la publication de contenus complexes, et offrant
incontestablement de solides garanties de pérennité. De plus, pour un même type
de document XML, il est possible de définir plusieurs programmes XSLT, chacun
correspondant à un format de sortie différent. XSLT est une solution à considérer si
on construit un site publiant un même contenu à destination de plusieurs médias.
En contrepartie, XSLT est un langage complexe à apprendre et à maîtriser, et
qu’avant de s’engager dans une solution technique comprenant des langages aussi
différents que HTML, PHP, SQL, XML, XSLT, etc., il faut réfléchir sérieusement à
ses avantages et inconvénients.
La présentation qui suit a essentiellement pour objectif de vous permettre d’ap-
précier les caractéristiques d’une telle solution, à charge pour vous ensuite de faire
vos choix en connaissance de cause. Il exclu de se lancer ici dans une présentation

du langage XSLT. Les quelques exemples présentés se veulent suffisamment intuitifs
pour saisir les principes de base.
8.4.1 Quelques mots sur XSLT
Un programme XSLT est un document XML, constitué d’un élément racine
<xsl:stylesheet>, comprenant lui-même d’autres éléments parmi lesquels ceux
qui correspondent à des instructions XSLT sont tous préfixés par « xsl: ». Les
principaux éléments XSLT sont les règles,denom<xsl:template>.
Un programme XSLT s’applique à un document source XML en entrée et produit
un document résultat (qui est lui aussi du XML). La production du document résultat
s’appuie sur les règles du programme. Intuitivement, le processeur XSLT commence
par parcourir le document source, lequel est considéré comme une arborescence de
nœuds. Pour chaque nœud, le processeur regarde si une des règles du programme
XSLT s’applique au nœud. Si c’est le cas, un fragment du document résultat décrit
dans la règle va être produit. L’assemblage de tous les fragments produits au cours de
l’exécution d’un programme constitue le document résultat complet.
Nous allons présenter un programme XSLT qui s’applique aux documents XML
exportésdelabaseFilms (voir par exemple
KillBill.xml, page 331) et les transforme en
un document HTML. Voici le programme XSLT « principal », avec une seule règle.
Exemple 8.17 La règle XSLT pour la production d’une page HTML
<?xml version=" 1.0" encoding="ISO−8859−1"?>
<xsl:stylesheet version="1.0 "
xmlns:xsl="http: //www.w3. org/1999/XSL/Transform">
<xsl:include href="Film . xsl " />
<xsl:output method="html"
encoding="ISO−8859−1"/>
350 Chapitre 8. XML
<xsl:template match="/">
<!−− Entête de la page −−>
<html>

<head>
<title>Page produite avec XSLT</ title>
<link rel="stylesheet" href="films . css" type="text/ css"/>
</ head>
<body>
<center><h1>Résultat de la mise en forme XSLT</h1></ center>
Voici la liste des films , mis au format HTML.
<!−− Mise en forme du document XML −−>
<xsl:apply−templates />
</ body>
</ html>
</xsl:template>
</ xsl:stylesheet>
Ce programme est bien un document XML, avec un élément racine
<xsl:stylesheet>, contenant deux instructions <xsl:include>
et <xsl:output> sur lesquelles nous reviendrons plus tard, et une règle
<xsl:template>. Le principe d’un tel programme est d’exécuter les instructions
XSLT et de les remplacer par le résultat de cette exécution qui doit être un fragment
XML bien formé. Quand toutes les instructions ont été traitées, il reste un
document XML résultat sans traces d’instructions XSLT. Ici le « dialecte » choisi
pour la sortie est du (X)HTML.
L’attribut match de la règle indique les nœuds du document source pour lesquels
elle va être déclenchée. La valeur de cet attribut doit être une expression d’un
autre langage, XPath, qui permet d’exprimer des chemins dans une arborescence
XML. L’expression « / » indique en l’occurrence que la règle s’applique à la racine
du document XML. Quand le processeur va rencontrer ce nœud (il s’agit du premier
rencontré), la règle est déclenchée et produit la version intermédiaire suivante du
document résultat.
Exemple 8.18 Regle1.xml : Résultat intermédiaire après application de la première règle
<html>

<head>
<title>Page produite avec XSLT</title>
<link rel="stylesheet" href="films.css" type="text/css"/>
</head>
<body>
<center><h1>Mise en forme XSLT</h1></center>
8.4 Mise en forme de documents avec XSLT 351
Voici la liste des films, mis au format HTML.
<! Mise en forme du document XML >
<xsl:apply-templates/>
</body>
</html>
Ce document est déjà un document XML bien formé, mais pas encore un docu-
ment HTML. Il contient encore une instruction XSLT, <xsl:apply-templates>,
ce qui indique que le traitement n’est pas fini. Le processeur XSLT va donc continuer
à parcourir le document source, en cherchant les règles qui s’appliquent à ses nœuds
et en déclenchant les règles appropriées.
Dans notre premier programme nous avions une instruction <xsl:include>.
Comme son nom l’indique, elle inclut un autre programme XSLT,
Film.xsl, qui contient
une unique autre règle.
Exemple 8.19 La règle XSLT pour la présentation d’un film
<?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" indent="yes"/>
<xsl:template match="Film">
<h1><i><xsl:value−of select="titre"/></i></h1>
<!−− Genre , pays , et année du film −−>
<xsl:value−of select="genre"/>,

<i> <xsl:value−of select="code_pays"/></ i>,
<xsl:value−of select="annee"/>.
<!−− Auteur du film −−>
Mis en scène par
<b><xsl:value−of
select="concat( realisateur /prenom , ’ ’ , realisateur
/nom)"/>
</b>
<h3>Acteurs</h3>
<xsl:for−each select="Acteur">
<b><xsl:value−of select="concat(prenom , ’ ’ ,nom)"/></b>
:
<xsl:value−of select="nom_role"/><br/>
</ xsl:for−each>
<!−− Résumé du film −−>
<h3>Résumé</h3>
352 Chapitre 8. XML
<xsl:value−of select="resume" />
</ xsl:template>
</ xsl:stylesheet>
L’attribut match indique que cette seconde règle se déclenche sur un nœud
<Film>. Ce déclenchement produit un fragment qui constitue une représentation
HTML des différentes données constituant le film rencontré. La page HTML résultat
contiendra, s’il y a trois films, les trois fragments successivement produits par exécu-
tion de cette règle. Les données sont extraites du document source avec l’instruction
<xsl:value-of>. Par exemple :

<xsl:value-of select="titre"> insère dans le résultat le contenu de
l’élément <titre>, fils de l’élément <Film> ;


<xsl:value-of select="Realisateur/@nom"> insère dans le résultat
la valeur de l’attribut nom de l’élément <Realisateur>, fils de l’élément
<Film> ;
On peut noter que XSLT permet également d’effectuer des boucles sur un
ensemble d’éléments, ici les acteurs, avec l’instruction <for-each>. À chaque
fois que le processeur évalue une de ces instructions, elle est remplacée par le
fragment XML produit. Quand toutes les instructions ont été traitées, on obtient un
document HTML.
Voici par exemple ce que donne l’exécution de cette seconde règle, à partir du
document intermédiaire
Regle1.xml, page 350, appliqué au document source KillBill.xml
page 331. On constate que le xsl:apply-templates est remplacé par le fragment
XHTML produit :
Exemple 8.20 Regle2.xml : Après application de la deuxième règle
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Page produite avec XSLT</title>
<link rel="stylesheet" href="films.css" type="text/css"/>
</head>
<body>
<center><h1>R´esultat de la mise en forme XSLT</h1></center>
Voici la liste des films, mis au format HTML.
<h1><i>Kill Bill</i></h1>Drame, <i>USA</i>, 2003.
Mis en sc`ene par <b>Quentin Tarantino</b>.
<h3>Acteurs</h3>
<b>Uma Thurman</b>: La mari´ee, alias "Black Mamba"<br/>
<b>Lucy Liu</b>: O-Ren Ishii<br/>
<b>David Carradine</b>: Bill<br/>

×