XML-Schnittstellen: SAX, DOM, XML Pull Parsing Timo Terletzki 03.11.2004 Transformation von XML-Dokumenten.

Slides:



Advertisements
Ähnliche Präsentationen
Dynamische WEB-Applikationen
Advertisements

M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
Collision Detection in Java3D Hristo Matev WS 02/03.
Klassen - Verkettete Liste -
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Zusammenfassung des Kapitels 8
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Design by Contract with JML - Teil 2
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding.
Binäre Bäume Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe.
IF-ELSE-IF-Ketten Weiter mit PP..
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Welcome DTD. Document Type Definition Graphic Services/Everything you already know about presentations Was ist eine DTD? DTD ist eine Schemasprache.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 9 IO – Streams in Java Sommersemester 2003 Lars Bernard.
Dynamische Webseiten Java servlets.
Document Object Model (DOM)
Speicherung von XML- Dokumenten als Large Objects.
Objektorientierte Programmierung JDK-Klassenbibliothek
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 GUI Konstruktion: 1. Entwurf mit Papier und Bleistift / Post Ist 2. Eventuell.
Proxy Pattern Vorlesung Design Patterns Sieglinde Heinrich
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
Modulare Programmierung
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Thema: Fibonacci-Zahlen
FH-Hof Sortieren mit Binären Bäumen Richard Göbel.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Die Persistenzschicht
Servlet III Java Webanwendung Webcontainer Web.xml
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Exception Handling in Java
XML IV: Cocoon 2.
Algorithmen und Datenstrukturen Übungsmodul 6
Equals, Hashcode und CompareTo Micha Kessler
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Beispielanwendung von Java Threads
Programmiervorkurs WS 2014/15 Methoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Schnaiter XML in Java XML - Datei Zugriff mit Java.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
XML und Java Verarbeitung von XML-Dokumenten mit JAVA.
 Präsentation transkript:

XML-Schnittstellen: SAX, DOM, XML Pull Parsing Timo Terletzki Transformation von XML-Dokumenten

Übersicht 1.Motivation 2.XML Parser für Java 3.Document Object Model 4.Simple API for XML 5.SAX vs. DOM 6.XML Pull Parsing 7.Zusammenfassung

1. Motivation Ziel: Informationen aus XML Dokumenten auslesen - es ist möglich XML Dokumente mit einem Textfile Reader auszulesen - es ist sehr aufwendig einen solchen XML-File Reader zu implementieren - der XML-File Reader muss für jedes Programm neu geschrieben werden W3C legt einen Standard für XML-File Reader fest

2. XML Parser für Java XML Parser für Java: - ermöglicht den Zugriff auf Informationen in einem XML Dokument - Informationen können direkt in Java Objekte konvertiert werden, oder anderweitig verarbeitet werden - wird von vielen Firmen kostenlos bereitgestellt, z. B. Sun, Datachannel, IBM,... - kann vom Programmierer implementiert werden (optional)

3. Document Object Model Übersicht Document Object Model DOM XML Parser Document Object Model API Document Object Zusammenfassung Beispiel

Anforderungen an das Document Object Model: - alle Informationen aus dem XML Dokument müssen angesteuert und geändert werden können - Navigation von Element zu Element muss ermöglicht werden - Elemente und Attribute müssen abgefragt werden können - grundlegende Funktionen, wie z.B. getfist und getnext, müssen bereitgestellt werden 3.1 DOM – Document Object Model

DOM XML Parser für Java: - konvertiert ein XML Dokument in einen Objektbaum - übernimmt das Lesen und Speichern der Daten aus dem XML Dokument - speichert die Daten als ein Document Object - muss die Document Object Model API implementieren - wird vom Programmierer nicht implementiert - wird auch für andere Programmiersprachen bereitgestellt 3.2 DOM – DOM XML Parser

3.3 DOM – Document Object Model API Document Object Model API (Java): - ist eine Sammlung von Java Interfaces, vergleichbar mit dem Swing Component Model - die Interfaces müssen vom XML Parser implementiert werden, damit Daten bearbeitet werden können - enthält keine Information aus dem XML-File - ermöglicht hierarchischen Zugriff auf das Document Object - ermöglicht das Ändern, Löschen und Neuanlegen von Knoten

Quelle: Introduction to DOM DOM – Document Object Model API Es gibt noch weitere Interfaces, z.B. Comment, Text und ProcessingInstruction

3.4 DOM – Document Object Document Object: - enthält einen Baum, der die Struktur des XML-Files darstellt - die Knoten enthalten die Information des XML-Files - jeder Knoten enthält Informationen wie Knotenname, Knotenwert und ggf. Kinderknoten - das Document Object ist der Wurzelknoten (von Knoten abgeleitet) - kann mit Hilfe der DOM API gelesen und bearbeitet werden

