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

Tài liệu MySQL et CSS- P7 docx

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

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Les Expressions Rationnelles
Thể loại Bài viết hướng dẫn
Định dạng
Số trang 50
Dung lượng 0,99 MB

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

Nội dung

8.2 Les expressions rationnellesDans le chapitre précédent, nous avons utilisé des expressions rationnelles pour créer le nom de la table dans le programme mini-forum.php.. Dans l’expres

Trang 1

8.2 Les expressions rationnelles

Dans le chapitre précédent, nous avons utilisé des expressions rationnelles

pour créer le nom de la table dans le programme mini-forum.php.

Dans l’expression suivante, nous avons extrait le nom de fichier duchemin que nous avons écourté de son extension :

preg_match("#^/.*/(.*)\.[A-z0-9]{3,4}$#", $_SERVER[‘PHP_SELF’], $tableau);

Ces signes vous apparaissent sans doute comme des hiéroglyphes maisnous espérons qu’à la fin de ce chapitre, vous percevrez le langageparticulier des expressions rationnelles ou régulières Nous utiliseronsl’adjectif « rationnelle » pour caractériser ces expressions car elles sontplutơt irrégulières dans le sens ó elles ne régulent rien et sont utiliséesdifféremment pour chaque cas En fait, « régulière » est la traduction de

regular qui dans l’expression « regular expression » signifie « expression

consacrée » Nous emploierons donc le terme « expressions rationnelles »car ces expressions permettent une recherche générique ou abstraite sur uncertain nombre de caractères ou de groupes de caractères Le type decaractère et sa place sont traduits sous forme de caractères de description.Nous avons donc traduit, sous une forme abstraite, un mot ou uneexpression recherchée Ce langage est puissant mais également trèscomplexe Nous n’en ferons pas le tour dans ce livre, nous vous aideronsseulement à comprendre certains principes et vous en proposerons lesexpressions les plus courantes

La méthode

Vu le comportement très complexe des moteurs d’expressions les, l’approche ne peut être qu’empirique Avec un peu d’habitude, lasolution sera trouvée plus rapidement Dans chaque recherche, vous avez

rationnel-un objectif Vous voulez vérifier, extraire ou remplacer rationnel-une chaỵne decaractères, c’est le centre de votre stratégie Il faut aider le moteur àtrouver des repères autour de cet objectif Si vous recherchez www, voussavez qu’il est entouré de http:// et d’un point Plus vous caractérisezvotre objectif, plus vous aurez de chances de le trouver Le moteur aquelques « défauts » Ainsi ne s’arrêtera-t-il pas au premier motif trouvémais ira jusqu’à la fin de la cible C’est ce qu’on appelle l’avidité Elle

Trang 2

peut pousser le moteur à être trop perfectionniste dans sa recherche et à nepas trouver ce qu’il a "sous les yeux" car il cherche toujours un motifcomplémentaire.

Tab 8.3 : Début et fin de ligne

Signe Description

^ Début de ligne, sauf quand le signe se trouve à l’intérieur de

crochets Il signifie alors une négation.

Les parenthèses permettent de délimiter des sous-motifs qui seront stockésdans un tableau, dans le cas d’une recherche ou dans les variablesspéciales \\0 pour la totalité du motif, \\1 pour la première parenthèse…

En ce qui concerne les expressions rationnelles, PHP a hérité du module

du langage Perl et des normes POSIX Nous allons étudier un cas assezsimple pour commencer puis verrons la syntaxe et approfondirons.Auparavant, nous ferons le panorama des fonctions du langage PHP quiutilisent les expressions rationnelles

Retourne Vrai si la chaîne contient le motif.

string ereg_replace ( string motif, string nouveau_motif, string chaîne)

Remplace le motif à l’intérieur de la chaîne par le nouveau motif.

eregi() Comme ereg() mais insensible à la casse

Trang 3

Tab 8.4 : Fonctions pour des expressions rationnelles POSIX

Fonction Description

eregi_replace() Comme ereg_replace() mais insensible à la

casse array split ( string

motif_séparateur, string chaîne [, int limite])

