1 / 49

E-Business und E-Service

E-Business und E-Service. DOM-Bearbeitung von XML Norbert Helminger 26. November 2001. Gliederung. Einleitung: Was ist DOM? Erzeugen eines DOM-Objektes DOM-Baumstruktur Methoden zum Lesen der Attribute zum Navigieren im Baum zum Verändern des Baumes Kritikpunkte und Alternativen.

Download Presentation

E-Business und E-Service

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. E-Business und E-Service DOM-Bearbeitung von XML Norbert Helminger 26. November 2001

  2. Gliederung • Einleitung: Was ist DOM? • Erzeugen eines DOM-Objektes • DOM-Baumstruktur • Methoden • zum Lesen der Attribute • zum Navigieren im Baum • zum Verändern des Baumes • Kritikpunkte und Alternativen Norbert Helminger

  3. Was ist das Document Object Model (DOM)? • standardisiertes Objektmodell für XML-Dokumente • Abstraktion des XML-Infosets auf ein Objektmodell • Satz von Schnittstellen, der ein XML-Dokument in einer Baumstruktur darstellt • standardisiertes API für die Verarbeitung von XML-Dokumenten (W3C-DOM-Arbeitsgruppe) Norbert Helminger

  4. Was kann DOM? • definiert logische Struktur eines Dokuments • definiert die Möglichkeiten des Zugriffs und der Manipulation • managed die Daten eines XML-Dokuments • abstrahiert die eckigen Klammern und die Zeichenreferenzen des Serialisierungsformats • kann mit jeder Programmiersprache verwendet werden Norbert Helminger

  5. Arbeitsweise von DOM • liest gesamtes XML-Dokument auf einmal ein (mit Hilfe eines Parsers) • teilt es in Objekte in einer Art Baumstruktur auf • behält gesamtes Dokument im Speicher • kann auf beliebige Objekte zugreifen • kann das Dokument beliebig verändern Norbert Helminger

  6. Beispiel eines XML-Dokuments <?xml version=„1.0“?> <?order alpha ascending?> <art xmlns=‚http://www.art.org/schemas/art‘> <period name=„Renaissance“> <artist>Leonardo da Vinci</artist> <artist>Michelangelo</artist> <artist>Donatello</artist> </period> <!-- insert period here --> </art> Norbert Helminger

  7. DOM-Struktur des Beispiels Wurzelknoten Dokument Wurzelelementknoten (Dokumentelement) ProcessingInstruction Element Element Kommentar Attr Element Element Element Text Text Text Text Norbert Helminger

  8. Gliederung • Einleitung: Was ist DOM? • Erzeugen eines DOM-Objektes • DOM-Baumstruktur • Methoden • zum Lesen der Attribute • zum Navigieren im Baum • zum Verändern des Baumes • Kritikpunkte und Alternativen Norbert Helminger

  9. Erzeugen eines DOM-Objektes • abstrakte Schnittstelle:kein new-Aufruf möglich • Implementierung der DOM-Schnittstelle muss ein Objekt einer DOMImplementation zur Verfügung stellen • Aufruf der Methoden createDocument bzw. createDocumentType Norbert Helminger

  10. Erzeugen eines Dokuments import org.w3c.dom.*; Document create() { DOMImplementation impl = loadDOM(); DocumentType dtd = impl.createDocumentType( “foo:bar”, “-//FooBar//”, “foo.dtd”); return impl.createDocument(“http://foo.com/schema/”, “foo:bar”, dtd); } • anschließend können dem Dokument Objekte hinzugefügt werden Norbert Helminger

  11. Einlesen eines XML-Dokuments • mit Hilfe eines DOM-Parsers • ganzes XML-Dokument kann automatisch in ein DOM-Objekt umgewandelt werden parser.parse(xmlfile); Document doc = parser.getDocument(); Norbert Helminger

  12. Gliederung • Einleitung: Was ist DOM? • Erzeugen eines DOM-Objektes • DOM-Baumstruktur • Methoden • zum Lesen der Attribute • zum Navigieren im Baum • zum Verändern des Baumes • Kritikpunkte und Alternativen Norbert Helminger

  13. Baumstruktur von DOM • Basisknoten Node • alle Knoten sind von diesem abgeleitet • definiert grundlegende Funktionalität (Attribute, Methoden und Konstanten) aller Knotentypen • Nachteil: einige Operationen nicht auf jeden Knotentyp anwendbar Norbert Helminger

  14. DOM-Schnittstellen <<interface>> EntityReference <<interface>> Element <<interface>> Attr <<interface>> Document <<interface>> Node +getAttributeNS() +getAttributeNodeNS() +setAttributeNS() +setAttributeNodeNS() +removeAttributeNS() +removeAttributeNodeNS() +hasAttributeNS() +getElementsByTagNameNS() +getTagName() +getSpecified() +getOwnerElement() +setValue() +getValue() +getName() +getDoctype() +getDocumentElement() +createElementNS() +createElement() +createDocumentFragment() +createComment() +createCDATASection() +createProcessingInstruction() +createAttributeNS() +createAttribute() +createEntityReference() +getElementByTagNameNS() +getElementsByTagName() +importNode() +getElementById() +getNodeType() +getNodeName() +getNamespaceURI() +getPrefix() +getLocalName() +getNodeValue() +getParentNode() +getChildNodes() +getFirstChild() +getLastChild() +getPreviousSibling() +getNextSibling() +getAttributes() +getOwnerDocument() +insertBefore() +replaceChild() +removeChild() +appendChild() +hasChildNodes() +cloneNodes() +supports() <<interface>> Entity +getSystemId() +getPublicId() +getNotationName() <<interface>> Notation +getSystemId() +getPublicId() <<interface>> ProcessingInstruction <<interface>> DOMImplementation +getTarget() +getData() +setData() <<interface>> DocumentFragment <<interface>> CDATASection +hasFeature() +createDocument() +createDocumentType() +getSystemId() +getPublicId() <<interface>> CharacterData <<interface>> NamedNodeMap <<interface>> NodeList <<interface>> Text +getData() +getLength() +substringData() +setData() +appendData() +insertData() +deleteData() +replaceData() <<interface>> DocumentType +getNamedItem() +getNamedItemNS() +setNamedItem() +setNamedItemNS() +removeNamedItem() +removeNamedItemNS() +item() +item() +length() +splitText() <<interface>> Comment +getName() +getEntities() +setNotations() +getPublicId() +getSystemId() +getInternalSubset()

  15. Node Document Element CharacterData Text CDATASection Comment Attr Entity ProcessingInstruction DocumentType Knotentypen Norbert Helminger

  16. Basisknoten (Node) • Attribute • nodeType: • für jeden Knotentypen eine eigene Konstante (z.B. ELEMENT_NODE) • Kompatibilitätsprüfung • nodeName, namespaceURI, localName, prefix:zur Unterstützung der zugewiesenen Objektnamen • nodeValue: Wert des Knoten • ownerDocument: Referenz auf das Dokument • parentNode, firstChild ... benachbarte Knoten • Methoden zum Lesen, Navigieren und Verändern Norbert Helminger

  17. Dokumentknoten (Document) • Wurzelknoten • Fabrik für neue Knoten:createElement(), createComment() ... • hat zwei Unterknoten: • Wurzelelement des Dokuments • Knoten des Dokumenttyps Norbert Helminger

  18. Elementknoten (Element) • einzelne Tags des XML-Dokuments: • Methoden zum Verändern der Attribute • Zugriff auf alle Unterelemente eines Tagnamens: getElementsByTagName(namespaceURI, localname) • Beispiel: <artist> Norbert Helminger

  19. CharacterData-Knoten • Basisschnittstelle für Text-, CDATASection- und Comment-Knoten • grundlegende Methoden zur Textbearbeitung • keine Ausprägung in einem XML-Dokument Norbert Helminger

  20. Textknoten (Text) • häufigster CharacterData-Knoten • repräsentiert den Zeicheninhalt eines Elements bzw. Attributs • darf kein Markup enthalten • Methode normalize():keine angrenzenden Textknoten • Beispiel: Leonardo da Vinci Norbert Helminger

  21. #document normalize Element #text hello world Beispiel Text.normalize() #document Element #text #text #text hello wo rld Norbert Helminger

  22. CDATASection-/Comment- Knoten • CDATASection: • Unterschnittstelle von Text • kann Markup enthalten • Comment: • erweitert CharacterData • repräsentiert Kommentare • Beispiel: <!-- insert period here--> Norbert Helminger

  23. Attributknoten (Attr) • beinhalten variable = value Paare eines Elements • existieren nur im Kontext des Tags • ownerElement: zugehöriger Elementknoten • parent == null • Beispiel: name = „Renaissance“ Norbert Helminger

  24. Entitätsknoten (Entity) • Speichereinheiten, die Inhalte oder Inhaltsbeschreibungen enthalten • bei mehrmaligem Vorkommen • können nur gelesen werden • werden im DocumentType gespeichert • verkomplizieren Abarbeitung von XML-Dokumenten Norbert Helminger

  25. ProcessingInstruction-Knoten • am Beginn der XML-Datei • zur Kontrolle von externen Programmen • zum Ordnen von Elementen • Beispiel: <?order alpha ascending?> Norbert Helminger

  26. Dokumenttypknoten (DocumentType) • Platzhalter für die DTD • Liste von Entitäten und Notationen: NamedNodeMap • Attribut der Document-Schnittstelle Norbert Helminger

  27. DOM-Struktur des Beispiels #document Knotentypen Dokument art order Element alpha ascending period #comment name Attr insert period here artist artist artist #text Text Renaissance #text #text #text PI/Kommentar Leonardo da Vinci Michelangelo Donatello Norbert Helminger

  28. Beziehungen zwischen Knoten • Attribute parentNode, firstChild ... definieren die Baumstruktur • parent/child-Attribute folgen lebendig jeder Änderung im Baum  dynamische Anpassung der Attribute  Vorsicht bei Operationen am Baum Norbert Helminger

  29. Eltern-Kinder-Beziehungen #document ownerDocument parentNode art Attribute (ungeordnet) period period period date-range name previousSibling nextSibling #text #text artist artist artist children (geordnet) firstChild lastChild Norbert Helminger

  30. Gliederung • Einleitung: Was ist DOM? • Erzeugen eines DOM-Objektes • DOM-Baumstruktur • Methoden • zum Lesen der Attribute • zum Navigieren im Baum • zum Verändern des Baumes • Kritikpunkte und Alternativen Norbert Helminger

  31. Methoden zum Lesen der Attribute • getNodeType • getNodeName • getNamespaceURI • getPrefix • getLocalName • getNodeValue • getOwnerDocument • getAttributes Norbert Helminger

  32. Methoden zum Navigieren • getParentNode • getChildNodes • hasChildNodes • getFirstChild • getLastChild • getPreviousSibling • getNextSibling Norbert Helminger

  33. Baum durchlaufen • keine Methode zum Durchlaufen des Baumes void traverseTree(Node current) { myProcessNode(current); for (Node child = current.getFirstChild(); child != null; child = child.getNextSibling() ) traverseTree(child); } • Durchlaufen in die andere Richtung void traverseTreeReverse(Node current) { for (Node child = current.getLastChild(); child != null; child = child.getPreviousSibling() ) traverseTreeReverse(child); myProcessNode(current); } Norbert Helminger

  34. Baum durchlaufen 1 #document 2 art 3 6 8 9 period period period period 7 artist artist artist artist artist artist 4 5 10 11 12 1, 2, 3 ... Abarbeitungsreihenfolge der Knoten in der Methode traverseTree Norbert Helminger

  35. Methoden zum Verändern • appendChild • insertBefore • replaceChild • removeChild • cloneNode Norbert Helminger

  36. Einfügen von neuen Knoten • appendChild(Node newChild)fügt am Ende der Liste der Tochterknoten einen neuen Knoten ein • insertBefore(Node newChild, Node refChild)fügt einen neuen Knoten vor dem Referenzknoten ein • bei erneutem Einfügen eines bereits vorhan-denen Knotens wird dieser nur verschoben Norbert Helminger

  37. Beispiel Einfügen import org.w3c.dom.*; void addTwoPeriods(Document doc, Node art) { Node newChild1 = doc.createElementNS( “http://www.art.org/schemas/art”, “period”); art.appendChild(newChild1); Node newChild2 = doc.createElementNS( “http://www.art.org/schemas/art”, “period”); Node pos = art.getFirstChild().getNextSibling(); Node insertedNode = art.insertBefore(newChild2, pos); assert(newChild2 == insertedNode); assert(insertedNode == art.getChildNodes().item(1)); } Norbert Helminger

  38. #document art period period period period child1 newChild1 (insertBefore) child2 newChild2 (appendChild) Beispiel Einfügen #document art period period child1 child2 Norbert Helminger

  39. Ersetzen bzw. Löschen von Knoten • replaceChild(Node newChild, Node oldChild)kombiniert Einfügen und Löschen eines Knotens • removeChild(Node oldChild)entfernt einen Knoten aus dem Dokument Norbert Helminger

  40. Beispiel Ersetzen/Löschen import org.w3c.dom.*; void removeAndReplace(Document doc, Node art) { Node newChild = doc.createElementNS( “http://www.art.org/schemas/art”, “period”); art.replaceChild(newChild, art.getFirstChild()); art.removeChild(art.getLastChild()); } Norbert Helminger

  41. #document #document art art replaceChild removeChild period period period newChild child2 newChild Beispiel Ersetzen/Löschen #document art period period child1 child2 Norbert Helminger

  42. Duplizieren von Knoten • cloneNode(boolean deep) • liefert eine exakte Kopie des Knotens • deep-Parameter true: Kopie inklusive Tochterknoten import org.w3c.dom.*; void cloneLastPeriod(Node art) { Node clone = art.getLastChild().cloneNode(true); art.appendChild(clone); } Norbert Helminger

  43. appendChild period cloneNode artist artist Beispiel Duplizieren #document art period artist artist Norbert Helminger

  44. Gliederung • Einleitung: Was ist DOM? • Erzeugen eines DOM-Objektes • DOM-Baumstruktur • Methoden • zum Lesen der Attribute • zum Navigieren im Baum • zum Verändern des Baumes • Kritikpunkte und Alternativen Norbert Helminger

  45. Kritikpunkte an DOM • gesamtes Dokument im Speicher • keine Ein- bzw. Ausgabeoperationen • gibt auch Objekte, die zwar das Interface implementieren, sonst aber wenig machen  Probleme mit der Performance bei größeren Dokumenten Norbert Helminger

  46. Alternative SAX • Simple API for XML • Menge von Streaming-Schnittstellen, die ein XML-Dokument in eine lineare Sequenz bekannter Methodenaufrufe zerlegen • XML-Dokument nur einmal durchlaufen • XML-Dokument dem gewünschten Output sehr ähnlich Norbert Helminger

  47. Wann soll DOM verwendet werden? • XML-Dokument in einer Baumstruktur anzeigen • Elemente dem Dokument hinzugefügt • ausreichend Hauptspeicher • Verarbeitungsgeschwindigkeit ist nicht so wichtig Norbert Helminger

  48. Zusammenfassung • Aufbau einer DOM-Baumstruktur • Methoden zum Lesen der Attribute • Methoden zum Navigieren im Baum • Methoden zum Verändern des Baums • Performance-Probleme Norbert Helminger

  49. Literaturangaben • Don Box, Aaron Skonnard, John Lam: Essential XML - XML für die Softwareentwicklung, Addison-Wesley, 2001. • Elke Niedermair, Michael Niedermair: Das große Buch XML, Data Becker, Düsseldorf, 2001. • Mark Johnson: Programming XML in Java, Part 3 - DOMination, July 2000, http://www.javaworld.com/jw-07-2000/jw-0707-xmldom.html. • Philippe Le Hégaret: What is the Document Object Model? September 2001, www.w3.org/DOM/. Norbert Helminger

More Related