Quelle: Introduction to DOM DOM – Document Object

Quelle: Introduction to DOM DOM – Zusammenfassung

3.6 DOM – Beispiel DOM Objekt aus XML File erzeugen: Sun XML Parser import com.sun.xml.tree.*; import org.w3c.dom.*; try { String url = " Document doc = XmlDocumentBuilder.createXmlDocument(url); } catch(Exception e){}

3.6 DOM – Beispiel DOM Objekt aus XML File erzeugen: IBM XML Parser import com.ibm.xml.parser.*; import org.w3c.dom.*; try { URL u = new URL(" InputStream i = u.openStream(); Parser ps = new Parser(IBM XML Parser"); Document doc = ps.readStream(i); } catch( Exception e ){}

Quelle: XML and Java Tutorial, Part I DOM – Beispiel

Quelle: XML and Java Tutorial, Part I DOM – Beispiel \r = Zeilenvorschub

3.6 DOM – Beispiel Knoten auslesen: NodeList listOfPersons = doc.getElementsByTagName( "PERSON" ); int numberOfPersons = listOfPersons.getLength(); if (numberOfPersons > 0 ){ Node firstPersonNode = listOfPersons.item( 0 ); if ( firstPersonNode.getNodeType() == Node.ELEMENT_NODE ){ Element firstPersonElement = (Element)firstPersonNode; } NodeList firstNameList = firstPersonElement.getElementsByTagName( "FIRSTNAME" );

3.6 DOM – Beispiel Knoten auslesen: Element firstNameElement = firstNameList.item( 0 ); NodeList list = firstNameElement.getChildNodes(); String firstName = null; for (int i = 0 ; i < list.getLength() ; i ++ ){ String value = ((Node)list.item( i )).getNodeValue().trim(); if( value.equals("") || value.equals("\r") ){ continue; //keep iterating } else{ firstName = value; break; //found the firstName! }

4. Simple API for XML Übersicht SAX Parser Object Model Document Handler Zusammenfassung Beispiel

SAX Parser: - z.B. Sun TR2 XML Parser, IBM XML Parser for Java, OpenXML,... - muss die Simple API for XML implementieren - liest das XML Dokument und feuert Ereignisse (Events) - die Reihenfolge der gefeuerten Events ist sehr wichtig - Events werden gefeuert: - am Anfang und am Ende des XML Dokuments - wenn Knoten Tags geöffnet und geschlossen werden - wenn Knotenwerte ausgelesen werden - Speichert keine Informationen aus dem XML Dokument 4.1 SAX – SAX Parser

Object Model: - SAX hat kein Object Model - der Programmierer muss sich selber um die Verarbeitung der Informationen kümmern - der Programmierer kann sein eigenes Object Model erstellen (optional) - der Programmierer hat volle Kontrolle über das Speichern von Informationen 4.2 SAX – Object Model

Document Handler: - ist ein Listener für die im SAX Parser gefeuerten Events und muss sich beim SAX Parser als solcher registrieren - wird bei jedem Event vom SAX Parser aufgerufen - ist für die Verarbeitung der gelesenen Informationen zuständig - legt ggf. Instanzen von Objekten aus dem Object Model an - muss die Reihenfolge der gefeuerten Events beachten 4.3 SAX – Document Handler

Quelle: Introduction to DOM

Zusammenfassung: - es gibt kein vorgegebenes Object Model - SAX Parser liest das Dokument aus und feuert Events - die Reihenfolge der gefeuerten Events ist für den Document Handler sehr wichtig - Document Handler ist Listener für die gefeuerten Events - Document Handler ist für die Verarbeitung der gelesenen Informationen zuständig 4.4 SAX – Zusammenfassung

XML Dokument: Timo Terletzki 4.5 SAX – Beispiel

Object Model: AdressBook List persons getSize() addPerson(Person a) getPerson(int i) deletePerson(int i) toXML() Person String firstname String lastname String get-/set-Methoden() toXML()

Document Handler: import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.ParserFactory; import com.sun.xml.parser.Resolver; public class SaxAddressBookHandler extends HandlerBase{ private AddressBook ab = new AddressBook(); private Person p = null; private String currentElement = null; public AddressBook getAddressBook(){ return ab; } 4.5 SAX – Beispiel

Document Handler: public void startElement( String name, AttributeList atts ){ if( name.equalsIgnoreCase("LASTNAME") ) { currentElement = "LASTNAME"; } else if( name.equalsIgnoreCase("FIRSTNAME") ) { currentElement = "FIRSTNAME"; } else if( name.equalsIgnoreCase("COMPANY") ) { currentElement = "COMPANY"; } else if( name.equalsIgnoreCase(" ") ) { currentElement = " "; } else if( name.equalsIgnoreCase("PERSON") ) { p = new Person(); } } 4.5 SAX – Beispiel

Document Handler: public void characters( char ch[], int start, int length ){ String value = new String( ch, start, length ); if(!value.trim().equals("")) { if( currentElement.equalsIgnoreCase("FIRSTNAME") ) { p.setFirstName( value ); } else if( currentElement.equalsIgnoreCase("LASTNAME") ) { p.setLastName( value ); } else if( currentElement.equalsIgnoreCase("COMPANY") ) { p.setCompany( value ); } else if( currentElement.equalsIgnoreCase(" ") ) { p.set ( value ); } } 4.5 SAX – Beispiel

Document Handler: public void endElement( String name ){ if( name.equalsIgnoreCase("PERSON") ) { ab.addPerson( p ); p = null; } 4.5 SAX – Beispiel

SAX Parser: import java.net.*; import java.io.*; import org.xml.sax.*;... try{ InputStreamReader isr = new InputStreamReader( new FileReader( new File( "AddressBook.xml" )) ); InputSource is = new InputSource( isr ); DocumentHandler handler = new SaxAddressBookHandler(); String parserClassName = "com.sun.xml.parser.Parser"; org.xml.sax.Parser parser = org.xml.sax.helpers.ParserFactory. makeParser( parserClassName ); parser.setDocumentHandler( handler ); parser.parse( is ); AddressBook ab = handler.getAddressBook(); } catch(Throwable t){} SAX – Beispiel

5. SAX vs. DOM DOM: - hierarchisches Object Model - Information wird in Knoten in einem Baum gespeichert - bewahrt die Reihenfolge der gelesenen Elemente SAX: - feuert eine Reihe von Events - es kann ein eigenes Object Model verwendet werden - es muss ein Document Handler geschrieben werden, der die Events abfängt und die Daten verarbeitet - ist zur Laufzeit schneller, da kein Objektbaum aufgebaut werden muss

5. SAX vs. DOM DOM eignet sich besser, wenn: - die Daten im XML Dokument immer wieder geändert werden müssen - eine Baumstruktur zur Navigation benötigt wird SAX eignet sich besser, wenn: - die Daten zu groß sind um sie als Baum gespeichert zu werden - nur Teile des XML Dokuments zur Verarbeitung verwendet werden

6. XML Pull Parsing Übersicht Eigenschaften Beispiel

Eigenschaften: - sehr einfaches Interface - es gibt 5 Events: START_DOCUMENT, START_TAG, TEXT, END_TAG, END_DOCUMENT - Programmierer holt sich selber die Events selbst und verarbeitet diese in seinen Methoden - die Methode next() holt sich das nächste Event - ermöglicht Implementierung von sehr schnellen XML Parser 6.1 XML Pull Parsing - Eigenschaften

6.2 XML Pull Parsing - Beispiel import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; public static void main (String args[]) throws XmlPullParserException, IOException { XmlPullParserFactory factory = XmlPullParserFactory.newInstance( XMLParserImplementierung, null); XmlPullParser xpp = factory.newPullParser(); xpp.setInput ( new FileReader ( AdressBook.xml ) ); this.processDocument(xpp); }

6.2 XML Pull Parsing - Beispiel public void processDocument(XmlPullParser xpp) { int eventType = xpp.getEventType(); do { if(eventType == XmlPullParser.START_DOCUMENT) {... } else if(eventType == XmlPullParser.END_DOCUMENT) {... } else if(eventType == XmlPullParser.START_TAG) { System.out.println(Anfang + xpp.getName()); } else if(eventType == XmlPullParser.END_TAG) { System.out.println(Ende + xpp.getName()); } else if(eventType == XmlPullParser.TEXT) { System.out.println(xpp.getText); } eventType = xpp.next(); } while (eventType != XmlPullParser.END_DOCUMENT); }

DOM: - DOM Parser liest das Dokument aus und speichert die Daten als Objektbaum - sehr leicht zu nutzen, da der Objektbaum mit Methoden der DOM API ausgelesen werden kann SAX: - SAX Parser liest Informationen aus und feuert Events - ein Document Handler muss implementiert werden, der die Informationen verarbeitet - es kann ein eigenes Object Model erstellt werden XMLPullParsing: - Events werden selbst geholt und verarbeitet - Volle Kontrolle über den Parse-Prozess 7. Zusammenfassung

Ende Vielen Dank für die Aufmerksamkeit.