Découpe la chaîne en sous-chaînes au moyen du séparateur.

string sql_regcase ( string chaîne)

Crée une expression rationnelle insensible à la casse à partir de la chaîne Pour PHP, le résultat sera [Pp][Hh][Pp].

Quelques études de cas

Vous voulez savoir si vous avez des chiffres dans un texte

de tous les chiffres inclus dans l’intervalle 0 à 9

Si vous voulez rechercher un chiffre particulier :

¶ ereg(’0’,$expression) recherche le chiffre 0

¶ ereg(’[09]’,$expression) recherche les chiffres 0 ou 9 dansl’expression

Si vous souhaitez que ces chiffres ne soient pas dans l’expression,employez le caractère ^ dans les crochets Si vous l’employez en dehorsdes crochets, il n’a plus même sens

ereg(’[^0]’,$expression) sera vrai si le chiffre 0 n’est pas dansl’expression

Rappelez-vous :

if !ereg(’[^0-9]’,$table){

$table.=’_’;

Trang 4

Nous vérifiions que le nom de la table créée à partir d’un nom de fichier

ne contient pas uniquement des chiffres Si c’était le cas, nous aurionsajouté un blanc souligné

$contenu_txt =ereg_replace("([[:space:]]|^)[A-z0-9]{1,2}[[:space:]]",

" ",$contenu_txt);

Dans cette expression, nous cherchons un mot (entouré d’espaces) quicontienne de une à deux lettres ([[:space:]]|^) [A−z0−9]{2,}signifie qu’on recherche au moins deux caractères alphanumériques placés

en début de chaîne ou après un espace

Il reste un caractère que nous n’avons pas vu, c’est le caractère point (.)

Il remplace n’importe quel nombre et type de caractère Si vous voulezreprésenter un vrai point, il vous faudra utiliser un caractère d’échappe-ment (\.)

Voici les expressions POSIX et leurs équivalents

Tab 8.5 : Les normes POSIX

Séquence Équivalent Description

[[:alnum:]] [A−Za−z0−9] Caractères alphanumériques [[:alpha:]] [A−Za−z] Caractères alphabétiques

[[:blank:]] [\x09] Espaces ou tabulations [[:lower:]] [a−z] Caractères en bas de casse [[:upper:]] [A−Z] Caractères en capitales [[:xdigit:]] [0−9a−fA−F] Caractères hexadécimaux [[:punct:]] [!−/:−@[− ′{−~] Caractères de ponctuation [[:space:]] [\t\v\f] Tout caractère d’espace [[:cntrl:]] [\x00−\x19\x7F] Caractères de contrôle [[:graph:]] [!−−] Caractères affichables et

imprimables [[:print:]] [−~] Caractères imprimables sauf

caractères de contrôle

Trang 5

Les caractères sont dans l’ordre du tableau de caractères ASCII Ainsi,dans [a−z], les lettres accentuées ne figurent pas.

Les lettres accentuées

Pour ce cas , utilisez les caractères \x suivis du numéro dans

la table ASCII Pour trouver si votre texte contient des lettres

accentuées françaises, vous devez écrire [\x128−\x151\153\154], c’est-à-dire les caractères 128 à 151 puis les 153 et 154 De la même façon, si vous voulez le caractère littéral ^, utilisez \x94.

Pour affiner notre recherche, nous avons à notre disposition la cardinalité,c’est-à-dire que nous pouvons sélectionner le nombre de caractères :

¶ ereg(’[0−9]{1}’,$expression) recherche s’il existe un chiffredans l’expression

¶ ereg(’[0−9]{1,3}’,$expression) recherche s’il existe entre un ettrois chiffres dans l’expression

Nous avons aussi des équivalents

En voyant le tableau précédent, vous pouvez vous interroger sur l’utilité

de l’étoile * Ce signe renvoie en effet Vrai que le caractère existe oun’existe pas En fait, il s’emploie dans des expressions plus complexes

¶ ereg(’[0−9]*’,$expression) recherche s’il existe au moins zérochiffre dans l’expression

Trang 6

Vous pouvez par exemple rechercher un mot qui peut être au pluriel ou ausingulier !ereg(’régulières*’, $expression) sera vrai si le mot

"régulière" ou "régulières" n’existe pas dans l’expression ;=)

Si vous recherchez le mot événement qui peut aussi s’écrire évènement,vous emploierez l’expression ereg(’évé|ènement*’, $expression)

Le signe | signifie ou Cette expression est équivalente à :ereg(’év[éè]nement*’, $expression)

Vous pouvez aussi faire porter la précision sur plusieurs caractères Ainsi,vous cherchez un mot masculin ou féminin comme docteur ou docteresse

’docteu*r(esse)*’ Le problème est que docteuresse fonctionne aussi

’docteu*r’ sera mieux adapté Nous verrons un peu plus loin lesproblèmes d’avidité qui font que dès que l’une des expressions esttrouvée, le moteur retourne Vrai sans aller jusqu’à la fin de l’expression.Reprenons les fonctions date_nombre() et nombre_date() avec lesexpressions rationnelles Le code sera plus court et l’exécution plusrapide :

$ladate=ereg_replace("(^[0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})",

"\\3/\\2/\\1 \\4h\\5", $ladate);

} elseif ($longueur==14){

$ladate=ereg_replace("(^[0-9]{4})([0-9]{2})([0-9]{2}) ([0-9]{2})([0-9]{2})","\\3/\\2/\\1 \\4h\\5mn\\6", $ladate);

Trang 7

return $ladate;

}

Nous vérifions dans cette fonction la longueur de la date et, selon la taille,

en extrayons aussi l’heure, les minutes et les secondes Les jours, mois etheure sont forcés en int (typées) car nous voulons éviter qu’ils commen-cent par un 0

$an=’20’.$an;

} }

