Java und XML Markus Rder XML 1 XML

  • Slides: 85
Download presentation
Java und XML Markus Röder

Java und XML Markus Röder

XML

XML

1. XML ist eine Methode, um strukturierte Daten in einer Textdatei darzustellen • strukturierten

1. XML ist eine Methode, um strukturierte Daten in einer Textdatei darzustellen • strukturierten Daten sind – – – Kalkulationstabellen, Adressbücher, Konfigurationsparameter, finanzielle Transaktionen, technische Zeichnungen usw. zu verstehen. • XML ist eine Menge von Regeln, Richtlinien, Konventionen XML in 10 Punkten

2. XML sieht fast aus wie HTML, ist aber kein HTML • Wie HTML

2. XML sieht fast aus wie HTML, ist aber kein HTML • Wie HTML verwendet XML Tags (durch '<' und '>' geklammerte Wörter) • Attribute (der Form name="value"), • aber HTML legt fest, was jedes Tag und Attribut bedeutet • XML nutzt Tags zur Abgrenzung von Daten • überlässt die Interpretation der Daten vollkommen der Anwendung, die sie verarbeitet. Mit anderen Worten: wenn Sie "<p>" in einer XML-Datei sehen, sollten Sie nicht annehmen, dass es sich um einen Absatz (englisch: paragraph) handelt. Je nach Kontext kann es ein Preis, ein Parameter, eine Person, ein(e) P. . sein (übrigens, wer sagt denn, dass es ein Wort mit einem "p" sein muss? ) XML in 10 Punkten

3. XML ist Text, aber nicht zum Lesen • • • XML-Dateien sind Textdateien,

3. XML ist Text, aber nicht zum Lesen • • • XML-Dateien sind Textdateien, XML-Dateien sind viel strikter als für HTML. Ein vergessenes Tag oder ein Attribut ohne Anführungszeichen macht die Datei unbrauchbar, während dies bei HTML oft explizit erlaubt oder zumindest toleriert wird. In der offziellen XML-Spezifikation steht: Anwendungen dürfen keine Vermutungen anstellen, was der Erzeuger einer beschädigten Datei meinte; wenn die Datei kaputt ist, muss eine Anwendung genau da anhalten und eine Fehlermeldung ausgeben. XML in 10 Punkten

