Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

E-Business und E-Service DOM-Bearbeitung von XML Norbert Helminger 26. November 2001.

Ähnliche Präsentationen


Präsentation zum Thema: "E-Business und E-Service DOM-Bearbeitung von XML Norbert Helminger 26. November 2001."—  Präsentation transkript:

1 E-Business und E-Service DOM-Bearbeitung von XML Norbert Helminger 26. November 2001

2 Norbert Helminger2 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

3 Norbert Helminger3 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)

4 Norbert Helminger4 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

5 Norbert Helminger5 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

6 Norbert Helminger6 Beispiel eines XML-Dokuments Leonardo da Vinci Michelangelo Donatello

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

8 Norbert Helminger8 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

9 Norbert Helminger9 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

10 Norbert Helminger10 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

11 Norbert Helminger11 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();

12 Norbert Helminger12 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

13 Norbert Helminger13 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

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

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

16 Norbert Helminger16 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

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

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

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

20 Norbert Helminger20 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

21 Norbert Helminger21 Beispiel Text.normalize() #document Element #text hello world #document Element #text hello world normalize

22 Norbert Helminger22 CDATASection-/Comment- Knoten CDATASection: Unterschnittstelle von Text kann Markup enthalten Comment: erweitert CharacterData repräsentiert Kommentare Beispiel:

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

24 Norbert Helminger24 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

25 Norbert Helminger25 ProcessingInstruction-Knoten am Beginn der XML-Datei zur Kontrolle von externen Programmen zum Ordnen von Elementen Beispiel:

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

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

28 Norbert Helminger28 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

29 Norbert Helminger29 Eltern-Kinder-Beziehungen artist period artist date-range #text period name #text parentNode previousSiblingnextSibling ownerDocument children (geordnet) firstChildlastChild Attribute (ungeordnet) #document art

30 Norbert Helminger30 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

31 Norbert Helminger31 Methoden zum Lesen der Attribute getNodeType getNodeName getNamespaceURI getPrefix getLocalName getNodeValue getOwnerDocument getAttributes

32 Norbert Helminger32 Methoden zum Navigieren getParentNode getChildNodes hasChildNodes getFirstChild getLastChild getPreviousSibling getNextSibling

33 Norbert Helminger33 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); }

34 Norbert Helminger34 Baum durchlaufen period #document period art period artist , 2, 3... Abarbeitungsreihenfolge der Knoten in der Methode traverseTree

35 Norbert Helminger35 Methoden zum Verändern appendChild insertBefore replaceChild removeChild cloneNode

36 Norbert Helminger36 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

37 Norbert Helminger37 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( period); Node pos = art.getFirstChild().getNextSibling(); Node insertedNode = art.insertBefore(newChild2, pos); assert(newChild2 == insertedNode); assert(insertedNode == art.getChildNodes().item(1)); }

38 Norbert Helminger38 Beispiel Einfügen #document period art period child1child2 period newChild1 (insertBefore) period #document period art child1child2 period newChild2 (appendChild)

39 Norbert Helminger39 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

40 Norbert Helminger40 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()); }

41 Norbert Helminger41 Beispiel Ersetzen/Löschen #document period art period child1child2 #document period art period newChildchild2 #document art period newChild replaceChildremoveChild

42 Norbert Helminger42 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); }

43 Norbert Helminger43 Beispiel Duplizieren #document artist period artist period artist art cloneNode appendChild

44 Norbert Helminger44 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

45 Norbert Helminger45 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

46 Norbert Helminger46 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

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

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

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


Herunterladen ppt "E-Business und E-Service DOM-Bearbeitung von XML Norbert Helminger 26. November 2001."

Ähnliche Präsentationen


Google-Anzeigen