;0/-DYD3DUVHUV Thomas Förster Hauptseminar Softwaretechnologie „Neue Java Technologien 2“ 11.01.2000 hEHUVLFKW • Was ist XML? 1.1 1.2 1.3 1.4 • Parser 2.1 2.2 2.3 • • XML Dokumente Document Type Definition Beispiel Warum Java und XML ? Document Object Model Parser (DOM) Simple API for XML Parser (SAX) Vergleich Implementierungen Zusammenfassung Quellen 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 2 :DVLVW;0/" • XML - eXtensible Markup Language • Am 10. 2. 1998 durch die W3C standardisiert • Untermenge der Standard Generalized Markup Language (SGML; genormt: ISO 8879:1986) • 10 Punkte zu Design – Zielen • Keine statischen Tags wie in HTML; frei konfigurierbar 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 3 ;0/'RNXPHQWH • XML ist sehr leicht zu lernen • XML läßt keine Unsitten wie HTML zu • Attributwerte müssen in Anführungsstrichen stehen • Ein nichtleeres Element muß ein Start-Tag und Ende-Tag besitzen • Tags müssen richtig geschachtelt sein » Well - Formed • Kopfzeile: • • • • <?xml version=‘1.0‘ ?> Wenn keine DTD benutzt wird: standalone=‘yes‘ Encodingstil festlegen: encoding=‘ Zeichensatzcodierung‘ <DOCTYPE erstesTag SYSTEM ‘dtdname.dtd‘> • Dann baumartiger Aufbau des Dokumentes 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 4 'RFXPHQW7\SH'HILQLWLRQ • Vereinbart eine Grammatik für ein XML-Dokument nach einer EBNF » Valid • Kopfzeile: • <?xml ... ?> • Elementdeklaration: • <!ELEMENT Elementname Regel > • Attributdeklaration: • <!ATTLIST Ziel-Element Attribut Datentyp Default-Wert> 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 5 1DPHVSDFHV • XML–Elemente oftmals nicht eindeutig in verschiedenen Dokumenten; z.B <address> • Bei Zusammenführung solcher Dokumente Å Kollision • Ausweg: Namensräume (Namespaces) • Erweitern den Bereich eines XML – Elementes • Definition: <xmlns:namespaceID> • Beispiel: <Inf:address xmlns:Inf = ‘http://www.inf.tu-dresden.de/~tf12/‘> 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 6 %HLVSLHO$GUHVVEXFK <?xml encoding="iso-8859-1" ?> <!ELEMENT addressbook (entry)+ > <!ELEMENT entry (person, address) > <!ELEMENT person (title?, firstname, surname, email*, homepage*, link? ) > <!ATTLIST person id ID #REQUIRED > <!ATTLIST person gender (male | female) #IMPLIED > <!ATTLIST person maritalStatus (single | married | widwowed | divorced | unknown) "unknown“ > <!ELEMENT title (#PCDATA) > <!ELEMENT firstname (#PCDATA) > ... <!-- Andeutung leeres Element --> <!ELEMENT link EMPTY > <!ATTLIST link manager IDREF #IMPLIED subordinates IDREFS #IMPLIED > <!ELEMENT address (street, housenumber, place, zip) > ... 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 7 :DUXP-DYDXQG;0/" • Java: läuft auf einer virtuellen Machine; plattformunabhängig, Sicherheit, viele Services (Datei I/O, Netzwerk, GUI ... ) • XML: erlaubt es, eigene Markup Languages zu definieren; einfaches, exakt definiertes, offenes, neutrales Datenformat Zusammen: ½ Einfaches entwickeln von dynamischen Anwendungen ½ XML erlaubt es, Daten auch in anderen Programmier – umgebungen nutzbar zu machen ½ „XML shall be straightforwardly usable over the Internet“ Java wird über das Internet benutzt 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 8 3DUVHU Ein Parser prüft, ob ein Eingabewort bezüglich einer zugrunde liegenden Grammatik korrekt ist. Å Syntaxanalyse • Hier also: • XML – Dokument ist Eingabewort • DTD definiert die Grammatik • Zwei Typen von XML Java Parsers basierend auf: • Document Object Model (DOM) • Simple API for XML (SAX) 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 9 '20±3DUVHU • W3C Document Object Model (Level 1 / Level 2) • Drei Kernfunktionen: • Repräsentation des Dokumentes im Speicher • Stellt neue XML–Elemente zur Verfügung • Stellt notwendige Funktionen zur Verfügung, um einen aufgebauten Parse–Baum zu manipulieren Beispiel: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse( new File(argv[0]) ); } catch (Exception e) {} 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 10 '20±3DUVHU Node addressbook Node Node Node entry Node person Node address Node Node Node firstname Node Node Heinz 11.01.2001 Node Node Node surname Node Node street • „flaches“ Modell • Baum von Java Objekten entsteht • Jeder Knoten repräsentiert ein XML-Element ... Java XML Parsers - Hauptseminar Softwaretechnologie 11 '20,QWHUIDFHV • Befinden sich im Package org.w3c.dom • Basisklasse: Node • Definiert alle anderen DOM Objekte » Element, Document, Attr, Comment, CharacterData ... • Jeder Node hat eigenen Typ » z.B: DOCUMENT_NODE, TEXT_NODE, COMMENT_NODE • Einige Methoden: • • • • 11.01.2001 public public public public Node getParentNode(); NodeList getChildNodes(); Node getFirst/getLastChild(); Node getPrevious/getNextSibling(); Java XML Parsers - Hauptseminar Softwaretechnologie 12 '20,QWHUIDFHV • Document: • Container und Root–Element der Objekt–Hierarchie • Methoden zur Instanzierung anderer DOM Objekte • Einige Methoden: • public Element getDocumentElement(); • public NodeList getElementsByTagName(String n); • public Xxx createXxx(); • Element: • Beinhaltet alle Objekte zwischen einem Start- und Endtag • Attr: • Repräsentiert ein einzelnes Attribut eines Elements 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 13 '20/HYHO • Seit 13. November 2000 • Erweiterungen: • Einige neue Methoden • Neues Package org.w3c.dom.traversal • 3 Klassen zur besseren Navigation im Parse-Tree » NodeIterator » TreeWalker » NodeFilter » Klasse DocumentTraversal als Erbauer der Klassen • z.B: createNodeIterator(Node root, int whatToShow, NodeFilter filter, boolean entityReferenceExpansion) 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 14 %HLVSLHO • Import des Adressbuches in eine Anwendung: • Klassendiagramm und GUI ähnlich zum Telefonbuchbeispiel Auszug: private Person getPerson(Element personNode) { Person person = new Person(); ... String name = personNode.getElementsByTagName("firstname").item(0). getFirstChild().getNodeValue(); person.setFirstname(name); ... } 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 15 6$;3DUVHU • • • • • • Simple API for XML Parser Entwicklung durch Mailinglist [email protected] Aktuelle Version 2.0 (seit 5. Mai 2000) Andere Herangehensweise: Ereignisbasiertes Parsen Es wird nicht immer ein Document Model aufgebaut Während des Parsens, werden verschiedene Ereignisse gesendet (parse events) • Vor Ende des Parsens keine Aussage, ob ein XMLDokument valid oder well-formed ist • SAX Interfaces befinden sich im Package org.xml.sax 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 16 6$;,QWHUIDFHV • ContentHandler • Vom Parser genutzt, um grundlegende, dokumentbezogene Events zu melden (Start, Ende von Elementen, ...) • EntityResolver • Wird benutzt, um die default-Methoden für Entities zu überschreiben • Nützlich bei Nutzung von Datenbanken oder URIs (nicht URLs) • DTDHandler • Implementiert, um Informationen über Notationen oder ungeparsten Entities zu erhalten • ErrorHandler • SAXParseException wird in der parse-Methode geworfen • Informationen über den Fehler (welches Dokument, wo) • Nützlich, um eigene Warnungen und Fehler zu berichten 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 17 6$;,QWHUIDFHV XMLReaderFactory Content Handler XML Reader 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 18 6$;,QWHUIDFHV • XMLReader: • Einige Methoden: • setXxxHandler(XxxHandler handler) • setEntityResolver(EntityResolver resolver) • parse(String id) Beispiel: try { XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setContentHandler(new MyContentHandler()); reader.parse(argv [0]); } catch (Exception e) {} 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 19 &RQWHQW+DQGOHU • Methoden: • public void startDocument() • public void endDocument() • public void startElement (String namespaceURI, String localName, String qName, Attributes atts) • public void endElement (String namespaceURI, String localName, String qName) • public void characters(char[], int start, int length) • außerdem existiert eine Klasse DefaultHandler, die alle vier Interfaces implementiert 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 20 %HLVSLHO • Durchsuchen einer XML – Datei nach Eintrag: • Vorstellbar bei Konfigurationsdateien, Hilfedateien ... • Hier jedoch nicht besonders sinnvoll Auszug (ContentHandler): public void characters(char[] ch, int start, int length) throws SAXException { String s = new String(ch, start, length); if (searchString.equals(s)) { found = true; } } 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 21 9HUJOHLFK Document Object Model Simple API for XML Aufbau eines Objektbaumes des gesamten XML Dokumentes Das Parsen läuft neben der Applikation (ereignisbasiert) Bei größeren XML Dokumenten zu schwergewichtig Im Durchschnitt schneller in größeren XML Dokumenten Ein Dokument kann direkt als Objekt zu manipuliert werden Werte sind immer nur beim Parsen verfügbar Empfehlungen / Unterstützung durch W3C Entwicklung im Mailingliste, keine Verbindung mit W3C 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 22 ,PSOHPHQWLHUXQJHQ • Parserinterfaces im Package javax.xml.parsers bzw. org.xml.sax • Einige Erweiterungen, je nach Implementierung • Xerces • http://xml.apache.org • Frei verfügbar, aktuelle Version: 1.2.2 • Auch für C++ und Perl • Oracle • Kostenlos nach Registrierung • Erweiterungen: DTD parsen, print – Methoden, ... • SUN, IBM, Microsoft, ... 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 23 =XVDPPHQIDVVXQJ • Zwei Möglichkeiten, um XML Dokumente zu parsen • Einfache, jedoch evtl. sehr komplexe Handhabung von XML-Dokumenten mit Java • Einsatzmöglichkeiten in Gegenwart und Zukunft: • • • • Implementation von Programmhilfen Verteilte Systeme, Dynamische Anwendungen In Verbindung mit relationalen Datenbanken Zur Serialisierung von Objekten • In Zusammenhang mit XSL (eXtensible Stylesheet Language) kann man XML – Dokumente formatieren 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 24 4XHOOHQ • St. Laurant, Simon; Cerami Ethan, Building XML Applications. McGraw Hill, 1999 • Morgenthal, J.P., with La Forge, Bill, Enterprise Application Integration with XML and Java. Prentice Hall PTR, 2000 • Eckstein, Robert, XML kurz & gut. O‘Reilly, 2000 • http://java.sun.com/xml • http://www.mintert.com/xml/trans/REC-xml-19980210de.html (deutsche Übersetzung XML 1.0 Empfehlung) • http://www.megginson.com/SAX/index.html 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 25 Vielen Dank für Ihre Aufmerksamkeit ! Fragen ??? 11.01.2001 Java XML Parsers - Hauptseminar Softwaretechnologie 26