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