Les fonctions compatibles Perl

L’intérêt majeur de ces fonctions compatibles avec le langage Perl est quevous pouvez utiliser des options utiles, voire indispensables

Trang 8

Tab 8.7 : Fonctions pour des expressions rationnelles compatibles Perl

Fonction Description

array preg_grep ( string motif, array tableau)

Retourne dans un tableau les éléments extraits d’un autre tableau qui correspondent au motif.

int preg_match ( string motif, string chaîne [, array tableau])

Retourne Vrai si la chaîne contient le motif donné et emplit le tableau éventuel avec les correspondances.

int preg_match_all ( string motif, string chaîne [, array tableau])

Renvoie dans un tableau toutes les occurrences du motif dans la chaîne Un ordre peut être envoyé par le paramètre optionnel.

mixed preg_replace ( mixed motif, mixed nouveau_motif, mixed chaîne [, int limite])

Remplace le motif par le nouveau motif dans la chaîne et retourne la nouvelle chaîne Si la limite est posée, le nombre de remplacements sera limité.

array preg_split ( string motif, string chaîne [, int limite])

Découpe une chaîne en utilisant le motif comme séparateur.

Un certain nombre d’options affinent encore la recherche Ces expressionsrationnelles compatibles avec le langage Perl sont caractérisées par descontenants qui sont généralement des barres obliques ou peuvent être # ou

%… Tout caractère non utilisé dans le motif recherché peut être mis àcontribution Reprenons l’exemple de l’extraction du nom du fichier dans

le mini-forum :

preg_match("#^/.*/(.*)\.[A-z0-9]{3,4}$#", $_SERVER[‘PHP_SELF’], $tableau);

Ici, les caractères de limite d’expression sont # Le premier caractère

^désigne un début de ligne alors qu’il signifierait une négation dans descrochets Le dernier caractère $ signifie une fin de ligne Nous avonsutilisé # et non /, déjà utilisé dans le motif recherché : un chemin avec desrépertoires

Trang 9

Ensuite, le premier caractère est une barre oblique présente au début de lavaleur de $_SERVER[‘PHP_SELF’] qui affiche le chemin à partir durépertoire web Nous avons * Le point représente n’importe quelcaractère et n’importe quel nombre de caractères, il peut s’agir deplusieurs répertoires ou d’aucun En suivant l’expression, nous trouvonsune autre barre oblique Si nous regardons plus loin, nous trouvons leschéma du fichier avec le point et les trois ou quatre caractères qui

