1. Trang chủ
  2. » Công Nghệ Thông Tin

Pratique de MySQL et PHP- P71 pptx

5 261 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 160,33 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

1955 Pi`ege de cristal 1988 USA Action McClane Pulp fiction 1994 USA Action Butch Coolidge Cette fois, en supposant que le point d’accès est toujours un acteur, on a toutes les inf

Trang 1

<annee_naissance>1955</annee_naissance>

<Film>

<titre>Pi`ege de cristal</titre>

<annee>1988</annee>

<code_pays>USA</code_pays>

<genre>Action</genre>

<nom_role>McClane</nom_role>

</Film>

<Film>

<titre>Pulp fiction</titre>

<annee>1994</annee>

<code_pays>USA</code_pays>

<genre>Action</genre>

<nom_role>Butch Coolidge</nom_role>

</Film>

</Acteur>

</Acteurs>

Cette fois, en supposant que le point d’accès est toujours un acteur, on a toutes les informations relatives à cet acteur dans le même sous-arbre, ce qui va permettre d’y accéder efficacement et simplement On voit en revanche que si on souhaite prendre comme point d’accès un film, les informations utiles sont réparties un peu partout dans l’arbre, et que leur reconstitution sera plus difficile.

La base de données que nous utilisons dans nos exemples est très simple Il est clair que pour des bases réalistes présentant quelques dizaines de tables, la conception d’un schéma XML d’exportation doit faire des compromis entre l’imbrication des données

et la conservation des correspondances clé primaire/clé étrangère sous forme de lien

de navigation dans le document XML Tout dépend alors des besoins de l’application,

de la partie de la base qu’il faut exporter, et des chemins d’accès privilégiés aux informations qui seront utilisés dans l’exploitation du document.

8.2.2 Application avec PHP

La transformation d’une table MySQL en document XML est extrêmement simple puisqu’il suffit de créer une chaîne de caractères au format approprié Une approche directe mais fastidieuse consiste à agir au cas par cas en engendrant « à la main » les balises ouvrante et fermante et leur contenu Comme toujours il faut essayer d’être le plus générique possible : la fonction présentée ci-dessous prend un tableau

associatif contenant une liste (nom, valeur ) et crée une chaîne XML Cette chaîne

est un élément dont le nom est passé en paramètre (si la chaîne vide est passée pour le nom, seul le contenu de l’élément, sans les balises ouvrante et fermante, est renvoyé).

Trang 2

REMARQUE –Il faut, comme en HTML, être attentif à éviter d’introduire des caractères réservés comme <, >, ’, " ou & dans les contenus XML Le traitement par la fonction htmlSpecialChars()qui remplace ces caractères en appels d’entités convient parfaite-ment

L’élément créé est précédé de tabulations afin de faciliter une mise en forme claire

du document final, comme nous le montrerons plus loin Enfin la représentation

du tableau peut, au choix, reposer sur des attributs ou des éléments Voici le code

de la fonction, qui est techniquement une méthode statique de la classe utilitaire EchangeXML.

