Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

E-Business und E-Service

Ähnliche Präsentationen


Präsentation zum Thema: "E-Business und E-Service"—  Präsentation transkript:

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=‚ <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(“ “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 ProcessingInstruction
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 Knotentypen Node Document Element CharacterData Text CDATASection
Comment Attr Entity ProcessingInstruction DocumentType 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 Beispiel Text.normalize()
#document #document Element #text hello world normalize Element #text #text #text hello wo rld Norbert Helminger

22 CDATASection-/Comment- Knoten
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 order art Element alpha ascending period #comment name Attr insert period here #text artist artist artist 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); 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, 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( “ “period”); art.appendChild(newChild1); Node newChild2 = doc.createElementNS( Node pos = art.getFirstChild().getNextSibling(); Node insertedNode = art.insertBefore(newChild2, pos); assert(newChild2 == insertedNode); assert(insertedNode == art.getChildNodes().item(1)); } Norbert Helminger

38 Beispiel Einfügen #document period #document art child1 child2
newChild2 (appendChild) art period newChild1 (insertBefore) 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( “ “period”); art.replaceChild(newChild, art.getFirstChild()); art.removeChild(art.getLastChild()); } Norbert Helminger

41 Beispiel Ersetzen/Löschen
#document #document period art newChild child2 #document art period newChild art replaceChild removeChild 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 Beispiel Duplizieren #document art appendChild period artist period
cloneNode 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, Philippe Le Hégaret: What is the Document Object Model? September 2001, Norbert Helminger


Herunterladen ppt "E-Business und E-Service"

Ähnliche Präsentationen


Google-Anzeigen