XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der...

37
XML-Parser Manuel Röllinghoff

Transcript of XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der...

Page 1: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

XML-Parser

Manuel Röllinghoff

Page 2: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Übersicht

• Einleitung

• Parsereigenschaften

• SAX

• DOM

• Beschreibung der wichtigsten Java-Parser

• Parsergeneratoren

Page 3: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Einleitung

• Große Anzahl von XML-Parsern für fast alle Programmier- und Skriptsprachen erhältlich.

• Unterstützung von Standards unterschiedlich.

• Java und XML

Page 4: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Einleitung

• Wo werden XML-Parser eingesetzt?

• Ein Beispiel:

Page 5: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Parserarten

• Zwei Parserarten:

• Nicht-validierende Parser: überprüfen nur, ob das Dokument wohlgeformt ist

• Validierende Parser: überprüfen zusätzlich, ob das Dokument sich an die vorgegebene DTD hält

Page 6: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Wohlgeformtheit

• Alle Attributwerte müssen in Anführungsstrichen stehen

• Jedes Tag muss ein Ende-Tag besitzen ( <br></br> ) oder mit einem "/" gleich beendet werden ( <br/> )

• Elemente müssen sauber ineinander eingebettet sein ( nicht <sprache> <deutsch> </sprache> </deutsch> )

• Der Name eines Attributs kommt innerhalb eines Elements nicht mehr als einmal vor

• Ein Attributwert darf keinen Verweis auf ein externes Entity enthalten

• Ein Attributwert darf kein "<" enthalten

Page 7: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX

• Simple API for XML

• entwickelt von der XML-DEV Mailinglist

• 1998 Version 1.0, inzwischen Version 2.0

• serieller Mechanismus zur Verarbeitung von XML-Dokumenten

• ereignisgesteuertes Protokoll(Handler)

Page 8: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX

• Parser über ParserFactory instanzieren

• Handler implementieren und beim Parser registrieren

• Parser.parse() aufrufen

Page 9: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX

• startDocument()

• endDocument()

• startElement()

• endElement()

• characters()

• ignorableWhitespace()

• processingInstruction()

• setDocumentLocator()

DocumentHandler

Page 10: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX

Page 11: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX

• warning()

• error()

• fatalError()

ErrorHandler

Page 12: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX

Page 13: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX

• resolveEntity()

• unparsedEntityDecl()

• notationDecl()

Entity Resolver

DTDHandler

Page 14: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

SAX 1.0 => SAX 2.0

• Unterstützung von XML-Namespaces

• einheitliche Schnittstelle zum Lesen und Schreiben von Properties und Features

• Interface XMLFilter um Filter zwischen Anwendung und SAX-Treiber einzusetzen

• neue Namen für Interfaces: XMLReader für Parser, ContentHandler für DocumentHandler u.v.m.

Page 15: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Whitespace I

• Leerzeichen, Tabs, Zeilenschaltung u.ä. zwischen Tags um Quelltext lesbarer zu machen

• nicht signifikant, kann nur mit Hilfe der DTD erkannt werden

• wird in Methode ignorableWhitespace() des DocumentHandlers weitergegeben

• bei nichtvalidierenden Parsern unterschiedliche Behandlung

Page 16: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Whitespace II

• signifikant, z.B. Zeilenenden bei Quelltext, mehrere Leerzeichen zwischen Wörtern

• keine Möglichkeit für den Parser, die Signifikanz zu erkennen

• Lösung: entweder das Attribut xml:space="preserve" setzen oder die Daten in einem CDATA-Abschnitt kapseln

Page 17: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

DOM

• Document Object Model

• Standard vom W3C

• 1998 DOM Level 1, DOM Level 2 Proposed Recommendation

• Das DOM definiert mehrere Interfaces mit denen Daten in einer Baumstruktur beschrieben werden können.

Page 18: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

DOM

nodeNameparentNodechildNodes...

getNodeName()getParentNode()getChildNodes()...

Node

datalength

CharacterData

Text

CDATASection

namevalue

Attr

doctype

Document

tagname

Element ...

Page 19: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

DOM

• Alle Knoten von Node abgeleitet

• Funktionalität zum Traversieren des Baumes in Node

• spezifische Eigenschaften in abgeleiteten Klassen

• weitere Interfaces für Notation, Entity, EntityReference, ProcessingInstruction

Page 20: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

DOM

<?xml version="1.0"?><!--DOM Demo--><xdoc> <Begruessung>Hallo <laut>XML</laut> Parser! </Begruessung> <Applaus art="anhaltend"/></xdoc>

Document

CommentVersion Element

Element Element

TextText Element

Text

• Beispiel:

Page 21: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

DOM und XML-Parser

• Die meisten Parser unterstützen ausschließlich DOM Level 1.0

• DOM Level 1.0 spezifiziert nur, wie man mit dem DOM arbeiten kann, nicht wie ein DOM aus einem XML-Dokument erzeugt werden kann

