Title: XML-Parser
1XML-Parser
2Übersicht
- Einleitung
- Parsereigenschaften
- SAX
- DOM
- Beschreibung der wichtigsten Java-Parser
- Parsergeneratoren
3Einleitung
- Große Anzahl von XML-Parsern für fast alle
Programmier- und Skriptsprachen erhältlich. - Unterstützung von Standards unterschiedlich.
- Java und XML
4Einleitung
- Wo werden XML-Parser eingesetzt?
- Ein Beispiel
5Parserarten
- 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
6Wohlgeformtheit
- Alle Attributwerte müssen in Anführungsstrichen
stehen - Jedes Tag muss ein Ende-Tag besitzen ( ltbrgtlt/brgt
) oder mit einem "/" gleich beendet werden (
ltbr/gt ) - Elemente müssen sauber ineinander eingebettet
sein ( nicht ltsprachegt ltdeutschgt lt/sprachegt
lt/deutschgt ) - 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 "lt" enthalten
7SAX
- 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)
8SAX
- Parser über ParserFactory instanzieren
- Handler implementieren und beim Parser
registrieren - Parser.parse() aufrufen
9SAX
DocumentHandler
- startDocument()
- endDocument()
- startElement()
- endElement()
- characters()
- ignorableWhitespace()
- processingInstruction()
- setDocumentLocator()
10SAX
11SAX
ErrorHandler
- warning()
- error()
- fatalError()
12SAX
13SAX
Entity Resolver
- resolveEntity()
- unparsedEntityDecl()
- notationDecl()
DTDHandler
14SAX 1.0 gt 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.
15Whitespace 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
16Whitespace 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 xmlspace"preserve"
setzen oder die Daten in einem CDATA-Abschnitt
kapseln
17DOM
- 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.
18DOM
19DOM
- 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
20DOM
lt?xml version"1.0"?gt lt!--DOM Demo--gt ltxdocgt
ltBegruessunggtHallo ltlautgtXMLlt/lautgt
Parser! lt/Begruessunggt ltApplaus
art"anhaltend"/gt lt/xdocgt
21DOM 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
22DOM und XML-Parser
DocumentBuilderFactory factory
DocumentBuilderFactory.newInstance() try
factory.setValidating(true) DocumentBuilder
builder factory.newDocumentBuilder()
Document document builder.parse( new
File(argv0) ) catch (SAXParseException spe)
... Fehlerbehandlung ausgeschnitten ...
23DOM
- Achtung DOM wird komplett im Hauptspeicher
gehalten - Bei Verarbeitung von großen Dokumenten mit wenig
Arbeitsspeicher Performanceverlust wegen
Auslagerung des Speichers
24XML-Parser in Java
- JAXP und Project X (Sun)
- Xerces-J (Apache)
- XP (James Clark)
- XML Parser v2 (Oracle)
25JAXP
- 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
26JAXP
- Interfaces
- SAXParserFactory
- SAXParser
- DocumentBuilderFactory
- DocumentBuilder
- FactoryConfigurationError
- ParserConfigurationException
27JAXP
- 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
28JAXP - 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
29JAXP - Project X
- Vorteile
- hohe Konformität zum XML-Standard
- hohe Geschwindigkeit
- gute Dokumentation ( Tutorial, Beispiele, source
code )
30Xerces-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
31Xerces-J
- open source
- gute Dokumentation
- Achtung Dieser Parser liest eine DTD, auch wenn
er im nicht-validierenden Modus ist
32XP
- 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"
33XP
- Dokumentation nur API-Doc
- open source
34XML 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
35Parsergenerator 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.
36Parsergenerator XMLBooster
- Vorteile
- Geschwindigkeit
- Daten gleich in eigener Datenstruktur verfügbar
- Nachteile
- proprietäre Meta-Definition
- nicht frei verfügbar
37Ende