210 likes | 425 Views
XML und Datenbanken - XML-Prozessoren, XPath, XQuery -. Meike Klettke Universität Rostock Fakultät für Informatik und Elektrotechnik meike@informatik.uni-rostock.de www.xml-und-datenbanken.de. Inhalt. „Techniken, um XML herum“ – Möglichkeiten zur Verarbeitung von XML-Dokumenten
E N D
XML und Datenbanken - XML-Prozessoren, XPath, XQuery - Meike Klettke Universität Rostock Fakultät für Informatik und Elektrotechnik meike@informatik.uni-rostock.de www.xml-und-datenbanken.de
Inhalt „Techniken, um XML herum“ – Möglichkeiten zur Verarbeitung von XML-Dokumenten • XML-Prozessoren • Einführung • SAX (Simple API for XML) - ereignisorientierte Verarbeitung • DOM (Document Object Model) - Manipulation von Baumstrukturen • Einsatz von DOM und SAX • JDOM, … • Weiterführende Literatur
XML-Prozessoren • machen den Inhalt eines XML-Dokumentes für eine Anwendung verfügbar • Standardisierte Schnittstellen für zahlreiche Programmiersprachen (Java, Phyton, C, C++, ...) • Einbindung von Bibliotheken • Auflösen von Entities • nichtvalidierend / validierend in Bezug auf DTD oder XML Schema - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
SAX – ereignisorientierte Abarbeitung • David Megginson • durch Bestandteile des Dokumentes werden Aktionen ausgelöst • sequentielle Abarbeitung • im Anwendungspro-gramm müssen die Methoden definiert • werden, die durch Auftreten von Dokumentbestandteilen • ausgelöst werden • zustandslos startDocument() <?xml version="1.0"?> startElement("hotel", AttributeList( <hotel id= length=1, - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur {name= value= <hotelname> startElement("hotelname", null) Strand Hotel Hübner </hotelname> endElement("hotelname") <adresse> startElement("adresse", null) <ort> startElement("ort", null) Warnemünde characters(char[], start, length) </ort> endElement("ort") <telefon> . . . 0381/548230 </telefon> </adresse> endElement("adresse") endElement("hotel") </hotel> endDocument()
SAX – verfügbare Methoden • startDocument() • endDocument() • startElement(String, AttributeList) • Zugriff auf Elemente der AttributeList mit den Methoden getName(position), getType(position), getValue(position) • endElement(String) • characters(char[], int, int) • processingInstruction(string, string) • ignorableWhitespace(char[], int, int) • setDocumentLocator(Locator) • (Bestimmen der Stelle des Auftretens des jeweiligen Ereignisses, verwendbar z.B. für Nachbearbeitung des Dokumentes) - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
DOMImplementation Node NodeList NamedNodeMap Attr CharacterData Comment Text CDataSection Document DocumentFragment DocumentType Element Entity EntityReference Notation ProcessingInstruction DOM - Manipulation von Baumstrukturen Empfehlung des W3C beschreibt Schnittstellen zum Zugriff auf XML-Dokumente und zur Veränderung von Struktur und Inhalten die zugrundeliegende Implementierung und Speicherung der XML-Dokumente wird nicht definiert ! - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Methoden der Klasse: Node • Fast alle Dokumentbestandteile basieren auf dieser Klasse • Die Klasse Node enthält • Methoden zur Identifikation des Knotentypes • Methoden zur Navigation durch die Dokumentstruktur • Methoden zur Manipulation der Dokumentstruktur - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
DOM (Document Object Model) –Navigation durch das Dokument • XML-Dokument als Baum dargestellt, • Zugriff kann durch Navigation erfolgen • Manipulation des Dokumentstruktur • ebenfalls möglich - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur 1 Ausgehend vom Knoten 5 6 liefern folgende Methoden der Klasse Node die Knoten bzw. Knotenlisten als Ergebnis: 4 1 - getParentNode() 2 3 2 - getFirstChild() 3 - getLastChild() 4 - getChildren() 5 - getPreviousSibling() 6 - getNextSibling()
insertBefore (newChild, refChild) refChild newChild refChild appendChild (newChild) newChild replaceChild (newChild, oldChild) newChild oldChild removeChild (oldChild) oldChild DOM – Manipulation der Struktur Löschen, Ergänzen, Verschieben, Verändern von Dokumentanteilen Bestandteile der Schnittstelle Node - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Interface NodeList • Zur Verarbeitung von Knotenlisten steht die Klasse NodeList bereit. • NodeList speichert eine Liste von Knoten, das Ordnungskriterium der Liste ist dabei die Dokumentordnung. • Methoden der Schnittstelle NodeList sind: • item(index) zum Zugriff auf die einzelnen Knoten, dabei beginnt der Index mit 0. • getLength() liefert die Anzahl der Knoten in der Liste - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Interface NamedNodeMap • Neben der NodeList steht auch das Interface NamedNodeMap zur Verfügung. • Methoden dieser Klasse sind: • getLength() - liefert die Anzahl der Knoten in der Liste • item(index) - dient zum Zugriff auf die einzelnen Knoten der Liste • getNamedItem(name) und • removeNamedItem(name) werden zum gezielten Auslesen beziehungsweise Löschen eines Elementes Node eingesetzt. - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Die Klasse: Element • Die Informationen von Elementen können über folgende spezialisierte Methoden erfragt und manipuliert werden. • getTagName() liefert den Tagnamen eines Elementes • getAttribute(name) liefert das angegebene Attribut • setAttribute(name, value) ermöglicht das Verändern und Ergänzen von Attributen • removeAttribute(name) löscht das spezifizierte Attribut • getElementsByTagName(tagname) liefert alle Elemente des Dokumentes, die den angegebenen Elementnamen haben, bei Angabe von • getElementsByTagName(*) werden alle Elemente zurückgegeben. - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Methoden der Klasse Attribute • Attributinformationen können über die folgenden Methoden erfragt werden: • getName() gibt den Attributnamen zurück • getValue() liefert den Attributwert und • setValue(value) setzt den Attributwert. - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Methoden der Klasse Character Data • Zum Auslesen, Verändern und Setzen von Textanteilen • Methoden der Klasse Character Data: • getLength() liefert die Länge des Textanteils • getData() liefert den vollständigen Text • substringData(start,count) liefert einen Teilstring des Textes, der bei start beginnt und soviele Zeichen enthält, wie bei count angegeben ist • appendData(text) hängt den angegebenen Text an der Originaltext an • replaceData(offset,count,text) ersetzt den durch offset und count definierten Textanteil durch den angegebenen Text • insertData(offset,text) fügt an der durch offset angegebenen Stelle den Text ein • deleteData(offset,count) löscht den durch offset und count spezifizierten Textanteil - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Weitere Schnittstellen In ähnlicher Form wie für Elemente, Attribute und Character Data stehen für die anderen Knotenarten (z.B. • Processing Instructions, • Kommentare und • Entities) Schnittstellen und Methoden zur Abfragen von allen Informationen des XML-Dokumentes zur Verfügung. - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Genereller Vergleich DOM - SAX XML- DTD/ XML Schema Dokument - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur Parser DOM SAX startDocument startElement Anwendung, startElement implemen- tiert endElement Document ... Handler endDocument nach Roland Böndgen
SAX einfacher Zugriff einfach strukturierte oder gleichartig strukturierte Dokumente auch geeignet für sehr große XML-Dokumente geeignet, wenn Zugriff nur auf geringe Anteile eines Dokumentes erfolgt DOM Navigation durch Dokumentstruktur dadurch kontextabhängige Zugriffe Manipulation der Struktur Für sehr große XML-Dokumente problematisch auch Speicherungsstruktur Zum Einsatz von SAX und DOM - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
JDOM • JDOM : einfaches und effizientes Lesen, Verändern und Erzeugen von XML-Dokumenten • “Java-optimiert” • Basiert (trotz Namensähnlichkeit) nicht auf DOM • JDOM versteckt die Komplexität von XML soweit möglich, z.B.: • Elemente haben Inhalte, nicht Nachfolger-Textknoten • Auf diese kann durch die API direkt zugegriffen werden • Informationen, API, Publikationen usw. unter: www.jdom.org - Einleitung - SAX - DOM - Verwendung - JDOM - Literatur
Zusammenfassung • SAX: • sequentielle Verarbeitung von XML-Dokumenten • nicht kontextabhängig • nur lesende Zugriffe • DOM/ JDOM • Verwendung einer internen Struktur (Beschreibung dieser aber nur über Schnittstellen) • Navigation durch die Informationen des XML-Dokumenten, kontextabhängige Zugriffe möglich • Manipulation möglich • zahlreiche XML-Prozessoren existieren
Literatur XML-Prozessoren: • Informationen über SAX: • www.saxproject.org • DOM: • www.w3.org/DOM-Level-1/ • www.w3.org/DOM-Level-2/ • www.w3.org/DOM-Level-3/ XPath, XQuery: • Schöning, Lehner: XQuery, dpunkt.verlag, 2004 • www.w3.org/TR/xpath • www.w3.org/XML/Query
Verfügbare Parser • An dieser Stelle sollen keine SAX- oder DOM-Prozessoren aufgezählt werden, da die Aussagen, was sie jeweils unterstützen, schnell veralten • viel verwendet wird: Xerces • (kommentierte) Softwaresammlungen unter: • xml.coverpages.org • www.xmlsoftware.com