caractérisent son format appelés son extension (.doc, jpg, php, html,

.php3…) Ce que nous voulons récupérer est le mot entre la dernière barre

oblique et le point Nous caractérisons l’extension, le point et la barreoblique pour délimiter le motif qui représente notre objectif Cet objectifest représenté par (.*)

Tab 8.8 : Les caractères d’échappement dans les expressions rationnelles

Caractère Description

\w Caractère de mot Les caractères de mot sont les

alphanumériques et le blanc souligné (_).

\b Limite de mot (entre le \W et le \w)

\S Tout caractère sauf un caractère d’espace

Créons un système de fichier très simple Imaginons que vous ayez unrépertoire ó vous voulez placer tous vos fichiers sans fioritures Ce quivous intéresse et intéresse vos visiteurs, c’est seulement le contenu desfichiers Vous avez peu de temps et acceptez de placer votre texte dans unmodèle ou gabarit mais il vous pèse d’ajouter les liens de navigation àchaque nouveau fichier Nous allons donc créer un fichier qui sera àl’écoute de votre répertoire Dans un premier temps, ce fichier ira chercher

la liste des fichiers dans une table Chaque fichier sera affiché selon ses

Trang 10

caractéristiques : nom, titre, date de création, et dans l’ordre de date,c’est-à-dire que les plus récents seront en haut de la liste.

Il subsiste une objection, car certains fichiers seront pérennes et d’autrescirconstanciels Pour différencier les deux types de fichier, nous appelle-rons les fichiers d’actualité par un nom de date de type AAAAMMJJ Plutôtque de mettre la date du jour, nous mettrons la date de péremption Ainsi

il sera simple de les archiver dès que la date sera dépassée

Rentrons dans un tableau les types de fichiers qui seront affichés Ainsi, il

est inutile d’afficher les fichiers gif ou jpg.

<font face="Arial, Helvetica, sans-serif" size="3">

LES PAGES WEB </font></b></div>

Trang 11

dans la base*/

$fichier_courant=$tableau[2].$tableau[3].$tableau[4];

//$rep = " /BonsVivants";

///AFFICHAGE DES DONNÉES//////

/*ici nous changeons la valeur selon que le fichier soit destiné

à des archives ou à des fichiers pérennes*/

$sql="select * from fichiers where archive=’$archi’ OR archive=’’ ORDER BY moment DESC";

$resultat = @mysql_query($sql, $id_link);

} ///fin de l’affichage////////////

////fourniture de la base de données//////

