par KDO

Transcription

par KDO
PHP & XML
par KDO
FORUM DU PHP 2002 PARIS
PHP & XML
PLAN
Introduction
Dialectes XML
PHP & XML
XSLT
Conclusion
PHP & XML
XML qu'est ce que c'est ?
Une recommandation du W3C
Un méta-langage
Un format de données
Un format de documents
Un mode de structuration
PHP & XML
XML une recommandation du W3C
W3C = World Wild Web Consortium
XML1.0 -> REC-xml-20001006
XML 1.1-> CR-xml11-20021015
PHP & XML
XML un méta-langage
Langage structurant un autre langage
Dérivé de SGML tout comme HTML
Père de nombreux dialectes
PHP & XML
Publication électronique
Indépendance vis à vis des plate-formes
XML çà sert à quoi ? (1)
Indépendance vis à vis des média
Internationalisation
PHP & XML
Applications Web
XML çà sert à quoi ? (2)
Échanges entre applications
Traitement répartit
Gestion de documents similaires
eBusiness
PHP & XML
XML est ...
Lisible par un humain
Compréhensible par une machine
Facile à mettre en oeuvre
PHP & XML
XML exemple ' bien formé '
<?xml version="1.0"?>
<dvds>
<dvd id="12">
<titre>Fight Club</titre>
<date>2000</date>
</dvd>
<dvd id="27">
<titre>AI</titre>
<date>2001</date>
</dvd>
</dvds>
PHP & XML
XML exemple ' valide'
<?xml version="1.0"?>
<!DOCTYPE dvds SYSTEM "dvds.dtd">
<dvds>
<dvd id="12">
<titre>Fight Club</titre>
<date>2000</date>
</dvd>
<dvd id="27">
<titre>AI</titre>
<date>2001</date>
</dvd>
</dvds>
PHP & XML
DTD exemple
<!ELEMENT dvds (dvd*)>
<!ATTLIST dvd id CDATA #REQUIRED>
<!ELEMENT dvd (titre, date)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT titre (#PCDATA)>
PHP & XML
XML document bien formé / valide
Une DTD n'est pas obligatoire
Un document doit être bien formé
Si DTD doit être valide
PHP & XML
Dialectes XML W3C
XHTML reformulation de HTML 4.0
XSL langage de style pour XML
MathML expressions mathématiques
SVG graphiques vectoriels
SMIL synchronisation flux multimédia
PHP & XML
Une seule racine <html>...</html>
Tous les éléments doivent être fermés
<li> .... </li>
<br /> <hr />
Eléments et attributs en minuscules
XHTML du HTML bien formé (1)
<a href= ...>
PHP & XML
Générer du XML
'à la main'
DOM-XML
Analyser du XML
Implémentation XML dans PHP
Parser SAX (extension xml)
DOM (extension dom-xml)
PHP & XML
Générer du XML ' à la main '
function query2XML($q) {
if(!($this->R = mysql_query($q, $this->LNK))) {
$this->VWT_ERROR("query2XML: failed: $q");
}
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '<rows>';
while($row = mysql_fetch_assoc($this->R)) {
$xml .= <row>;
while (list($k, $v) = each($row)) {
$xml .= "<$k>".$v."</$k>";
}
$xml .= '</row>';
}
$xml .= '</rows>';
mysql_free_result($this->R);
return ($xml);
}
PHP & XML
-
,
+
*
)
(
'
&
%
$
#
"
!
Générer du XML avec DOM-XML
function query2Xml($q, $lnk) {
$R = mysql_query($q, $lnk) OR die("Erreur : $q");
$DOC = domxml_new_doc('1.0') ;
$node = $DOC->create_element('rows');
$new = $DOC->append_child($node);
while ($L = mysql_fetch_assoc( $R )) {
$record = $DOC->create_element('row');
$record = $new->append_child($record);
while(list($K, $V) = each($L)) {
$node = $DOC->create_element($K);
$newnode = $record->append_child($node);
$content = $DOC->create_text_node( $V);
$newnode->append_child($content);
}
} return $DOC;
}
PHP & XML
1
0
/
.
Parseur SAX (1)
Simple API for XML
--with-xml (par défaut)
Parser événementiel
Utilisation de fonctions callbacks
PHP & XML
Parseur SAX (2)
<?php
function startElement($parser, $tag, $attrs) {
global $cdcount;
if ($tag == 'DVD') $cdcount++;
}
function endElement($parser, $tag) { }
$cdcount = 0;
if (!($parser = xml_parser_create())) die('Impossible de créer le parser');
xml_set_element_handler($parser ,'startElement','endElement' );
if (($fp = fopen('dvds.xml' , "r"))) {
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser , $data, feof($fp))) die('Parse Error');
}
xml_parser_free( $parser );
}
echo 'Nombre de CDs : ', $cdcount;
?>
PHP & XML
XSLT une solution de templates(1)
XSL
XSL
XSL
XML
XSLT
cHTML
WML
XHTML
PHP & XML
6
5
4
3
2
XSLT une solution de templates(2)
Une vraie séparation data/présentation
Une solution homogène
Un seul langage à apprendre
Multi plate-forme
Normalisée et documentée
PHP & XML
8
7
XSLT & PHP
SABLOTRON
DOM-XSLT
PHP & XML
<
;
:
9
XSLT / SABLOTRON
--enable-xslt
--with-xslt-sablotron
Stable
Peu performant
PHP & XML
>
=
XSLT / DOM-XSLT
--with-dom
--with-dom-xslt
@
?
Utilise les libs Gnome libxml / libxslt
Très performant
PHP & XML
MVC => PHP + XML + XSLT
XSL
SCRIPT 'VUE'
XSLT
XHTML
PHP & XML
RSS => WML (extrait fichier RSS)
<item>
<title>ZePHPMag n*4 out !</title>
<link>zephpmag.com/news86.php</link>
</item>
<item>
<title>CodeS-SourceS Party 2002</title>
<link>zephpmag.com/news85.php</link>
</item>
<item>
<title>Sorties de scripts et librairies PHP</title>
<link>zephpmag.com/news84.php</link>
</item>
PHP & XML
RSS => WML (extrait fichier XSL)
<xsl:template match="item">
<xsl:variable name="pos" select="position()"/>
<xsl:variable name="next" select="position()+1"/>
<card id="N{$pos}">
<do type="prev" label="back">
<go href="#init"/>
</do>
<p><xsl:value-of select="title"/></p>
<p align="right"><a href="#N{$next}">=></a></p>
</card>
</xsl:template>
PHP & XML
RSS => WML (fichier PHP)
<?php
$xh = xslt_create();
$buf = xslt_process($xh,'test.rss','rss2wml.xsl');
xslt_free($xh);
$f = fopen('phpdeb.wml', 'w');
if ($f) {
fwrite($f, $buf);
}
?>
PHP & XML
RSS => WML (extrait fichier WML)
<card id="N1">
<do type="prev" label="back">
<go href="#init"/>
</do>
<p>ZePHPMag n*4 out !</p>
<p align="right"> <a href="#N2">=></a> </p>
</card>
PHP & XML
C
B
A
Conclusion
Promouvoir XML dans les
développements
Utiliser des technologies
provenant du monde J2EE
Respect des normes