• Unterschiedliche Implementierungen zumeist auf Grundlage von SAX

Page 22: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

DOM und XML-Parser

• Beispiel JAXP von Sun:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try { factory.setValidating(true); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse( new File(argv[0]) );} catch (SAXParseException spe) { ... Fehlerbehandlung ausgeschnitten ...}

Page 23: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

DOM

• Achtung: DOM wird komplett im Hauptspeicher gehalten

• Bei Verarbeitung von großen Dokumenten mit wenig Arbeitsspeicher Performanceverlust wegen Auslagerung des Speichers

Page 24: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

XML-Parser in Java

• JAXP und Project X (Sun)

• Xerces-J (Apache)

• XP (James Clark)

• XML Parser v2 (Oracle)

Page 25: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

JAXP

• Java API for XML Parsing

• stellt Schnittstellen zum Parsen und Manipulieren von XML-Dokumenten zur Verfügung

• zusammen mit Project X als Referenzimplementation eines Parsers

• Java Optional Package mit Paketnamen javax.xml.parsers

• Standarderweiterung des JDK, wird aber noch nicht zusammen damit ausgeliefert

Page 26: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

JAXP

• Interfaces:

– SAXParserFactory

– SAXParser

– DocumentBuilderFactory

– DocumentBuilder

– FactoryConfigurationError

– ParserConfigurationException

Page 27: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

JAXP

• Voraussetzungen, um einen Parser in das JAXP-Interface "pluggen" zu können:

– Er muß als character set encodings mindestens ascii, UTF8 und UTF16 unterstützen

– Er muß ein Dokument auf seine Wohlgeformtheit überprüfen können

– Er muß ein Dokument auf seine Gültigkeit anhand einer DTD überprüfen können

Page 28: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

JAXP - Project X

• Project X 1998 als Technology Release 1

• 1999 Technology Release 2

• 2000 Referenzimplementation für JAXP

• erster schneller Parser

• validierender und nichtvalidierender Parser

• Unterstützung von SAX 1.0, DOM Level 1.0 und XML Namespaces

• nicht open source, aber Community Source License

Page 29: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

JAXP - Project X

• Vorteile:

– hohe Konformität zum XML-Standard

– hohe Geschwindigkeit

– gute Dokumentation ( Tutorial, Beispiele, source code )

Page 30: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Xerces-J

• xml.apache.org Projekt

• entstanden aus dem IBM XML4J

• XML4J gibt es weiterhin und baut auf Xerces-J auf

• aktuelle Version 1.2.1

• bietet validierende und nichtvalidierende Parser

• unterstützt SAX 1.0 und 2.0, DOM Level 1, DOM Level 2 beta

• ansatzweise Unterstützung von XML-Schema

Page 31: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Xerces-J

• open source

• gute Dokumentation

• Achtung: Dieser Parser liest eine DTD, auch wenn er im nicht-validierenden Modus ist

Page 32: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

XP

• Autor James Clark: Technical Editor der XML-Spezifikation

• zwei Designziele: 100% konform zum XML-Standard und möglichst schnell

• dafür Einschränkungen: – kein validierender Parser,

– Unterstützung nur von SAX 1.0

– keine DOM-Unterstützung

– nur 4 character encodings

– ErrorHandling "brutal"

Page 33: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

XP

• Dokumentation nur API-Doc

• open source

Page 34: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

XML Parser v2 (Oracle)

• validierende und nichtvalidierende Parser

• Unterstützung von SAX 1.0 und DOM Level 1.0

• Besonderheit: XSLT Modul, mit dem sich XML mittels eines Stylesheets in HTML oder ein anderes Format umwandeln läßt.

• Java Beans Komponenten(DOMBuilderBean, TreeViewBean, XSLBean)

• kein open source, kein source code

• Beispiele + API-Dokumentation

Page 35: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Parsergenerator XMLBooster

• generiert XML-Parser für vorher definierte Datenstrukturen in Java, C, C++, Cobol und Delphi

• Zunächst Meta-Definition (proprietäres Format, DTD-ähnlich) für das benötigte XML-Format erstellen

• Dann Parser generieren lassen und in eigene Anwendung integrieren

• Falls ein geparstes Dokument nicht dem Format genügt, wird Fehlermeldung ausgegeben, ansonsten erhält man die in der Meta-Definition beschriebene Datenstruktur mit Inhalt zurück.

Page 36: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Parsergenerator XMLBooster

• Vorteile:

– Geschwindigkeit

– Daten gleich in eigener Datenstruktur verfügbar

• Nachteile:

– proprietäre Meta-Definition

– nicht frei verfügbar

Page 37: XML-Parser Manuel Röllinghoff. Übersicht Einleitung Parsereigenschaften SAX DOM Beschreibung der wichtigsten Java-Parser Parsergeneratoren.

Ende

• Noch Fragen?