4. XML ist eine Familie von Techniken • • Hier ein Ausschnitt: Xlink (in

4. XML ist eine Familie von Techniken • • Hier ein Ausschnitt: Xlink (in Entwicklung seit November 1999), das eine Standardmethode beschreibt, um Hyperlinks zu einer XML-Datei hinzuzufügen. XPointer & XFragments (ebenfalls noch in Entwicklung) sind Syntaxen, um auf Teile eines XML-Dokuments zu zeigen. CSS, die Style-Sheet-Sprache XSL (Herbst 1999) ist die weiterentwickelte Sprache zum Erstellen von Style Sheets. Sie basiert auf XSLT Das DOM ist eine Standardmenge von Funktionsaufrufen zur Manipulation von XML- (und HTML-) Dateien aus einer Programmiersprache. XML Namespaces ist eine Spezifikation Die XML Schemas 1 und 2 unterstützen Entwickler bei der präzisen Definition ihrer eigenen XML-basierten Formate. XML in 10 Punkten

5. XML ist ausführlich, was aber kein Problem darstellt • XML-Dateien fast immer größer

5. XML ist ausführlich, was aber kein Problem darstellt • XML-Dateien fast immer größer als vergleichbare binäre Formate. • Programme wie zip und gzip können Dateien sehr gut und sehr schnell komprimieren. • Diese Programme sind für fast alle Plattformen verfügbar (und meistens kostenlos). • Kommunikationsprotokolle wie Modemprotokolle und HTTP/1. 1 können Daten automatisch komprimieren und damit ebenso effektiv Bandbreite sparen wie ein binäres Format. XML in 10 Punkten

6. XML ist neu, aber nicht so neu • • Die Entwicklung von XML

6. XML ist neu, aber nicht so neu • • Die Entwicklung von XML begann 1996 Seit Februar 1998 ist es ein W 3 C-Standard, Vor XML gab es SGML, seit 1986 eine ISO-Norm Vor XML gab es HTML, dessen Entwicklung 1990 begann. XML in 10 Punkten

7, 8, 9. . . • Diese kenne ich selbst noch nicht. XML in

7, 8, 9. . . • Diese kenne ich selbst noch nicht. XML in 10 Punkten

10. XML ist lizenzfrei, plattformunabhängig und gut unterstützt • Wachsenden Ansammlung von Werkzeugen (eines

10. XML ist lizenzfrei, plattformunabhängig und gut unterstützt • Wachsenden Ansammlung von Werkzeugen (eines davon macht vielleicht schon das, was Sie brauchen!) • und zu einer Menge versierter Fachleute. Sich für XML zu entscheiden, ist fast so wie SQL für Datenbanken zu wählen: XML als eine W 3 C-Entwicklung ist lizenzfrei, XML ist nicht immer die beste Lösung, aber es lohnt sich immer, XML in Erwägung zu ziehen • • Miss at your own RISK XML in 10 Punkten

Von SGML zu XML

Von SGML zu XML

Probleme konkret – 1 • Was bedeuten diese Daten? – 000000072394|00001|Modell|Handy S 200|| 000000072394|00002|Spannung

Probleme konkret – 1 • Was bedeuten diese Daten? – 000000072394|00001|Modell|Handy S 200|| 000000072394|00002|Spannung V/Hz|230/50|| 000000072394|00003|Einstellbereich Elektrode A|10 -140|| 000000072394|00004|Einstellbereich WIG A|10 -150|| – 0100021324554652 20 X 0. 3 MLVOLTAREN OPHTHA SINE EDP ATR 0000261106. . . 0100036404554770 200 MLPREWASH GALL SEIFE 000003100000. . . 0100003504556438 30 X 0. 4 MLPOLYRINSE LINSEN KLAERER 000008690000. . . – AENDERN ARTNR 4901 000 155 0 MATCHCODE Knebelschalter u. P. BEGINN_TEXT KURZTEXT Knebelschalter u. P. ENDE_TEXT KURZTEXT PREISTYP 0 PREISPER 1 BRUTTOPREIS 14, 20 Warengruppe Elektrozubeh”r Produktgruppe Schalter und Taster – <td><b>Microsoft Corp. <b></td><td>MSFT</td><b>92, 23</b></td>

Probleme konkret – 2 ° Was sind die Daten? ü Die Abgrenzung von Bedeutungseinheiten

Probleme konkret – 2 ° Was sind die Daten? ü Die Abgrenzung von Bedeutungseinheiten ist schwer: Peter. Mustermann. Isestr. 5323494 Hamburg ° Wo sind die Daten? üDie Ermittlung der Positionen von Bedeutungseinheiten ist schwer: Peter. Mustermann. Isestr. 5323494 Hamburg Index: 0 Index: 1 Index: 2 Index: 3

Nachteile proprietärer Datenformate • Keine einheitliche Grundstruktur – Wechselnde Delimiter, nicht immer zeilenorientiert usw.

Nachteile proprietärer Datenformate • Keine einheitliche Grundstruktur – Wechselnde Delimiter, nicht immer zeilenorientiert usw. • Nicht plattformunabhängig – Binärrepräsentation bestimmter Datentypen nicht portabel • Schwer lesbar – Nicht textbasiert – Keine Metainformationen • Unflexibel – Keine hierarchischen oder unstrukturierten Daten • Nicht erweiterbar – Grundstruktur und Semantik proprietär

Das XML-Lösungsangebot – 1 °Das sind die Daten! ü Bedeutungseinheiten werden von Tags eingeschlossen.

Das XML-Lösungsangebot – 1 °Das sind die Daten! ü Bedeutungseinheiten werden von Tags eingeschlossen. ü Bedeutungseinheiten können geschachtelt werden. <Name><Vor>Peter</Vor><Nach>Mustermann</Nach></Name> ° Dort sind die Daten! üBedeutungseinheiten können über Namen identifiziert werden. <Name><Vor>Peter</Vor><Nach>Mustermann</Nach></Name> „Vor“ „Nach“ „Name“

Das XML-Lösungsangebot – 2 • Standardisiertes Regelwerk – Wohlgeformtheitsregeln – Standardisiertes Import-Werkzeug: XML-Parser –

Das XML-Lösungsangebot – 2 • Standardisiertes Regelwerk – Wohlgeformtheitsregeln – Standardisiertes Import-Werkzeug: XML-Parser – Standardisierte In-memory-Repräsentation: XML DOM • Textbasiertes Format – Plattformunabhängig – Lesbar & einfach zu erzeugen • Hierarchische Struktur – Kann flache, hierarchische und unstrukturierte Daten transportieren • Beliebig » erweiterbar « – Eigene XML-Formate werden nach den Wohlgeformtheitsregeln entworfen – Optionale Validation / » semantische « Prüfung • DTD bzw. XML Schema

Wohlgeformtheit • Eine Auswahl von Regeln: – Elemente: Daten zwischen öffnende und schließende Tags

Wohlgeformtheit • Eine Auswahl von Regeln: – Elemente: Daten zwischen öffnende und schließende Tags • Aufbau von Tags ist festgelegt • Schließendes Tag kann entfallen, wenn keine Daten umschlossen werden sollen – Genau 1 Dokumentenelement – Elemente können geschachtelt werden • Keine Überlappung! – Attribute: Name "=" Wert • Nur im öffnenden Tag erlaubt

Vom Text zum Objektmodell: XML DOM MSXML XML-Parser Adressen <Adressen> Adresse <Adresse> <Name> Mustermann

Vom Text zum Objektmodell: XML DOM MSXML XML-Parser Adressen <Adressen> Adresse <Adresse> <Name> Mustermann </Name> <PLZ> 22087 </PLZ> </Adresse> <Adresse </Adresse> </Adressen> Name Mustermann PLZ id="1234" > 22087 id Adresse 1234

XML abstrakt • Datenserialisierung/-persistenz – In-Memory-Datenstrukturen (XML DOM oder proprietär) werden auf einen Text

XML abstrakt • Datenserialisierung/-persistenz – In-Memory-Datenstrukturen (XML DOM oder proprietär) werden auf einen Text abgebildet • Text kann übertragen oder gespeichert werden • Kommunikation. . . – zwischen Anwendungen – zwischen Rechnern – zwischen Plattformen – in der Zeit • Dieselbe Anwendung arbeitet mit Daten zu verschiedenen Zeitpunkten

XML-Einsatzgebiete • XML-Auslöser – Web-Client • Trennung von Daten und Darstellung – Web-Server •

XML-Einsatzgebiete • XML-Auslöser – Web-Client • Trennung von Daten und Darstellung – Web-Server • Verallgemeinerungen – Applikationskommunikation • Vgl. COM vs. CORBA • Lose Kopplung – Plattformunabhängig persistente Daten • Datenaustausch • Archivierung

XML-Landschaft – 1 Anwendung XQL XML DOM XML Schema XSL XML

XML-Landschaft – 1 Anwendung XQL XML DOM XML Schema XSL XML

XML-Landschaft – 2 • XML DOM – Generisches Objektmodell für hierarchische Daten • XSL(T)

XML-Landschaft – 2 • XML DOM – Generisches Objektmodell für hierarchische Daten • XSL(T) & CSS – XML transformieren nach. . . • XML • HTML • andere Datenformate • XQL/XPath – Abfragen auf XML-Daten • XML Schema – Validierung von XML-Daten – Datentypen • Namespaces – Daten aus verschiedenen Schemata mischen

What´s hot in XML? • XML 2 HTML – Trennung von Daten und Darstellung

What´s hot in XML? • XML 2 HTML – Trennung von Daten und Darstellung • XSLT, CSS • SQL XML • Datenaustausch – XML 2 COM • B 2 B – XML EDI – Biz. Talk • Web Services – SQL XML • Applikationskommunikation – SOAP – Objektpersistenz

Die Grenzen von XML • Read-Mostly – Veränderungen an XML-Daten (in Dateien) sind aufwendig

Die Grenzen von XML • Read-Mostly – Veränderungen an XML-Daten (in Dateien) sind aufwendig • Kein Ersatz für Datenbanken – Zugriff nicht sehr performant, solange (große) Datenbestände in Dateien liegen • Overhead durch Tags – Metadaten vergrößern Datenumfang • Binärdaten müssen selbst kodiert werden

XML ist keine exotische Technologie, sondern eine (zukünftige) Selbstverständlichkeit wie Datenbanken, SQL, das Internet

XML ist keine exotische Technologie, sondern eine (zukünftige) Selbstverständlichkeit wie Datenbanken, SQL, das Internet oder Skriptsprachen.

Fragen? Uff. . .

Fragen? Uff. . .

Ressourcen • Microsoft XML Workshop – • W 3 C – • http: //msdn.

Ressourcen • Microsoft XML Workshop – • W 3 C – • http: //msdn. microsoft. com/xml/general/msxmlconform. asp Biz. Talk – • http: //msdn. microsoft. com/xml/articles/generat. asp Diskussion des MSXML-Test auf www. xml. com – • http: //www. pault. com/Xmltube/dtdgen. html XML Code Generator – • http: //www. xmlsoftware. com DTD-Generator – • http: //www. xml. com http: //www. xml. org http: //www. ozemail. com. au/~sakthi/Common/xml. html http: //www. xmlinfo. com http: //www. vbxml. com Welche XML-Software gibt es? – • http: //www. w 3 c. org/xml XML Informationen/Leitseiten – – – • http: //msdn. microsoft. com/xml http: //www. biztalk. org Bücher / Dokumentation – – – » XML in Action «, William J. Pardi, MSPress » XML IE 5 Programmer´s Reference «, Alex Homer, Wrox » Die neue Web-Sprache «, Norbert Hranitzky, http: //www. hranitzky. purespace. de/docs/introxml. pdf

Praktische Anwendungen XML • • • WML XHTML Math. ML CML SVG

Praktische Anwendungen XML • • • WML XHTML Math. ML CML SVG

3 Gebote von XML • Du sollst Deine Elemente immer schließen. • Du sollst

3 Gebote von XML • Du sollst Deine Elemente immer schließen. • Du sollst Attributwerte immer in doppelte Anführungszeichen setzen. • Schachtelte Deine Elemente immer hierarchisch

Übung XML • Erstellen Sie eine xml Datei, die Datensätze zu Personen enthält •

Übung XML • Erstellen Sie eine xml Datei, die Datensätze zu Personen enthält • 3 Personen mit Name, Vorname, Adresse, und möglichen Kontaktdaten, wie Datum, Grund des Kontaktes • Es soll pro Person möglich sein mehrere Kontaktinformationen zu speichern

Übung - Attribute • Erweitern Sie Ihre XML Datei, indem Sie den Personen noch

Übung - Attribute • Erweitern Sie Ihre XML Datei, indem Sie den Personen noch ein Attribut Alter und ein Attribut id hinzufügen • Den Kontaktdatensätzen fügen Sie bitte noch das Attribut typ hinzu, das die Werte tel, fax, brief, persoenlich enthalten kann

Teile einer XML Struktur • <? xml version=„ 1. 0“ encoding=„. . . “

Teile einer XML Struktur • <? xml version=„ 1. 0“ encoding=„. . . “ ? > • Elemente <Adresse></Adresse> – Leere Elemente <Alter age=„ 10“/> • • Attribute <Adresse id=„ 001“>. . . Kommentare <!-- Kommentar --> PI <? use-processor „p 1“ ? > CDATA. . . weiter nächste Seite

Teile einer XML Datei • CDATA <![CDATA[hier kann alles <p> stehen]]> • Zeichen-Referenzen :

Teile einer XML Datei • CDATA <![CDATA[hier kann alles <p> stehen]]> • Zeichen-Referenzen : z. B: &#64 &#x. A 3 • Entitäts-Referenzen : > < & •

Kurzeinführung in DTD • Document Type Definition • z. B : <!ELEMENT person (name,

Kurzeinführung in DTD • Document Type Definition • z. B : <!ELEMENT person (name, child*)> <!ELEMENT child (name)> <!ELEMENT name (#PCDATA)>

Komplexe Strukturen <!ELEMENT person (name) muss genau einmal erscheinen <!ELEMENT personen (*person) 0. .

Komplexe Strukturen <!ELEMENT person (name) muss genau einmal erscheinen <!ELEMENT personen (*person) 0. . n mal <!ELEMENT kontakt (+datum) 1. . . n mal <!ELEMENT person (? ehemann) 0. . . 1 mal

Übung 2 - DTD • Erzeugen Sie eine DTD für Ihre Personendatei • Definieren

Übung 2 - DTD • Erzeugen Sie eine DTD für Ihre Personendatei • Definieren Sie – <!ELEMENT name (#PCDATA)>

Einbinden in XML <? xml version=„ 1. 0“ ? > <!DOCTYPE person SYSTEM „person.

Einbinden in XML <? xml version=„ 1. 0“ ? > <!DOCTYPE person SYSTEM „person. dtd“> <person> <name>Markus</name> <child><name>Susu</name></child> <child><name>Mimi</name></child> </person>

Gültig oder Wohlgeformt ? • Wohlgeformt – Syntax von XML wird eingehalten – Wurzelelement

Gültig oder Wohlgeformt ? • Wohlgeformt – Syntax von XML wird eingehalten – Wurzelelement existiert – Korrekte Verschachtelung • Gültig – Wohlgeformt – Entspricht DT Definitionen

Validieren • Nicht - Validierende Parser überprüfen Wohlgeformtheit • Validierende Parser überprüfen Gültigkeit

Validieren • Nicht - Validierende Parser überprüfen Wohlgeformtheit • Validierende Parser überprüfen Gültigkeit

DTD Spezialitäten • ENTITY <!ENTITY mac „<name>Röder</name> <vorname>mac</vorname>“> Benutzung mit &mac;

DTD Spezialitäten • ENTITY <!ENTITY mac „<name>Röder</name> <vorname>mac</vorname>“> Benutzung mit &mac;

Attribute • • Zeichenkettenattribute Aufzählungsattribute Notationsattribute Tokenattribute – idrefs

Attribute • • Zeichenkettenattribute Aufzählungsattribute Notationsattribute Tokenattribute – idrefs

Attribute definieren <!ELEMENT email (#PCDATA)> <!ATTLIST email id ID #REQUIRED priority (high | low

Attribute definieren <!ELEMENT email (#PCDATA)> <!ATTLIST email id ID #REQUIRED priority (high | low |medium) #REQUIRED type CDATA #IMPLIED >

Übung 2 - DTD Attribute • Erweitern Sie Ihre DTD mit den Attributwerten mittels

Übung 2 - DTD Attribute • Erweitern Sie Ihre DTD mit den Attributwerten mittels – <!ATTLIST. . . . • Binden Sie Ihre DTD in Ihre xml Datei mittels

Namespaces sind eine Erweiterung des Elementnamen oder des Attributnamens um eine URI Mehrere Namespaces

Namespaces sind eine Erweiterung des Elementnamen oder des Attributnamens um eine URI Mehrere Namespaces können in einer XML Datei benutzt werden. xmlns: mr =„www. erex. de/definition/mr“ xmlns: hans =„www. hans. de/wasweissich/namen“ <mr: Adresse> <hans: Adresse>. . </hans: Adresse>. . </mr: Adresse>

Java und XML

Java und XML

DB -> XML • Mögliche Varianten – DB - JDBC: ODBC -> XML –

DB -> XML • Mögliche Varianten – DB - JDBC: ODBC -> XML – XML - Database mit XML nativ Data (Tamino) – Servlets mit Taglibs – Cocoon und XSP (XML - Server Pages

XML erzeugen per JDBC • • • Lade Treiber Erzeuge Connection Erzeuge Statement Datenbankabfrage

XML erzeugen per JDBC • • • Lade Treiber Erzeuge Connection Erzeuge Statement Datenbankabfrage per execute. Query Ergebnis der Abfrage liegt als Resultset vor. • Ausgabe in Stream

SUN ONE

SUN ONE

Web Services

Web Services

Welche Parser gibt es • • • XML 4 J (IBM) crimson Xerces Aelfred

Welche Parser gibt es • • • XML 4 J (IBM) crimson Xerces Aelfred kxml. .

SAX • Simple API for XML • speziell für XML entwickelt • XML Dokument

SAX • Simple API for XML • speziell für XML entwickelt • XML Dokument als Folge von (vorbeihuschenden) Ereignissen • Eventorientierte Methoden - Callbacks • Entwicklung von Megginson Tech. Inc (www. megginson. com)

DOM • erzeugt aus XML Datei eine Baumstruktur • Methoden zum Navigieren durch den

DOM • erzeugt aus XML Datei eine Baumstruktur • Methoden zum Navigieren durch den Baum • Speicherverbrauch hoch, da XML Dokument im Speicher verarbeitet wird

Java und XML • • • Java API for XML Processing (JAXP) Java Architecture

Java und XML • • • Java API for XML Processing (JAXP) Java Architecture for XML Binding (JAXB) Java API for XML Messaging (JAXM) Java API for XML-based RPC (JAX-RPC) Java API for XML Registries (JAXR) Long Term Java. Beans Persistence

JAXP • Java API für XML Parsers • SAX DOM und XSLT - Support

JAXP • Java API für XML Parsers • SAX DOM und XSLT - Support • Erlaubt „einfaches“ wechseln von Parsern ohne Codeänderung

JAXB • Java. TM Architecture for XML Binding • Early Access Release • Ermöglicht

JAXB • Java. TM Architecture for XML Binding • Early Access Release • Ermöglicht es aus XML Schema Klassen zu generieren. • Klassen kümmern sich dann um die Formatierung und das Parsen • Meist effizienter als DOM und SAX

SAX - How to. . . • • Instanziere XMLParser, der das XMLReader Interface

SAX - How to. . . • • Instanziere XMLParser, der das XMLReader Interface implementiert hat parser. parse (filename) lädt und parst eine Datei dabei catch IOException. und SAXException. implementiere einen Content-Handler – optional noch DTDHandler und – Entity. Resolver

Content Handler • org. xml. sax. Content. Handler • Benötigt Locator und Attributes Klassen

Content Handler • org. xml. sax. Content. Handler • Benötigt Locator und Attributes Klassen • Wichtige Methoden – start. Document(. . . ), end. Document(. . . ) – start. Element(. . . ), end. Element(. . . ) – characters(. . . ) – ignorable. Whitespace(. . . ) – set. Document. Locator(. . . )

Locator • Zeigt an, an welcher Stelle im XML File ein Event aufgetreten ist

Locator • Zeigt an, an welcher Stelle im XML File ein Event aufgetreten ist • Aktuelle Location ist nur zur Laufzeit gültig • Will man es später benutzen, sollte man den Locator zwischenspeichern. • . . . private Locator locator public void set. Document. Locator (Locator locator) { this. locator = locator; }

Start und Ende eines Dokuments • Das Event start. Document ereignet sich um den

Start und Ende eines Dokuments • Das Event start. Document ereignet sich um den wirklichen Beginn des Parsens anzuzeigen. • Es ist das erste Event das stattfindet (Außer: set. Document. Locator() • end. Document ist das allerletzte • Beide Events feuern SAXExceptions

Namespace Callbacks z. B <root> <element 1> <my. Namespace: element 2 xmlns: my. Namespace=„http:

Namespace Callbacks z. B <root> <element 1> <my. Namespace: element 2 xmlns: my. Namespace=„http: . . . “> <my. Namespace: element 3>Hallo </my. Namespace: element 3> </my. Namespace: element 2 > </element 1> </root> Ein Namespace kann entweder für das ganze Dokument oder für einen Teil definiert werden start. Prefix. Mapping gibt den Start an start. Prefix. Mapping logischerweise das Ende des Bereichs

Elemente • Elemente werden indentifiziert • Attribute werden aufgelistet • Die nächste Information ist

Elemente • Elemente werden indentifiziert • Attribute werden aufgelistet • Die nächste Information ist Text oder weitere Elemente

Element Daten • characters(char[] ch, int start, int length) • Verschiedene Parser splitten Text

Element Daten • characters(char[] ch, int start, int length) • Verschiedene Parser splitten Text auch mal und schicken Ihn in einzelnen Stücken • char Array ist offen für eine Erweiterung der SAX Api, bei der ein Vorauslesen von Daten denkbar wäre

Leerzeichen (Whitespace) • ignorable. Whitespace(char[] , int) • enthält die formatierenden Leerzeichen und Zeilenumbrüchen,

Leerzeichen (Whitespace) • ignorable. Whitespace(char[] , int) • enthält die formatierenden Leerzeichen und Zeilenumbrüchen, die benutzt werden um den Text lesbarer zu gestalten.

skipped Entities • Wird nur von ganz speziellen Parsern aufgerufen, da die meisten die

skipped Entities • Wird nur von ganz speziellen Parsern aufgerufen, da die meisten die Entities auflösen

SAX 20 Extensions • Optionale Erweiterungen für Parser – Decl. Handler (DTD Parsing) –

SAX 20 Extensions • Optionale Erweiterungen für Parser – Decl. Handler (DTD Parsing) – Lexical. Handler (Kommentare und CDATA)

Fehlerbehandlung – org, xml. sax. Error. Handler – org. xml. sax. Sax. Parse. Exception

Fehlerbehandlung – org, xml. sax. Error. Handler – org. xml. sax. Sax. Parse. Exception • Sax Fehler Meldungen – Warning – Error – Fatal Error • Durch feuern einer SAXException in der Fehlercallback - funktion kann der Parsevorgang beendet werden.

Parser - Warnings • Meist fehlende Definitionen aus der DTD o. ä • Definiert

Parser - Warnings • Meist fehlende Definitionen aus der DTD o. ä • Definiert in der XML 1. 0 Spezifikation – z. B: At user option, an XML processor may issue a warning when a declaration mentions an element type for which no declaration is provided, but this is not an error. – z. B. At user option, an XML processor may issue a warning if attributes are declared for an element type not itself declared, but this is not an error.

Non-Fatal Errors • Es ist ein Fehler aufgetreten, bei dem das Dokument den XML

Non-Fatal Errors • Es ist ein Fehler aufgetreten, bei dem das Dokument den XML Regeln wiederspricht, doch der normale Parse-Vorgang fortgesetzt werden kann. • Tritt meist nur beim Validieren auf. • Ein XML Dokument, das der DTD widerspricht ist trotzdem kein fatal Error.

Fatal Error • Sollte immer zum Parse-Abbruch führen, da nur wirklich schwere Fehler erzeugt

Fatal Error • Sollte immer zum Parse-Abbruch führen, da nur wirklich schwere Fehler erzeugt werden. • Falsche DTD Sysntax gibt auch einen Fatal Error

SAXParser. Factory public abstract SAXParser. Factory { public static SAXParser. Factory new. Instance() public

SAXParser. Factory public abstract SAXParser. Factory { public static SAXParser. Factory new. Instance() public abstract SAXParser new. SAXParser () throws Parser. Configuration. Exception, SAXException; public void set. Namespace. Aware (boolean awareness); public void set. Validating (boolean validating); . . . public abstract void set. Feature (String name, boolean value) public abstract boolean get. Feature (String name) }

Bsp: Xerces Features • http: //xml. apache. org/xerces-j/features. html

Bsp: Xerces Features • http: //xml. apache. org/xerces-j/features. html

interface Attributes (collection) für SAX Ersetzt und implementiert Attribute. List • This interface allows

interface Attributes (collection) für SAX Ersetzt und implementiert Attribute. List • This interface allows access to a list of attributes in three different ways: by attribute index; by Namespace-qualified name; or by qualified (prefixed) name. • • int get. Index(java. lang. String q. Name) int get. Length() java. lang. String get. Local. Name(int index) java. lang. String get. QName(int index) java. lang. String get. Type(int index) java. lang. String get. URI(int index) java. lang. String get. Value(java. lang. String q. Name) • Nicht mehr gültig nach Callbackende

DOM Parser • Erzeugt einen DOM Tree • import org. apache. xerces. parsers. DOMParser;

DOM Parser • Erzeugt einen DOM Tree • import org. apache. xerces. parsers. DOMParser; – Xerces bietet DOM und SAX • parser. parse • alte Versionen haben beim Parsen ein Document Object geliefert • Vereinheitlichung; heute mit get. Document();

Was für ein Node-Type • (Node) node. get. Node. Type() • Klasse org. w

Was für ein Node-Type • (Node) node. get. Node. Type() • Klasse org. w 3 c. dom. Node • • • • MÖGLICHE WERTE static short ATTRIBUTE_NODE static short CDATA_SECTION_NODE static short COMMENT_NODE static short DOCUMENT_FRAGMENT_NODE static short DOCUMENT_TYPE_NODE static short ELEMENT_NODE static short ENTITY_REFERENCE_NODE static short NOTATION_NODE static short PROCESSING_INSTRUCTION_NODE static short TEXT_NODE

DOCUMENT_NODE • Document ist eine Erweiterung der Node selbst. • Enthält DTD und andere

DOCUMENT_NODE • Document ist eine Erweiterung der Node selbst. • Enthält DTD und andere Elemente • Root. Node kann davon gebildet werden mit doc. get. Document. Element()

DOM element • besteht aus Name, Attribut und Wert – name : get. Node.

DOM element • besteht aus Name, Attribut und Wert – name : get. Node. Name() • Hat evtl. noch Nachkommen – public Node. List get. Child. Nodes() • Für XML to XML gilt folgende Ausgabe – – < name atributliste > Nachkommen oder Wert </name>

collection Node. List • Was sagt die Documentation The Node. List interface provides the

collection Node. List • Was sagt die Documentation The Node. List interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. Node. List objects in the DOM are live. The items in the Node. List are accessible via an integral index, starting from 0. int get. Length() Anzahl der Nodes in der Liste • Node item(int index) gibt den Node aus der Liste zurück • nodelist = node. get. Child. Nodes(); • Aber Vorsicht : Keine normale Collection

Attribute auflisten • Rückgabe über (Node). get. Attributes () • Rückgabetyp: interface Named. Node.

Attribute auflisten • Rückgabe über (Node). get. Attributes () • Rückgabetyp: interface Named. Node. Map – Ist Liste von Node : mit item (index) Zugriff auf einen Attribut. Knoten

Ausgabe per Transform (JAXP) • DOMSource – Acts as a holder for a transformation

Ausgabe per Transform (JAXP) • DOMSource – Acts as a holder for a transformation Source tree in the form of a Document Object Model (DOM) tree. • Transformer. Factory. new. Transformer erzeugt : • Transform – An instance of this abstract class can transform a source tree into a result tree. – Transform. transform • transform(Source xml. Source, Result output. Target) – Process the source tree to the output result. • Result – DOMResult oder SAXResult oder Stream. Result

JDOM • komplett JAVA 2 basierte API • nur für JAVA • kann auch

JDOM • komplett JAVA 2 basierte API • nur für JAVA • kann auch andere Formate als XML verarbeiten • folgt bekannten JAVA Regeln • kaum Interfaces, so ist es z. B einfach möglich sofort ein Document ohne Parser zu erzeugen • Eigener DOM Tree

SAX, DOM oder JDOM? ? ? • DOM kann in jeder Sprache benutzt werden

SAX, DOM oder JDOM? ? ? • DOM kann in jeder Sprache benutzt werden und ist allgemeingültig • SAX braucht nicht das ganze Dokument erst in den Speicher zu laden. • JDOM benötigt das Dokument nicht vollständig im Speicher, doch arbeitet nicht mit Events. Java-typischer.

3 Wege zum JDOM Document • Direkt von einem DOM mittels DOMBuilder Class •

3 Wege zum JDOM Document • Direkt von einem DOM mittels DOMBuilder Class • Indirekt über SAX mittels SAXBuilder Class (Bevorzugte Weg) • Mittels JDOM Klassen (z. B für neue JDOMs)

Output von JDOM • als DOM • als SAX Events • File oder Stream

Output von JDOM • als DOM • als SAX Events • File oder Stream (xml Dokument)

JDOM Packages • • org. jdom input output DOM Adapters

JDOM Packages • • org. jdom input output DOM Adapters

Übungen • SAX: Schreibe eine Funktion, die Fehler in einem Protokoll ablegt. ! Achtung:

Übungen • SAX: Schreibe eine Funktion, die Fehler in einem Protokoll ablegt. ! Achtung: Was passiert, Wenn Log nicht geschrieben werden kann? • VCard Application • DOM: Lese Datei ein - Füge einen Datensatz hinzu und schreibe Ergebnis wieder in Datei. • Erzeugen eines JTree aus einem JDOM Tree. Jeder Knoten wird ein Vector Element. Nur eine einfache Liste. Kein vollständiger Baum. • Erzeuge eine DTD aus einer XML Datei (SAX)