s t a t i c f u n c t i o n t a b l e a u V e r s X M L ( $ t a b l e a u = a r r a y ( ) ,

$nom_element= " l i g n e " , $ n b _ t a b =0 , $ f o r m a t = s e l f : : ELEMENTS) {

/ / C r é a t i o n d ’ u n e c h a î n e a v e c l e n o m b r e $ n b _ t a b d e

/ / t a b u l a t i o n s

$ t a b s = " " ;

f o r ( $ i = 0 ; $ i < $ n b _ t a b ; $ i ++) $ t a b s = " \ t " ;

$chaine_XML = $ a t t r s = " " ;

/ / M i s e e n f o r m e e n f o n c t i o n du f o r m a t d e m a n d é

i f ( $ f o r m a t == s e l f : : ELEMENTS) {

/ / On c r é e s i m p l e m e n t un é l é m e n t XML p o u r c h a q u e a t t r i b u t / / d e l a t a b l e , e t on c o n c a t è n e l e s é l é m e n t s

f o r e a c h ( $ t a b l e a u a s $nom => $ v a l ) {

/ / On r e t i r e l e s r e t o u r s à l a l i g n e du r é s u m é

i f ( $nom == " r e s u m e " ) $ v a l = s t r _ r e p l a c e ( " \n " , " \n\ t " ,

$ v a l ) ;

/ / On p l a c e l ’ i d e n t i f i a n t comme un a t t r i b u t

i f ( $nom== " i d " ) $ a t t r s = " $nom = ’ $ v a l ’ " ;

/ / P o u r t o u s l e s a u t r e s on c r é e un é l é m e n t

i f ( $nom != " i d _ r e a l i s a t e u r " and $nom != " i d " and ! empty (

$ v a l ) ) {

$chaine_XML = $chaine_XML $ t a b s " <$nom> " h t m l S p e c i a l C h a r s ( $ v a l ) " </$nom>\n " ; }

}

/ / La c h a î n e o b t e n u e e s t l e c o n t e n u d e l ’ é l é m e n t

$ n o m _ e l e m e n t

i f ( ! empty ( $nom_element ) ) {

$chaine_XML = " $ t a b s <$nom_element $ a t t r s >\

n$chaine_XML$tabs < / $nom_element >\n " ; }

}

e l s e {

/ / On c r é e un s e u l é l é m e n t a v e c d e s a t t r i b u t s XML

i f ( i s _ a r r a y ( $ t a b l e a u ) ) {

f o r e a c h ( $ t a b l e a u a s $nom => $ v a l ) {

$chaine_XML = " $nom=\" " h t m l S p e c i a l C h a r s ( $ v a l ) "

\" " ;

Trang 3

} }

$chaine_XML = " $ t a b s <$nom_element $chaine_XML / >\n " ;

}

r e t u r n $chaine_XML ;

}

Les commentaires indiquent les étapes de cette conversion vers XML, qui ne pré-sente aucune difficulté conceptuelle Maintenant il devient très facile de transformer une base en document XML Notre outil d’export (voir la copie d’écran page 318) offre un formulaire permettant à l’utilisateur de saisir des critères de recherche pour des films de la base À partir de ces critères une requête est créée (on réemploie bien entendu la fonction Util::creerRequetes() déjà utilisée pour rechercher les films à noter), exécutée, et chaque film est mis sous la forme d’un élément XML auquel on ajoute le metteur en scène et les acteurs Voici le script complet de l’action export dans le contrôleur XML :

f u n c t i o n e x p o r t ( )

{

/ / P o u r c r é e r un f i c h i e r p a r f i l m

$ m u l t i _ f i l e s = f a l s e ;

/ / C r é a t i o n d e l a r e q u ê t e SQL e n f o n c t i o n d e s c r i t è r e s

$ r e q u e t e = U t i l : : c r e e r R e q u e t e s ( $_POST , $ t h i s−>bd ) ;

$ r e s u l t a t = $ t h i s−>bd−>execRequete ( $ r e q u e t e ) ;

/ / On p a r c o u r t l e s f i l m s e t on l e s t r a n s f o r m e e n XML

$document = " " ;

$ n b F i l m s = 0 ;

w h i l e ( $ f i l m = $ t h i s−>bd−>l i g n e S u i v a n t e ( $ r e s u l t a t ) ) {

/ / M i s e e n f o r m e du f i l m

$film_XML = EchangeXML : : t a b l e a u V e r s X M L ( $ f i l m , " " ) ;

/ / M i s e e n f o r m e du m e t t e u r e n s c è n e

$mes = U t i l : : c h e r c h e A r t i s t e A v e c I D ( $ f i l m [ ’ i d _ r e a l i s a t e u r ’ ] ,

$ t h i s−>bd , FORMAT_TABLEAU) ;

$film_XML = EchangeXML : : t a b l e a u V e r s X M L ( $mes , " r e a l i s a t e u r " ,

1 , EchangeXML : : ELEMENTS) ;

/ / A j o u t d e s a c t e u r s e t d e l e u r r ô l e

$ r e q _ a c t e u r s = " SELECT i d , prenom , nom , a n n e e _ n a i s s a n c e ,

n o m _ r o l e "

"FROM A r t i s t e A, R o l e R "

"WHERE A i d = R i d _ a c t e u r AND R i d _ f i l m = ’ { $ f i l m [ ’ i d ’ ] } ’ " ;

$ r e s _ a c t e u r s = $ t h i s−>bd−>execRequete ( $ r e q _ a c t e u r s ) ;

w h i l e ( $ r o l e = $ t h i s−>bd−>l i g n e S u i v a n t e ( $ r e s _ a c t e u r s ) ) {

$film_XML = EchangeXML : : t a b l e a u V e r s X M L ( $ r o l e , " A c t e u r " ,

1 , EchangeXML : : ELEMENTS) ;

Trang 4

/ / On p l a c e l e c o n t e n u d a n s l a b a l i s e < F i l m >

$document = " <Film >\n " $film_XML " \n </ Film >\n " ;

$ n b F i l m s ++;

}

/ / On e n v o i e l ’ en−t ê t e HTTP, e t l e p r o l o g u e du document XML

Header ( " Content−t y p e : t e x t / xml " ) ;

echo " <? xml v e r s i o n = \ " 1 0 \ " e n c o d i n g =\" i s o−8859−1\"?>\n\n " ; / / M i s e e n f o r m e s e l o n l e c h o i x d e l ’ u t i l i s a t e u r

i f ( $_POST [ ’ f o r m a t ’ ] == "XML" ) {

/ / On s o r t l e XML b r u t

echo " < F i l m s >\n$document < / F i l m s >\n " ; ;

}

e l s e {

/ / On a p p l i q u e u n e t r a n s f o r m a t i o n XSLT I l s u f f i t d ’ a j o u t e r / / u n e i n s t r u c t i o n p o u r q u e l e n a v i g a t e u r e n t i e n n e c o m p t e / / e t a p p l i q u e l a t r a n s f o r m a t i o n F i l m x s l

echo " <? xml−s t y l e s h e e t h r e f = ’ / x s l / Film x s l ’ t y p e = ’ t e x t / x s l

’? >\ n "

" < F i l m s >\n$document < / F i l m s >\n " ; ; }

}

Quand le format choisi est XML, le document renvoyé est déclaré de type MIME text/xml pour qu’il soit affiché sous une forme présentable dans le navigateur.

En jouant sur le type MIME on pourrait également forcer le téléchargement du document sur la machine du client application/force-download) Si on choisit

le format HTML, le même document est transmis, mais avec une instruction de traitement qui demande au navigateur d’appliquer une transformation XSLT Nous y revenons en fin de chapitre, page 348.

Vous pouvez directement utiliser ce script sur notre site pour récupérer un ou

plusieurs films en XML Voici par exemple le résultat obtenu pour Kill Bill.

Exemple 8.10 KillBill.xml: Exemple de document produit par le script précédent

<?xml version="1.0" encoding="ISO-8859-1"?>

<Films>

<Film>

<titre>Kill Bill</titre>

<annee>2003</annee>

<code_pays>USA</code_pays>

<genre>Drame</genre>

<resume>Au cours d’une c´er´emonie de mariage en plein d´esert, un commando fait irruption dans la chapelle et tire sur les convives Laiss´ee pour morte, la Mari´ee enceinte retrouve ses esprits apr`es un coma de quatre ans Celle qui a auparavant exerc´e les fonctions de tueuse `a gages au sein du D´etachement International des Vip`eres Assassines n’a alors plus qu’une

Trang 5

seule id´ee en t^ete : venger la mort de ses proches en ´eliminant tous les membres de l’organisation criminelle, dont leur chef Bill qu’elle se r´eserve pour la fin.</resume>

<Realisateur

nom="Tarantino"

prenom="Quentin"

annee_naissance="1963" />

<Acteur

prenom="Uma"

nom="Thurman"

annee_naissance="1970"

nom_role="La mari´ee, alias &quot;Black Mamba&quot;" />

<Acteur

prenom="Lucy"

nom="Liu"

annee_naissance="1968"

nom_role="O-Ren Ishii" />

<Acteur

prenom="David"

nom="Carradine"

annee_naissance="1936"

nom_role="Bill" />

<Acteur

prenom="Michael"

nom="Madsen"

annee_naissance="1958"

nom_role="Budd / Sidewinder" />

<Acteur

prenom="Daryl"

nom="Hannah"

annee_naissance="1960"

nom_role="Elle Driver" />

</Film>

</Films>

8.3 IMPORT DE DONNÉES XML DANS MySQL

L’opération inverse, l’import d’un document XML dans une base de données MySQL, est un peu plus difficile Au lieu de s’appuyer sur SQL pour récupérer les données dans

la base, il faut utiliser un parseur de documents XML qui va analyser la structure du

document et permettre d’accéder à ses différents composants.

Les parseurs XML s’appuient sur deux modèles possibles de traitement d’un

document, connus respectivement sous les acronymes SAX (Simple API for XML)

et DOM (Document Object Model) Le modèle de traitement de SAX consiste à

parcourir le document linéairement, et à déclencher des fonctions à chaque fois qu’une des catégories syntaxiques (balises ouvrantes, fermantes, texte, instructions

de traitement, etc.) constituant un document XML est rencontrée.

Ngày đăng: 06/07/2014, 00:20

TỪ KHÓA LIÊN QUAN