par KDO FORUM DU PHP 2002 PARIS
PLAN Introduction Dialectes XML XSLT Conclusion
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
XML une recommandation du W3C W3C = World Wild Web Consortium XML1.0 -> REC-xml-20001006 XML 1.1-> CR-xml11-20021015
XML un méta-langage Langage structurant un autre langage Dérivé de SGML tout comme HTML Père de nombreux dialectes
XML çà sert à quoi? (1) Publication électronique Indépendance vis à vis des plate-formes Indépendance vis à vis des média Internationalisation
XML çà sert à quoi? (2) Applications Web Échanges entre applications Traitement répartit Gestion de documents similaires ebusiness
XML est... Lisible par un humain Compréhensible par une machine Facile à mettre en oeuvre
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>
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>
DTD exemple <!ELEMENT dvds (dvd*)> <!ATTLIST dvd id CDATA #REQUIRED> <!ELEMENT dvd (titre, date)> <!ELEMENT date (#PCDATA)> <!ELEMENT titre (#PCDATA)>
XML document bien formé / valide Une DTD n'est pas obligatoire Un document doit être bien formé Si DTD doit être valide
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
XHTML du HTML bien formé (1) Une seule racine <html>...</html> Tous les éléments doivent être fermés <li>... </li> <br /> <hr /> Eléments et attributs en minuscules <a href=...>
Implémentation XML dans PHP Générer du XML 'à la main' DOM-XML Analyser du XML Parser SAX (extension xml) DOM (extension dom-xml)
Générer du XML ' à la main ' 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); }
! " # $ % & ' ( ) * +, - 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; }
. / 0 1 Parseur SAX (1) Simple API for XML --with-xml (par défaut) Parser événementiel Utilisation de fonctions callbacks
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;?>
XSLT une solution de templates(1) XSL XML chtml XSL XSLT WML XSL XHTML
2 3 4 5 6 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
7 8 XSLT & PHP SABLOTRON DOM-XSLT
9 : ; < XSLT / SABLOTRON --enable-xslt --with-xslt-sablotron Stable Peu performant
= >? @ XSLT / DOM-XSLT --with-dom --with-dom-xslt Utilise les libs Gnome libxml / libxslt Très performant
MVC => PHP + XML + XSLT SCRIPT 'VUE' XSL XSLT XHTML
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>
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>
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); }?>
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>
A B C Conclusion Promouvoir XML dans les développements Utiliser des technologies provenant du monde J2EE Respect des normes