if (!$archi){

$aujourdhui=date("Ymd");

//cherchons la date la plus récente///

$sql="select MAX(moment) as date_limite from fichiers";

$resultat = @mysql_query($sql, $id_link);

$nombre = @mysql_num_rows($resultat);

if ($nombre==1){

//la date dans la base est entrée en TIMESTAMP UNIX//////

TIMESTAMP

Le TIMESTAMP Unix est le nombre de secondes depuis le 1 er

janvier 1970 alors que le TIMESTAMP MySQL est un nombre de type AAAAMMJJHHMMSS.

$rang=mysql_fetch_array($resultat);

$date_limite=$rang[’date_limite’];

$maintenant=date("Ymd",$date_limite);

Trang 12

} else {

$date_limite=time()-(60*60*24*365*20);

$sql="CREATE TABLE fichiers ( clef int(11) NOT NULL auto_increment, nom_fichier varchar(60) NOT NULL default ’’, titre varchar(100) NOT NULL default ’’, archive char(1) NOT NULL default ’1’, moment bigint(20) NOT NULL default ’0’, PRIMARY KEY (clef),

UNIQUE KEY clef (clef), KEY clef_2 (clef) )";

/*CHERCHER LE TITRE DU FICHIER DANS LES BALISES HTML

Le moment a été mis sous cette forme dans le fichier :

<! <date>20/02/2003</date> -> Notez qu’il est en commentairedans le HTML, donc non affiché Si ce code existe dans le fichier, cettedate sera prise en compte, sinon ce sera la date de dernière modification

Trang 13

$moment=mktime(0, 0, 0, $moments[1], $moments[0], $moments[2]); }

if (ereg("[0-9]{8}",$nom) && $nom >$aujourdhui && $moment>$date_limite

&& in_array ($extension, $extensions)){

$sql="insert into fichiers (nom_fichier, titre, archive, moment) VALUES (’$f’, ’$titre’, ’0’, ’$moment’)";

@mysql_query($sql, $id_link);

} elseif (in_array ($extension, $extensions) && $moment >$date_limite){

$sql="insert into fichiers (nom_fichier, titre, archive, moment) VALUES (’$f’, ’$titre’, ’0’, ’$moment’)";

@mysql_query($sql, $id_link);

} } } closedir($dir);

} ///fin archi ==0

? >

</table></td></tr>

</table>

Si le fichier possède un nom de type 20020601, ce nom sera comparé à la

date du jour S’il est moins récent, la valeur d’archive sera mise sur 1 Ceciest intéressant pour des fichiers d’actualité qui deviendront obsolètes aprèsune certaine date et que nous archivons

Listing 8.2 : Ecoute fichiers : table_ecoute.php

<?

if (!$archi){

$sql="select * from fichiers where archive=’0’ OR archive=’’";

$resultat = @mysql_query($sql, $id_link);

while($rang=mysql_fetch_array($resultat)){

$nom_fichier=$rang[’nom_fichier’];

Trang 14

preg_match("#^(.*)\.([A-z0-9]{3,4})$#", $nom_fichier, $tableau);

$nom=$tableau[1];

if (ereg("[0-9]{8}",$nom) && $nom <$aujourdhui){

$sql="update fichiers set archive=’1’ where nom_fichier=’$nom_fichier’";

@mysql_query($sql, $id_link);

} } }

m Figure 8.3 : Une table d’écoute : attention de mettre un titre pour chaque

fichier

Trang 15

Nous préférons afficher une autre date pour des raisons d’actualité Nousrécupérons la date que nous avons ajoutée dans le fichier lui-même enl’encadrant de balises de notre invention :<date>21/09/1999</date>.Nous prenons soin de l’insérer dans un marqueur de commentaire HTMLpour qu’il ne soit pas affiché Ici, l’expression rationnelle joue le rôle d’unanalyseur XML L’expression rationnelle utilisée par les fonctions com-patibles Perl utilise des délimiteurs et des modificateurs Ici, le modifica-teur i rend l’expression insensible à la casse.

Les motifs sur plusieurs lignes

Le caractère point représente n’importe quel caractère, sauf les caractères de nouvelle ligne \n Pour que ce caractère soit assimilé au point, il faut utiliser le modificateur s.

Ce système de fichiers peut être complexifié à l’échelle d’un site, enprenant soin de signaler les répertoires privés ou les répertoires destinés àclasser les images du site pour les protéger Vous pouvez aussi les afficher,comme nous l’avons fait pour l’annuaire de liens

Tab 8.9 : Modificateurs

Modificateur Description

A Cherche le motif seulement au début de la cible.

E Cherche le motif seulement à la fin de la cible Le caractère est pris

comme caractère.

U S’arrête dès que le premier motif qui satisfait à la recherche est trouvé.

i Le motif est insensible à la casse.

m Permet d’utiliser les ancrages ^ et $ pour des débuts ou des fin de

ligne.

s Force le moteur à considérer le caractère \n comme assimilé dans le

caractère "point".

x Permet de placer des espaces dans votre expression dont le moteur ne

tiendra pas compte Sert à rendre vos expressions plus lisibles.

Trang 16

Nous avons vu ce qui concernait les quantificateurs dans la partie POSIX.

Il est possible avec les expressions rationnelles compatibles Perl d’utiliserdes quantificateurs non avides Cela signifie qu’ils ne complètent pas larecherche du motif une fois que le motif satisfait les critères Ils nes’arrêtent pas au premier motif mais ils n’essaient pas non plus àcompléter indéfiniment le motif trouvé par d’autres caractères possibles

Tab 8.10 : Quantificateurs pour une recherche minimale

Non avide Nombre de fois

{nombre}? Exactement nombre

Quelques études de cas

Au cours de ces pages, nous avons utilisé des expressions rationnellescompatibles Perl sans les expliquer Reprenons-les :

$heure=preg_replace("/\d{8}(\d{2})(\d{2})\d{2}/","\\1",$datedujour);

Trang 17

Cet exemple prend une date de type AAAAMMJJHHMMSS dont on extraitl’heure, c’est-à-dire la première parenthèse Le motif est composé de huitchiffres suivis d’une série de trois fois deux chiffres.

"\\1 <A HREF=\"mailto:\\2\">\\2</a>\\7", $contenu_txt);

Ce motif est celui d’une adresse e-mail à laquelle nous ajoutons un lienmailto La seule obligation concernant cette adresse est qu’elle soitencadrée d’espaces ou de balises de fin de ligne Décomposons mainte-nant cette expression dans un tableau

Tab 8.11 : Analyse de la première partie de l’expression :

(\S)+? Au moins un non espace Juste après l’arobace, le moteur

continuera sa route aussi loin qu’il ne rencontrera pas d’espace

et jusqu’au point qui suit.

(\.)+? Au moins un point [A−z0−9_−]{2,3}) Après le point entre deux et trois caractères alphanumériques ou

blanc souligné ou tiret

Trang 18

Tab 8.12 : Analyse de la seconde partie de l’expression :

(((\.)* <br>\s)|((\.)*<p>\s)|((\.)*</p>\s)|((\.)*\s))

Atome Description

((\.)* <br>\s) Point éventuel suivi d’une balise <br> et un espace

comme une fin de ligne ((\.)* <p>\s) Idem avec la balise <p>

((\.)* </p>\s) Idem avec la balise </p>

((\.)*\s) Idem sans balise

Ces atomes sont reliés par le signe | (ou) Ainsi, les signes qui suivent

la partie intéressante, l’adresse e-mail, sont une fin de ligne ou un espaceblanc

Nous pouvons améliorer l’expression en enlevant la deuxième ligne decette deuxième partie et en modifiant la ligne suivante :

((\.)* </*p>\s)

Ainsi, la ligne oblique peut être ou non présente

À la fin du premier membre de l’expression qui consiste en ces deuxparties, nous avons ajouté le modificateur i après le délimiteur pour quel’expression soit insensible à la casse

Trang 19

Ici, nous cherchons à capturer le contenu des balises <title> et

</title>, en incluant l’éventualité qu’elles puissent chevaucher uneligne L’atome que vous rencontrez au milieu ((.|\n)*?) est ce que l’oncherche vraiment, c’est-à-dire tous les caractères compris entre les deuxbalises

à la suite de tests et d’approximations Le motif finit avec la répétition detitle(\\2) encadré par des chevrons Le tout est modifié par i qui lerend insensible à la casse Être un orfèvre en expressions rationnellesdemande de l’intuition et de l’expérience Ce n’est pas une science exactemais un outil indispensable aux possibilités encore largement inexplorées

Les expressions rationnelles demandent beaucoup de pratique car chaqueproblème posé est unique La construction d’une expression part d’unebase de caractères puis, par approximations, cherche à atteindre laprécision requise Cette précision se nomme la granularité L’objectifétant d’atteindre la granularité la plus appropriée Si elle est trop fine, vous

ne trouverez rien Si elle est trop grossière, vous aurez trop de résultats.Vous le voyez dans les moteurs de recherche En étant trop précis, vousn’obtenez aucun résultat

Trang 21

XML ?

Trang 22

Le XML est arrivé à point pour répondre à des besoins de communicationentre les applications avec un langage format texte Il répond, en outre, à

ce vieux rêve de clairement séparer le contenu de la présentation Avec leXML, la présentation et le contenu deviennent réutilisables dans différentscontextes (Web, archives, flux, téléphonie mobile )

L’objet de ce livre est non pas de vous donner une étude exhaustive duXML en général mais de vous permettre de créer des applications utiles ;vous pourrez ainsi approfondir le sujet avec une bonne base de compré-hension

PHP dispose de modules dédiés au XML avec les fonctions adéquatespour répondre à toutes les circonstances

Avant de créer vos pages XML sur votre serveur web…

Vérifiez avec la fonction phpinfo() si vous disposez du XML

et du module Sablotron pour le XSLT.

Le XML est un langage de balises comme le HTML Ces deux langagessont issus d’un ancêtre commun, le SGML Le SGML était trop complexepour se répandre, alors est né le HTML, qui en est une simplification et quicaractérise aussi bien une forme (<font>, <p>, <b> ) qu’un contenu(<title><script> ), utilisant la navigation par hyperliens Le HTML

a fait exploser la production de pages sur l’Internet grâce à sa simplicité

et à la tolérance des navigateurs quant à la grammaire des balises pour larestitution de ces pages Face à la prolifération des informations, voire àleur saturation, il a fallu trouver une façon de caractériser leur contenupour une communication plus pointue, et c’est là qu’intervient le XML Laplupart du temps, l’application XML se compose de trois fichiers : lefichier DTD (.dtd), une feuille XSLT(.xsl) et le fichier XML proprementdit (.xml)

Trang 23

Sur la ligne en dessous, vous déclarez la DTD :

<!DOCTYPE nomDTD SYSTEM "nom.dtd">

Vous nommez la DTD et indiquez le chemin vers le fichier ou l’URL.Ensuite, vous déclarez le fichier XSLT, qui mettra le fichier XML en forme :

<?xml-stylesheet type="text/xsl" href="adherents.xsl"?>

Les éléments et les attributs

Le fichier XML est formé de balises comme l’exemple ci-dessous :

Trang 24

propriété src de l’élément img sont appelées des attributs Ce que contientl’élément est du texte.

Le fichier XML doit avoir la bonne forme Si vous choisissez des capitalespour nommer les balises, vous devrez vous y tenir, qu’elles soientouvrantes ou fermantes Vous allez donc créer un fichier de DTD danslequel vous consignerez les règles que vous appliquerez à vos balises Ilservira à valider votre fichier et à repérer les erreurs de syntaxe Vouspourriez ainsi décider que telle balise est obligatoirement à l’intérieur detelle autre balise

Un fichier XML est un fichier brut de données, sans aucune présentationmais ponctué de balises ; il sera donc accompagné d’un fichier XSLT Cefichier de présentation est parcouru et interprété par une applicationserveur qui va fusionner les fichiers pour fabriquer une page résultat quisera soit un vrai fichier, soit l’écran par défaut Le langage XSLT estdéconcertant pour tout programmeur formé aux langages procéduraux ou

à objets Il est fondé sur la création de règles de modèle (template) à partir

du fichier source C’est sur l’arbre résultat que les transformations se fontpour présenter les données d’une manière lisible et agréable pour tout unchacun

Le fichier XML est traité (parsed) par un analyseur XML qui est par défaut le module Expat Ce fichier correspond au contenu de la page C’est

m Figure 9.1 : Processus XSLT

Trang 25

ce document qui sera modifié dans le cadre d’une mise à jour Comme lesbalises sont explicites et le contenu, écrit sans codage, n’importe quelutilisateur à qui on a enseigné deux ou trois règles saura modifier ce type

de fichier sans dommages

Tab 9.1 : Codage des caractères dans un fichier XML

Caractère Codage Statut

générale-¶ Toute balise ouvrante doit être accompagnée par une balise fermante

¶ Le nom d’une balise ou d’un attribut doit débuter par une lettre ou unsouligné _ suivi éventuellement par plusieurs lettres, chiffres, points,tirets ou soulignés

¶ Une balise sans contenu sera finie par />, par exemple <br/>

Ngày đăng: 15/12/2013, 02:15

TỪ KHÓA LIÊN QUAN

w