Seminar: XML und Datenbanken XML-Verarbeitungsmodelle und Language Bindings Christian Müller 24.01.2003 Übersicht 1 Einleitung 2 Simple API for XML (SAX) 3 Document Object Model (DOM) 4 JDOM 5 Java API for XML Processing (JAXP) 6 XL 7 Zusammenfassung Seminar XML und Datenbanken 2 Einleitung Möglichkeiten zur Verarbeitung von XML ereignisbasiert Baumstruktur <Seminar> <Vortrag>XML</Vortrag> <Datum>24.1.</Datum> </Seminar> Seminar XML und Datenbanken 3 SAX Java-API kein Parser ereignisbasiert beim Parsen werden Ereignisse ausgelöst (Callbacks) Anwendungscode in diese Methoden einfügen Seminar XML und Datenbanken 4 Ereignisse ... startDocument <vortragender> startElement <name> startElement Müller characters </name> endElement <vorname> startElement Christian characters </vorname> endElement </vortragender> endElement ... endDocument Seminar XML und Datenbanken 5 XMLReader XMLReader reader = XMLReaderFactory. createXMLReader(“org.apache.xerces.parsers.SAXParser“); reader.setContentHandler(new MyContentHandler()); reader.setErrorHandler(new MyErrorHandler()); reader.setFeature(“http://xml.org/features/validation“, true); reader.parse(new InputSource(“beispiel.xml“)); Seminar XML und Datenbanken 6 ContentHandler startDocument() : zu Beginn des Dokuments aufgerufen endDocument() : zu Ende des Dokuments aufgerufen setDocumentLocator(Locator locator) : zu Beginn des Dokuments aufgerufen Locator stellt Informationen bereit Seminar XML und Datenbanken 7 ContentHandler (2) startElement(String namespaceURI, String localName, String qName, Attributes atts) : namespaceURI: Namensraumaddresse des Elements localName: Name des Elements ohne Namensraumadresse qName: qualifizierter Name atts: Attribute des Elements Seminar XML und Datenbanken 8 ContentHandler (3) endElement(String namespaceURI, String localName, String qName) characters(char[] ch, int start, int length) : • beim Auftreten von Text aufgerufen weitere Methoden Seminar XML und Datenbanken 9 Bewertung von SAX sequentielle Verarbeitung kein Rück- bzw. Vorgriff auf andere Knoten geringer Ressourcenverbrauch (Speicher) keine Ausgabe vorgesehen Seminar XML und Datenbanken 10 DOM sprachunabhängig kein Parser Baummodell stellt Struktur dar verschiedene Sprachbindungen Java-Sprachbindungen Seminar XML und Datenbanken 11 Knotentypen ... Seminar XML und Datenbanken 12 DomParser org.apache.xerces.parsers.DomParser parser = new DomParser(); parser.parse(“beispiel.xml“); Document doc = parser.getDocument(); Seminar XML und Datenbanken 13 Node Methoden, die alle Knotentypen haben: getNodeType() : short getNodeName() : String getNodeValue() : String getParentNode() : Node getFirstChild() : Node getLastChild() : Node getChildNodes() : NodeList getAttributes() : NamedNodeMap Seminar XML und Datenbanken 14 Bewertung von DOM sprachunabhängig nicht herstellerunabhängig hoher Speicherbedarf Vor- und Rückgriff auf andere Knoten keine Ausgabe vorgesehen Seminar XML und Datenbanken 15 JDOM Java-API Baummodell Beta-Version einlesen von XML mittels SAXBuilder oder DOMBuilder Seminar XML und Datenbanken 16 Ausgabe org.jdom.output DOMOutputter SAXOutputter XMLOutputter Seminar XML und Datenbanken 17 XMLOutputter Ausgabe in Datei: XMLOutputter out = new XMLOutputter(); FileOutputStream stream = new FileOutputStream(“beispiel.xml“); out.output(JDOMDocument,stream); Seminar XML und Datenbanken 18 Unterschiede zu DOM keine Erweiterung von DOM JDOM besteht aus konkreten Klassen Ausgabemechanismus JDOM noch im Standardisierungsprozess Seminar XML und Datenbanken 19 JAXP Java-API von SUN Nutzung von SAX und DOM herstellerunabhängig Wechsel des Parsers ohne Neukompilierung • Wechsel der JAXP-Distribution • JAXP-Systemeigenschaften Seminar XML und Datenbanken 20 Verwendung von SAX SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); SAXParser parser = factory.newSAXParser(); parser.parse(“beispiel.xml“,new MyHandler()); DOM analog mittels DocumentBuilder Seminar XML und Datenbanken 21 XL Forschungsprojekt der TU München XML-Programmiersprache Entwicklung und Komposition von Web Services XML einziger Datentyp Konzentration des Programmierers auf Applikationslogik plattformunabhängig Seminar XML und Datenbanken 22 Beispiel service http://www.auktion.com let bieter; operation registriereBieter precondition empty($bieter[@uri=$input/uri]); postcondition exists($bieter[@uri=$input/uri]); body insert $input into $bieter; let $output = <msg>Danke.</msg> endbody endoperation endservice Seminar XML und Datenbanken 23 Zusammenfassung ereignisbasierte Verarbeitung baumstrukturierte Modelle • sprachunabhängig • an Java gebunden herstellerunabhängige Nutzung von SAX und DOM XML-Programmiersprache Seminar XML und Datenbanken 24 Ende Seminar XML und Datenbanken 25