Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
 
Post to Twitter Post to Twitter
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons
« Prev Comments 1 - 1 of 1 Next »
Add a comment If you have a SlideShare account, login to comment; otherwise comment as a guest.
    SlideShare is now available on LinkedIn. Add it to your LinkedIn profile.

    Dynamische Websites mit XML

    From schst, 2 years ago Add as contact

    Vortrag über Websites mit PHP und XML auf der International PHP 2001 Conference 2001

    4165 views | 1 comments | 0 favorites | 25 downloads | 1 embeds (Stats)

    Categories

    Technology

    Groups/Events

    Embed in your blog options close
    Embed (wordpress.com) Exclude related slideshows Embed in your blog

    More Info

    This slideshow is Public
    Total Views: 4165 on Slideshare: 4161 from embeds: 4
    Most viewed embeds (Top 5): More
    All Embeds: Less
    Flagged as inappropriate Flag as inappropriate

    Flag as inappropriate

    Select your reason for flagging this slideshow as inappropriate.

    If needed, use the feedback form to let us know more details.

    Slideshow Transcript

    1. Slide 1: Dynamische Webseiten mit XML Dynamische Webseiten mit XML International PHP Conference 2001 07.11.2001, Frankfurt-Mörfelden Stephan Schmidt
    2. Slide 2: Dynamische Webseiten mit XML GUTEN MORGEN!
    3. Slide 3: Dynamische Webseiten mit XML Inhalt der Session • Über den Redner • Evolution von Websites • Kurze Einführung in XML • Trennung von Content und Layout • Transformation von XML in HTML • XML Parsing und Transformation mit PHP 4 • Transformation mittels expat • Einfügen dynamischer Inhalte • patXMLRenderer Folie 3 05/23/07
    4. Slide 4: Dynamische Webseiten mit XML Stephan Schmidt • Web Application Developer bei Metrix Internet Design GmbH in Karlsruhe • Spezialisiert auf Frontends und Community Anwendungen • Nebenbei: LGPL Tools auf http://www.php-tools.de Folie 4 05/23/07
    5. Slide 5: Dynamische Webseiten mit XML Evolution von Websites Statische HTML Seite als Prospekt im Internet Einfache dynamische Elemente Webapplikationen wie Shops Webbrowser nicht mehr einziges Anzeigemedium XML als Format zur Datenhaltung, XSLT zur Transformation Aber was ist mit dynamischen Elementen? Folie 5 05/23/07
    6. Slide 6: Dynamische Webseiten mit XML Kurze Einführung in XML • Beschreibung strukturierter Daten wie z.B. Bücher, Preislisten, usw. • Verwendung von Tags mit Attributen, wie bei HTML • großer Unterschied zu HTML: freies Tag Set, dass der Anwender selbst definieren kann • Validierung durch eine DTD oder XML-Schema • Interne und externe Entitäten (z.B. ä) Folie 6 05/23/07
    7. Slide 7: Dynamische Webseiten mit XML Wichtige XML Regeln • Jedes Dokument besitzt eine Wurzel • Jeder Tag muss wieder geschlossen werden, Also <p>...</p> statt <p> und <br/> statt <br> • Attribute immer in Anführungszeichen • Encoding für Sonderzeichen wie \"<\" und \">\" Folie 7 05/23/07
    8. Slide 8: Dynamische Webseiten mit XML Trennung von Content und Layout • XML beschreibt den Inhalt, nicht das Layout • Layout weiterhin in HTML (Browserunterstützung) • Definition von Tags, die logische Elemente eines Dokuments beschreiben – <headline> für eine Überschrift – <quote> für ein Zitat – usw... • Beispiel? » nächste Folie... Folie 8 05/23/07
    9. Slide 9: Dynamische Webseiten mit XML Beispiel für ein XML Dokument <page> <headline>Dynamische Webseiten mit XML</headline> <section title=\"Über den Autor\"> <para>Der Autor ist so früh morgens noch müde.</para> </section> <section title=\"Kurze Beschreibung\"> <para>Der Vortrag enthält</para> <list> <listelement>Beispiele</listelement> <listelement>wenig PHP Code</listelement> </list> </section> </page> Folie 9 05/23/07
    10. Slide 10: Dynamische Webseiten mit XML Transformation von XML in HTML Transformation jedes Tags in seine HTML Repräsentation, z.B.: <headline>Dynamische Webseiten mit XML</headline> ...wird zu: <font size=\"+1\"> <br><b> Dynamische Webseiten mit XML</b><br><br> </font> Folie 10 05/23/07
    11. Slide 11: Dynamische Webseiten mit XML Transformation des ganzen Dokuments • Für jeden Tag wird ein Template benötigt • Richtige Reihenfolge bei Verschachtelungen (z.B. Listenelemente in einer Liste) ...wer macht das? [ XSLT ] Transformation mittels Stylesheet und XSLT Prozessor Folie 11 05/23/07
    12. Slide 12: Dynamische Webseiten mit XML XML Parsing mit PHP 4 Es existieren drei Möglichkeiten: • Verwendung der Sablotron Extension und XSLT – Wenig Programmieraufwand – Keine Kontrolle während des Parsingprozesses • Verwendung des SAX-basierten Parsers – Mehr Programmieraufwand – Volle Kontrolle während des Parsens • Verwendung der XML-DOM Extension – Einlesen der ganzen Datei – Hoher Speicherverbrauch Folie 12 05/23/07
    13. Slide 13: Dynamische Webseiten mit XML PHP 4 und expat • Sehr einfache API • Dokument wird von oben nach unten durchlaufen • Registrieren von Callback Handlern – Start Element Handler – End Element Handler – Cdata Handler – ...und andere (im Moment unwichtig) Folie 13 05/23/07
    14. Slide 14: Dynamische Webseiten mit XML Transformation mittels expat • Verwendung einer Template Klasse • Start Element » Holen des Blocks und ersetzen der Platzhalter durch Attributwerte • CDATA Handler » Anhängen an den Inhalt des Tags • End Element » Parsen des Templates und HTML Code an den Inhalte des übergeordneten Tags anhägen Folie 14 05/23/07
    15. Slide 15: Dynamische Webseiten mit XML Beispiel XML <section title=\"XML Transformation\"> <para>XML kann mit PHP in HTML transformiert werden.</para> </section> Template für <section> <table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" width=\"500\"> <tr><td><b>{TITLE}</b></td><tr> <tr><td>{CONTENT}</td></tr> </table> Template für <para> <font face=\"Arial\" size=\"2\">{CONTENT}<br></font> Folie 15 05/23/07
    16. Slide 16: Dynamische Webseiten mit XML Einfügen dynamischer Inhalte Jede PHP Funktion kann zu jeder Zeit verwendet werden. Einfaches Beispiel: <time:current/> soll Uhrzeit einsetzen. Lösung: switch/case Anweisung in den Element Handlern, die Code ausführen, statt Template zu parsen. » unübersichtlich, sehr viel Code im Renderer Besser: beliebig erweiterbarer Parser, der je nach Namespace den Tag an eine Erweiterung übergibt. Folie 16 05/23/07
    17. Slide 17: Dynamische Webseiten mit XML Randy - patXMLRenderer • Open Source (LGPL License) • Verwendet die Klasse patTemplate • Unterstützt externe Entitäten • Beliebig viele Extensions, Tags werden je nach Namespace an die Extensions weitergereicht • Renderer delegiert nur und übernimmt Transformation • Beliebig viele Designs oder Ausgabeformate • Weitere Features: Caching, Logging, usw... Folie 17 05/23/07
    18. Slide 18: Dynamische Webseiten mit XML Arbeitsweise TEMPLATES XML Ext. Entities Noch unbekannte Extension Dbc: RENDERER Extension Time: Extension HTML / XML /LaTEX /usw... Folie 18 05/23/07
    19. Slide 19: Dynamische Webseiten mit XML Funktionsweise • Erzeugen einer Instanz • Referenz auf ein Template Objekt • Setzen der Dateinamen der Templates • Setzen des Dateinamens der XML Datei • Starten des Parsers und Ausgabe des erzeugten Dokuments – Öffnen der XML Datei – Zeile für Zeile Einlesen und dem XML Parser übergeben Folie 19 05/23/07
    20. Slide 20: Dynamische Webseiten mit XML Dynamischer Content und Extensions • Öffnender Tag wird gefunden mit Namespace » weiter an Extension und Namespace auf Stack • Daten werden gefunden innerhalb eines Namespace » weiter an Extension? • Schließender Tag wird gefunden mit Namespace » weiter an Extension und Rückgabewert an Inhalt anhägen ohne Namespace » normal parsen. Folie 20 05/23/07
    21. Slide 21: Dynamische Webseiten mit XML Struktur einer Extension Jede Extension hat drei Handler: • Starthandler legt Tags und Attribute auf einen Stack • CData Handler speichert Daten in einer Variable • End Element Handler führt switch/case Anweisung aus und gibt XML oder CData zurück. Folie 21 05/23/07
    22. Slide 22: Dynamische Webseiten mit XML Beispiel: DBC Extension Verbindung herstellen (keine Rückgabe an den Renderer) <dbc:connection name=\"foo\"> <dbc:host>localhost</dbc:host> <dbc:name>myDB</dbc:name> <dbc:user>myUser</dbc:user> <dbc:pass>myPass</dbc:pass> </dbc:connection> Query abschicken (Rückgabe » auf nächster Folie...) <dbc:query connection=\"foo\"> SELECT * FROM myTable ORDER BY id </dbc:query> Folie 22 05/23/07
    23. Slide 23: Dynamische Webseiten mit XML Rückgabe des Queries <result> <row> <field>1</field> <field>Stephan Schmidt</field> </row> <row> <field>5</field> <field>Sebastian Mordziol</field> </row> </result> Zurückgegebenes XML wird vom Renderer mit Templates transformiert (könnte auch wieder Extension Tags enthalten). Folie 23 05/23/07
    24. Slide 24: Dynamische Webseiten mit XML Schreiben neuer Extensions Am besten durch Ableitung von einer Extension-Basisklasse: class patXMLRendererExtension { var $cacheAble = array(); // Welche Tags können gecached werden? var $attStack = array(); // Stapel für Attribute var $tagStack = array(); // Stapel für Tags var $dataStack = array(); // Stapel für CDATA function getExtensionName() { ..... } function getExtensionVersion() { ..... } Folie 24 05/23/07
    25. Slide 25: Dynamische Webseiten mit XML Schreiben neuer Extensions function startElement( $parser, $ns, $tag, $attributes ) { array_push( $this->attStack, $attributes ); array_push( $this->tagStack, $tag ); unset( $this->data[( count( $this->tagStack ) - 1 )] ); return; } function characterData( $parser, $ns, $data ) { if( trim( $data ) ) $this->data[( count( $this->tagStack ) - 1 )] .= $data; return; } function getData() { return $this->data[( count( $this->tagStack ) - 1 )]; } } Folie 25 05/23/07
    26. Slide 26: Dynamische Webseiten mit XML Beispiel der time: Extension Basisklasse erweitern und Caching Verhalten für die Tags setzen: class patXMLRendererTimeExtension extends patXMLRendererExtension { var $name = \"patXMLTimeExtension\"; var $version = \"0.9\"; var $cacheAble = array( \"FORMAT\" => true, \"CURRENT\" => false, \"COUNTDOWN\" => false, \"ELAPSED\" => false ); Danach muss nur eine Methode implementiert werden: Folie 26 05/23/07
    27. Slide 27: Dynamische Webseiten mit XML Beispiel der time: Extension function endElement( $parser, $ns, $tag ) { $data = $this->getData(); $tag = array_pop( $this->tagStack ); $attributes = array_pop( $this->attStack ); switch( $tag ) { case \"FORMAT\": return date( $attributes[\"FORMAT\"], strtotime( $data ) ); break; case \"CURRENT\": return date( $attributes[\"FORMAT\"], time() ); break; ..... } } Folie 27 05/23/07
    28. Slide 28: Dynamische Webseiten mit XML Intelligentes Caching Bisher nur Unterstützung eines intelligenten Caching Mechanismus: • Überprüfen aller externen Entitäten • Überprüfen aller verwendeten Templates • Überprüfen aller Extensions <!-- cache generated=2001-11-01 21:15:33 checkExternal=teasers.xml checkExternal=projectnav.xml checkExternal=headernav.xml checkTemplate=templates/blue/content.tmpl checkTemplate=templates/blue/pat.tmpl action=StartCache --> Folie 28 05/23/07
    29. Slide 29: Dynamische Webseiten mit XML Möglichkeiten • Extensions können beliebig verschachtelt werden <dbc:query connection=\"foo\"> SELECT * FROM myTable WHERE id=<var:get scope=\"global\">userid</var:get> </dbc:query> • Extensions für alle wichtigen PHP Befehle • Extensions, mit denen sich ganze Applikationen steuern lassen, z.B.: <news:add/> oder <news:display amount=\"5\" mode=\"latest\"/> • XML als Metasprache: Tags als Befehle, Attribute als Parameter Folie 29 05/23/07
    30. Slide 30: Dynamische Webseiten mit XML Geplante Features • Optional Transformation mit XSLT • Weitaus mehr Extensions • Festes Vorgeben einer \"Expires\"-Zeit für den Cache • Logfile Analyser (fast fertig) • Einfaches Erzeugen von Offline-Versionen Folie 30 05/23/07
    31. Slide 31: Dynamische Webseiten mit XML Ende Vielen Dank für Ihre Aufmerksamkeit. Weitere Informationen: • Im Open Source Raum (bis 15:00) • http://www.php-tools.de • schst@php-tools.de Folie 31 05/23/07