Stefan Pottinger Institut für Architektur von Anwendungssystemen Universität Stuttgart Übungen „Web-basierte Anwendungsintegration“ SS 06 Übungsblatt Nr. 2 Datum der Übung: 14.06.06 Aufgabe 2.1 – XPath-Ausdrücke (als Vorbereitung auf Aufgabe 2.3): Gegeben ist die XML-Datei, die unter zu finden ist. Auf dieses Dokument sollen verschiedene XPath-Ausdrücke angewendet werden. Entwerfen Sie für die folgenden Fragestellungen XPath-Ausdrücke. Es sollen alle Elemente ausgewählt werden, • die sich zwei Ebenen unter dem Wurzelelement befinden, • die irgendein Attribut besitzen, • deren erster Buchstabe ein „n“ ist, • die ein „r“ und ein „t“ enthalten, • die die letzte Position in ihrem Kontext einnehmen, • die an einer „geraden“ (0,2,4…) Position innerhalb ihres Kontexts vorkommen, • die vom Typ „termin“ sind und die an dem 15. eines Monats stattfinden, • die vom Typ „termin“ sind und die zwischen 10:00 und 20:00 beginnen; außerdem sollen diese Termine an einem Ort stattfinden, der das Wort „Uni“ beinhaltet. • Schließlich soll die Summe aller Jahreszahlen ausgegeben werden. Aufgabe 2.2 - DOM- und SAX-Parser: Um XML-Dokumente in einem Programm verarbeiten zu können, sind Parser notwendig. Typischerweise können Sie sich – unabhängig von der konkreten Programmiersprache - bei der Verwendung von Parsern zwischen DOM-Parsern und SAX-Parsern entscheiden. Wo liegen die wesentlichen Unterschiede dieser beiden Parser-Arten? In welchen Szenarien würden Sie die Parser jeweils einsetzen? (Interessant sind vor allem die Kriterien Bedienungsfreundlichkeit, Speicherbedarf und Komplexität der Berechnungen auf den XML-Dokumenten.) Aufgabe 2.3 – Einsatz eines DOM-Parsers in Java: Sie sollen in Java einen DOM-Parser zum Einlesen eines XML-Dokumentes verwenden und den resultierenden DOM-Tree mit Hilfe verschiedener Operationen und XPath-Ausdrücken auswerten. http://www.iaas.uniLesen Sie die XML-Datei, die unter stuttgart.de/lehre/vorlesung/2006_ss/vorlesungen/wbai/uebungen/resou rces/exc2/paper_xsd.xml zu finden ist, mit einem DOM-Parser ein. Entwerfen Sie ein passendes Schema oder eine DTD zu dem XML-Dokument, so dass der Parser ihr XML-Dokument gegen die entsprechende Definition validieren kann. Nach dem Einlesen sollen zunächst alle Kapitelüberschriften mit den zugehörigen Seitenzahlen des Kapitels ausgegeben werden. Danach soll die Summe der Seitenzahlen aller Kapitel ermittelt werden. Verwenden Sie dazu sowohl die Document-API des DOM-Trees, als auch XPath-Ausdrücke. Versuchen Sie, Ihr XML-Dokument durch eine Vielzahl von Kapiteln stark in der Größe anwachsen zu lassen. Welche Auswirkungen stellen Sie fest?1 Versuchen die den Memory-Footprint und die Zeit zu messen, die ein sehr großes Dokument beim Parsen verursacht. Aufgabe 2.4 – Einsatz eines SAX-Parsers in Java: Nun soll ein SAX-Parser verwendet werden, um das in Aufgabe 2.3 verwendete XML-Dokument einzulesen. Ebenso wie in Aufgabe 2.3 soll dabei die Anzahl der Seitenzahlen summiert werden. Machen Sie sich dazu mit den Event-Handlern des SAX-Parsers vertraut und entscheiden Sie, welche benötigt werden. Wo liegt der Unterschied zur Vorgehensweise bei der Lösung dieser Aufgabe im Vergleich zur Verwendung des DOM-Parsers? Messen Sie erneut Zeit und MemoryFootprint und vergleichen Sie die Ergebnisse mit Aufgabe 2.3. Aufgabe 2.5 – XSLT-Transformationen in Java: Gegeben ist die XML-Datei, die unter http://www.iaas.unistuttgart.de/lehre/vorlesung/2006_ss/vorlesungen/wbai/uebungen/resou rces/exc2/termine.xml zu finden ist. Transformieren Sie dieses Dokument in eine übersichtliche HTML-Datei. Bringen Sie dabei alle Daten aus der XML-Datei in der HTML-Datei unter Verwendung einer geeigneten physischen Formatierung innerhalb der HTML-Datei unter. Wie ist der Ablauf im Java-Programm, welchen Aufbau hat Ihr Stylesheet? Aufgabe 2.6 – „Advanced“ XSLT-Transformationen ☺ : Gegeben ist die XML-Datei „logging1.xml“ (unter http://www.iaas.unistuttgart.de/lehre/vorlesung/2006_ss/vorlesungen/wbai/uebungen/resou rces/exc2/logging_aufgabe/ sind alle Dateien dieser Aufgabe zu finden). Sie spiegelt ein Log-File wider und enthält für unterschiedliche Ereignisse („LoggingEvent_XY“) jeweils die Dauer, die diese Ereignisse benötigt haben. Ihre Aufgabe besteht darin, durch eine XSLT-Transformation aus der gegebenen XMLDatei eine neue XML-Datei zu erstellen, wobei • für jedes in der XML-Datei vorhandene LoggingEvent die Summe der Dauer aller LoggingEvents dieser Art ein einziges Mal ausgegeben werden soll. o Dabei ist Ihnen die Anzahl der verfügbaren LoggingEvents, also die konkreten Endungen nach dem Muster „LoggingEvent_XY“, nicht bekannt. o Ebenso wenig ist Ihnen bekannt, wie oft die einzelnen LoggingEvents in dem Log-File vorkommen. • Neben der beschriebenen Summe soll auch die Anzahl der jeweiligen LoggingEvents in dem Log-File sowie ihre durchschnittliche Dauer ausgegeben werden. Die von Ihnen erstellte XML-Datei sollte ausgehend von der Datei „logging1.xml“ demnach mindestens die gleichen Informationen enthalten wie die Datei „logging1_resultDemo.xml“. Um die Korrektheit Ihrer Transformation zu 1 Es bietet sich an, den Verbrauch des Speicherplatzes während des Parsens zu beobachten. Zu diesem Zweck können Sie den MemoryMonitor von Sun verwenden, der unter http://www.iaas.unistuttgart.de/lehre/vorlesung/2006_ss/vorlesungen/wbai/uebungen/resources/ex c2/java2d/ zu finden ist. überprüfen, können Sie schließlich Ihre Ergebnisse der Transformation der Datei „logging2.xml“ mit der Datei „logging2_resultDemo.xml“ vergleichen. Zusatzaufgaben: Entwerfen Sie zu dem Dokument aus Aufgabe 2.5 eine passende DTD und ein XSD-Schema. Welche Bedeutung nehmen Infosets vor allem in Bezug auf große XMLDokumente ein, auch in Bezug auf Aufgabe 2.3? Anmerkung: Zur Lösung der Aufgaben benötigen Sie einen DOM-Parser, einen SAX-Parser und einen Stylesheet Prozessor. Sie finden alle notwendigen Bestandteile beispielsweise im J2SE 1.4.2 SDK bzw. J2SE 5.0 SDK auf http://java.sun.com/. Sie können natürlich gerne andere Software verwenden – Hauptsache Ihre Lösungen funktionieren ☺ Zum Ausprobieren der XPath-Ausdrücke gibt es ebenfalls zahlreiche frei verfügbare Werkzeuge.