1 / 37

XML-Parser

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.

lotta
Download Presentation

XML-Parser

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XML-Parser Manuel Röllinghoff

  2. Übersicht • Einleitung • Parsereigenschaften • SAX • DOM • Beschreibung der wichtigsten Java-Parser • Parsergeneratoren

  3. Einleitung • Große Anzahl von XML-Parsern für fast alle Programmier- und Skriptsprachen erhältlich. • Unterstützung von Standards unterschiedlich. • Java und XML

  4. Einleitung • Wo werden XML-Parser eingesetzt? • Ein Beispiel:

  5. 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

  6. 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

  7. 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)

  8. SAX • Parser über ParserFactory instanzieren • Handler implementieren und beim Parser registrieren • Parser.parse() aufrufen

  9. SAX DocumentHandler • startDocument() • endDocument() • startElement() • endElement() • characters() • ignorableWhitespace() • processingInstruction() • setDocumentLocator()

  10. SAX

  11. SAX ErrorHandler • warning() • error() • fatalError()

  12. SAX

  13. SAX Entity Resolver • resolveEntity() • unparsedEntityDecl() • notationDecl() DTDHandler

  14. 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.

  15. 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

  16. 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

  17. 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.

  18. DOM

  19. 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

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

  21. 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

  22. 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 ... }

  23. DOM • Achtung: DOM wird komplett im Hauptspeicher gehalten • Bei Verarbeitung von großen Dokumenten mit wenig Arbeitsspeicher Performanceverlust wegen Auslagerung des Speichers

  24. XML-Parser in Java • JAXP und Project X (Sun) • Xerces-J (Apache) • XP (James Clark) • XML Parser v2 (Oracle)

  25. 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

  26. JAXP • Interfaces: • SAXParserFactory • SAXParser • DocumentBuilderFactory • DocumentBuilder • FactoryConfigurationError • ParserConfigurationException

  27. 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

  28. 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

  29. JAXP - Project X • Vorteile: • hohe Konformität zum XML-Standard • hohe Geschwindigkeit • gute Dokumentation ( Tutorial, Beispiele, source code )

  30. 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

  31. Xerces-J • open source • gute Dokumentation • Achtung: Dieser Parser liest eine DTD, auch wenn er im nicht-validierenden Modus ist

  32. 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"

  33. XP • Dokumentation nur API-Doc • open source

  34. 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

  35. 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.

  36. Parsergenerator XMLBooster • Vorteile: • Geschwindigkeit • Daten gleich in eigener Datenstruktur verfügbar • Nachteile: • proprietäre Meta-Definition • nicht frei verfügbar

  37. Ende • Noch Fragen?

More Related