1 / 60

Seminar: XML-Verarbeitungskonzepte WS 2007/2008 Sebastian Potthoff

Seminar: XML-Verarbeitungskonzepte WS 2007/2008 Sebastian Potthoff. Agenda. XML-Grundlagen Parser APIs SAX – Simple API for XML DOM – Document Object Model StAX – Streaming API for XML Zusammenfassung XML-Anfragesprachen XPath XQuery Xcerpt Zusammenfassung. XML-Grundlagen.

karan
Télécharger la présentation

Seminar: XML-Verarbeitungskonzepte WS 2007/2008 Sebastian Potthoff

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. Seminar: XML-Verarbeitungskonzepte • WS 2007/2008 • Sebastian Potthoff

  2. Agenda • XML-Grundlagen • Parser APIs • SAX – Simple API for XML • DOM – Document Object Model • StAX – Streaming API for XML • Zusammenfassung • XML-Anfragesprachen • XPath • XQuery • Xcerpt • Zusammenfassung

  3. XML-Grundlagen • Allgemein textuelle Darstellung bekannt • Beschreibung der Daten durch Tags • Strukturierung durch Schachtelung • Wohlgeformtheit • Existenz eines Wurzelelements • Korrekte Folge von Start- und Endtags • Eindeutige Attributbezeichner innerhalb eines Tags

  4. XML Infoset • Abstrakte Sicht auf Daten • Infoset eines XML-Dokuments besteht aus Informationseinheiten (information items) • Dokumentinformationseinheit • Elementinformationseinheit • Attributinformationseinheit • Kommentarinformationseinheit

  5. Parser API

  6. Parser API • Klassifikationsmerkmale: • Pull- vs. Push-basierte Parser • Ein- vs. Mehrschritt-Parser

  7. Pull-basierte Parser-Schnittstelle • Applikation kontrolliert den Parse-Vorgang • Abruf einzelner Dokumentelemente durch die Applikation Anfrage nach nächster Element Pull-Parser Anwendung Liefert Element

  8. Push-basierte Parser-Schnittstelle • Parser kontrolliert den Parse-Vorgang • Parser benachrichtigt die Applikation mittels Ereignissen • Ereignisse sind das Auftreten von Informationseinheiten im Dokument Ruft Callback-Methode Push-Parser Anwendung

  9. Einschritt- vs. Mehrschritt-Parser • Einschritt-Parser • Jedes Dokument wird in einem Schritt verarbeitet • Mehrschritt-Parser • Das Dokument wird schrittweise verarbeitet • Schritte durch den Parser bestimmt

  10. SAX – Simple API for XML

  11. SAX: Ereignisse • ereignisorientierter Mehrschritt-Push-Parser • Parser arbeitet Quelldokument sequentiell ab • erzeugt dabei Ereignisse für die Informations Einheiten des Dokuments • Geschachtelte Strukturen werden durch Start- und End-Ereignisse signalisiert • startDocument, endDocument • startElement, endElement

  12. SAX: Signalisierung von Ereignissen an die Anwendung • Callback-Methoden werden durch den Content-Handler der Applikation implementiert • Content-Handler-Schnittstelle definiert Callback-Methoden für die versch. Ereignisse • Der Parser ruft zu jedem Ereignis eine Callback-Methode auf Applikation Parser Aufruf der Callback-Methoden SAX Parser Content Handler implementiert liest ContentHandler Interface <artikel> <author> Sebastian </author> </artikel>

  13. SAX: Bewertung • Dokument wird nicht im Speicher gehalten • Verarbeitung von großen Dokumenten möglich • Wiederholter Zugriff auf bereits verarbeitete Knoten nicht möglich • Ausschließlich lesender Zugriff

  14. DOM – Document Object Model

  15. DOM-Datenmodell • Datenmodell beschreibt Daten als Knotenhierarchie in Form eines Baums • Datenmodell ähnelt dem XML-Infoset. Terminologie weicht jedoch ab: • XML Infoset: Informationseinheiten (information items) • DOM: Knoten (Nodes)

  16. Beispiel Document <buchshop> <buch preis=„10€“> <author>Mayer</author> <titel>XML</titel> </buch> <zeitschrift> <titel>Java</titel> </zeitschrift> </buchshop> buchshop preis zeitschrift buch 10€ author titel titel XML Java Mayer

  17. DOM: Funktionsweise • DOM-Parser ist ein Einschritt-Pull-Parser • Nach Parse-Vorgang steht vollständiges Dokument als Objektstruktur im Speicher bereit • Für den Zugriff auf die Daten bietet die DOM API eine achsenorientierte Navigation

  18. DOM-Navigation • Achsenorientierte Navigation parent Kontext- knoten previousSibling nextSibling … firstChild lastChild childNodes • Zusätzlich: • Zugriff über Namen und Objektidentifizierer: • getElementByID(), getElementByTagName()

  19. DOM-Bewertung • Resourcenverbrauch: Dokument wird vollständig im Speicher gehalten • Verarbeitung von großen Dokumenten daher problematisch • Wiederholter Zugriff auf das Objektmodell möglich • Modifikationen und Schreiben von XML-Dokumente möglich

  20. StAX – Streaming API for XML

  21. StAX – Streaming API for XML • Als jüngster Ansatz zum Parsen von XML-Daten vorgestellt (2004) • Ereignisorientierte Parser meist als Push Parser umgesetzt • Gründe für Pull-basierten Parser: • Verarbeitung, wenn Applikation bereit • Struktur des Codes entspricht Struktur des XML-Dokuments • Zustandsverwaltung • Ziel: ereignisorientierter Pull-Parser • seit Java 6 Teil der Java-Standardbibliothek

  22. StAX-Übersicht • verbindet die Vorteile von SAX und DOM • Effizientes Arbeiten mit großen Dokumenten • Schreiben/Erzeugen von XML-Dokumeten • StAX gliedert sich in • Cursor-API • Iterator-API

  23. Cursor-API • logischer Cursor über einem Strom von XML-Elementen • Auf dem Strom von Ereignissen wird mit denen aus dem Iterator-Interface bekannten Methoden navigiert • In jedem von der Anwendung ausgelösten Schritt wird der Cursor von einem ereignisauslösenden Element zum Nächsten geschoben • Cursor verwaltet Ereigniseigenschaften • ressourcensparend • Ereignisauslösende Elemente: • StartDocument, EndDokument, StartElement… (vgl. SAX)

  24. Beispiel • Auszug: liefert die Namen der Startelemente • while (parser.hasNext()) { • int event = parser.next(); • if (event == XMLStreamConstants.END_DOCUMENT) { • parser.close(); • break; • } • if (event == XMLStreamConstants.START_ELEMENT) { • System.out.println(parser.getLocalName()); • } • }

  25. Iterator-API • Ereignisse und ihre Eigenschaften werden in Form von Ereignisobjekten an die Anwendung übergegeben • Verwalten vieler Objekte steigert Ressourcenbedarf • Objektorientierte Verarbeitung entspricht heutiger Programmentwicklung • Navigation zwischen Ereignissen über Methoden des Iterator-Interface

  26. Beispiel • Auszug: Suche nach einem Startelement eines ICON-Objekts • XMLEventReader reader = factory.createXMLEventReader(uri, input); • while (reader.hasNext()) { • XMLEvent event = reader.peek(); • if (event.isStartElement()) { • StartElement start = event.asStartElement(); • if (ICON.equals(start.getName())) { • System.out.println(reader.getElementText()); • break; • } • } • reader.nextEvent(); • }

  27. Schreiben • Cursor- und Iterator-API erlauben das Schreiben von Dokumenten • Zentrale Klassen: • XMLStreamWriter • XMLEventWriter

  28. Cursor-API • XMLStreamWriter writer = factory.createXMLStreamWriter( • new FileOutputStream( "c:/party.xml" )); • // Der XML-Header wird erzeugt • writer.writeStartDocument(); • // Zuerst wird das Wurzelelement mit Attribut geschrieben • writer.writeStartElement( "party" ); • writer.writeAttribute( "datum", "31.12.01" ); • // Unter dieses Element wird das Element gast mit einem Attribut erzeugt • writer.writeStartElement( "gast" ); • writer.writeAttribute( "name", "Albert Angsthase" ); • writer.writeEndElement(); • writer.writeEndElement(); • writer.writeEndDocument(); • writer.close();

  29. Iterator-API • XMLEventWriter writer = outputFactory.createXMLEventWriter( • new FileOutputStream( "c:/party.xml" )); • XMLEventFactory eventFactory = XMLEventFactory.newInstance(); • XMLEvent header = eventFactory.createStartDocument(); • XMLEvent startRoot = eventFactory.createStartElement( "", "", "party" ); • XMLEvent datumAttribut = eventFactory.createAttribute( "datum", "31.12.01" ); • XMLEvent endRoot = eventFactory.createEndElement( "", "", "party" ); • XMLEvent startGast = eventFactory.createStartElement( "", "", "gast" ); • XMLEvent name = eventFactory.createAttribute( "name", "Albert Angsthase" ); • XMLEvent endGast = eventFactory.createEndElement( "", "", "gast" ); • XMLEvent endDocument = eventFactory.createEndDocument(); • // Schreiben der Struktur • writer.add( header ); • writer.add( startRoot ); • writer.add(datumAttribut); • writer.add( startGast ); • writer.add( name ); • writer.add( endGast ); • writer.add( endRoot ); • writer.add( endDocument ); • writer.close();

  30. Bewertung • Dritte Variante auf das XML-Infoset zuzugreifen • Durch die verschiedenen API- Realisierungen flexiblerer Umgang • Je nach Wahl ähnlich performant wie SAX • Fähigkeit, Dokumente schreiben zu können

  31. Zusammenfassung

  32. XML-Anfragesprachen

  33. XML-Anfragesprachen • Entwicklung von XML-Anfragesprachen zwischen 1996 und 1998 begonnen • durch Internet- und Datenbank-Gemeinden beeinflusst • Parallele Entwicklung verschiedener Sprachen mit navigierendem (XQL) und musterbasiertem (XML-QL) Ansatz XQuery 2007 Xcerpt 2004 2000 Quilt XML-QL 1999 XQL 1998 Lorel 1997 XSLT OQL 1996 SQL

  34. XPath

  35. XPath • 1999 vom W3C vorgestellt • Grundlage für verschiedene W3C-Standards zur Adressierung von Dokumentteilen

  36. XPath-Datenmodell • Sequenz: geordnete Listen von Items, die Duplikate enthalten kann • Knoten und atomare Werte als Sequenzeinträge • Repräsentieren Baumstruktur

  37. Pfadausdrücke • Adressiert Sequenzen von Knoten • Ein Pfadausdruck besteht aus beliebig vielen Schritten, die durch Slashes „/“ getrennt werden • Jeder Schritt besteht aus drei Bestandteilen: • Achse • Knotentest • Prädikat

  38. Achsen • Achse beschreibt die Navigations-richtung vom Kontextknoten aus • Es gibt elf Achsen sowie Namensraum- und Attributachse • parent, ancestor, following-sibling…

  39. Knotentest/Prädikate • Knotentest • Namentests (name test) • Typtests (type test): • Primäre Knotentyp (principle node kind) • Spezifischer Knotentest • Prädikate • Selektion von Knoten, die das Prädikat erfüllen Beispiel: child::para[position()=1]

  40. XQuery

  41. XQuery • 1998 began die Entwicklung durch eine Arbeitsgruppe der W3C • Wichtige Randbedingung war Kompatibilität zu anderen Standards des W3C • Pfadausdrücke (XPath) wichtiges Element

  42. Die Sprache • FLWR-Audrücke • FOR • LET • WHERE • RETURN Beispiel: for $i in document("data/items.xml")//item let $p := document("data/PO.xml")//po where $i/itemno= $p//itemno return <ordered_item> {$i/description/text()} </ordered_item>

  43. Was XQuery nicht ist und nicht kann • Vorurteil: XQuery ist nicht performant genug um großen Datenmengen zu verarbeiten • XQuery umfasst keinen Update- mechanismus

  44. Musterbasierte Anfragesprachen

  45. Musterbasierte Anfragesprachen • Alternative zur verbreiteten achsenorientierten Adressierung Anfrage beschreibt an einem Beispiel (query-by-example), welche Daten ausgewertet werden sollen • Sollen verständlicher sein • Beispiel: • <address-book> • <person> • <name> • <first>Mickey</first> • <last>Mouse</last> • </name> • <phone>$PHONE</phone> • <email>$EMAIL</email> • </person> • </address-book>

  46. Xcerpt

  47. Xcerpt • 2004 von einer Forschungsgruppe der LMU München vorgestellt • Ziel: Verarbeitung verschiedener Arten von semistrukturierten Daten • format versatility • schema versatility • representational versatility

  48. Xcerpt-Die Sprache • Muster- / regelbasiert • Die Sprache gliedert sich in • Datenterme • Anfrageterme • Konstruktionsterme

  49. Xcerpt-Datenterme • Datenterme: • Erlauben die Darstellung semistrukturierter Daten • Bilden die Grundlage für Anfrageterme • Datenterme bestehen aus: • Objektidentifikatoren • Opt. Namensraumdaten • Bezeichner • un- /geordneten Liste von Attributen oder Subtermen • Geschweifete Klammer: ungeordnete Liste • Eckige Klammern: geordnete Liste • Zu jedem Datenterm gibt es eine Graphdarstellung

  50. Xcerpt-Graphdarstellung Adress-book[...] • address-book { • &o1 @ person { • name [ • first [ "Mickey" ], • last [ "Mouse" ] • ], • phone [ " 50773 "], • knows [ ^&o2 ]}, • &o2 @ person { • name [ • first [ "Donald" ], • last [ "Duck" ] • ], • knows [ ^&o1 ] • } • } Person[…] Person[…] Knows[…] Phone[…] Name[…] Knows[…] Name[…] „50773“ Last[…] First[…] First[…] Last[…] Mickey Mouse Donald Duck

More Related