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

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

Embed Size (px)

Citation preview

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

E-Business und E-Service

DOM-Bearbeitung von XML

Norbert Helminger26. November 2001

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

26.11.2001 Norbert Helminger 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

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

26.11.2001 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)

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

26.11.2001 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

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

26.11.2001 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

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

26.11.2001 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>

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

26.11.2001 Norbert Helminger 7

DOM-Struktur des Beispiels

Dokument

ProcessingInstruction

Element

Element

Element

ElementElement

KommentarAttr

Text

Text Text Text

Wurzelknoten

Wurzelelementknoten (Dokumentelement)

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

26.11.2001 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

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

26.11.2001 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

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

26.11.2001 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

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

26.11.2001 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();

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

26.11.2001 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

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

26.11.2001 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

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

<<interface>>Node

+getNodeType()+getNodeName()+getNamespaceURI()+getPrefix()+getLocalName()+getNodeValue()+getParentNode()+getChildNodes()+getFirstChild()+getLastChild()+getPreviousSibling()+getNextSibling()+getAttributes()+getOwnerDocument()+insertBefore()+replaceChild()+removeChild()+appendChild()+hasChildNodes()+cloneNodes()+supports()

<<interface>>Document

+getDoctype()+getDocumentElement()+createElementNS()+createElement()+createDocumentFragment()+createComment()+createCDATASection()+createProcessingInstruction()+createAttributeNS()+createAttribute()+createEntityReference()+getElementByTagNameNS()+getElementsByTagName()+importNode()+getElementById()

<<interface>>Attr

+getSpecified()+getOwnerElement()+setValue()+getValue()+getName()

<<interface>>Element

+getAttributeNS()+getAttributeNodeNS()+setAttributeNS()+setAttributeNodeNS()+removeAttributeNS()+removeAttributeNodeNS()+hasAttributeNS()+getElementsByTagNameNS()+getTagName()

<<interface>>EntityReference

<<interface>>Entity

+getSystemId()+getPublicId()+getNotationName()

<<interface>>Notation

+getSystemId()+getPublicId()

<<interface>>Comment

<<interface>>Text

<<interface>>CDATASection

+splitText()

<<interface>>CharacterData

+getData()+getLength()+substringData()+setData()+appendData()+insertData()+deleteData()+replaceData()

<<interface>>NodeList

+item()+length()

<<interface>>DocumentFragment

+getSystemId()+getPublicId()

<<interface>>ProcessingInstruction

+getTarget()+getData()+setData()

<<interface>>DOMImplementation

+hasFeature()+createDocument()+createDocumentType()

<<interface>>DocumentType

+getName()+getEntities()+setNotations()+getPublicId()+getSystemId()+getInternalSubset()

<<interface>>NamedNodeMap

+getNamedItem()+getNamedItemNS()+setNamedItem()+setNamedItemNS()+removeNamedItem()+removeNamedItemNS()+item()

DOM-Schnittstellen

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

26.11.2001 Norbert Helminger 15

Knotentypen

Node Document Element CharacterDat

a Text CDATASection

Comment Attr Entity ProcessingInstr

uction DocumentType

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

26.11.2001 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

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

26.11.2001 Norbert Helminger 17

Dokumentknoten (Document)

Wurzelknoten Fabrik für neue Knoten:

createElement(), createComment() ...

hat zwei Unterknoten: Wurzelelement des Dokuments Knoten des Dokumenttyps

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

26.11.2001 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>

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

26.11.2001 Norbert Helminger 19

CharacterData-Knoten

Basisschnittstelle für Text-, CDATASection- und Comment-Knoten

grundlegende Methoden zur Textbearbeitung

keine Ausprägung in einem XML-Dokument

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

26.11.2001 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

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

26.11.2001 Norbert Helminger 21

Beispiel Text.normalize()

#document

Element

#text #text #text

hello wo rld

#document

Element

#text

hello world

normalize

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

26.11.2001 Norbert Helminger 22

CDATASection-/Comment-

Knoten

CDATASection: Unterschnittstelle von Text kann Markup enthalten

Comment: erweitert CharacterData repräsentiert Kommentare Beispiel: <!-- insert period here-->

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

26.11.2001 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“

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

26.11.2001 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

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

26.11.2001 Norbert Helminger 25

ProcessingInstruction-Knoten

am Beginn der XML-Datei zur Kontrolle von externen

Programmen zum Ordnen von Elementen

Beispiel: <?order alpha ascending?>

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

26.11.2001 Norbert Helminger 26

Dokumenttypknoten (DocumentType)

Platzhalter für die DTD

Liste von Entitäten und Notationen:NamedNodeMap

Attribut der Document-Schnittstelle

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

26.11.2001 Norbert Helminger 27

DOM-Struktur des Beispiels

#document

order

artist

period

art

artistartist

#commentname

#text

#text #text #text

Dokument

Element

Attr

Text

PI/Kommentar

alpha ascending

insert period here

Leonardo da Vinci Michelangelo Donatello

Renaissance

Knotentypen

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

26.11.2001 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

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

26.11.2001 Norbert Helminger 29

Eltern-Kinder-Beziehungen

artist

period

artistartist

date-range

#text

period period

name

#text

parentNode

previousSibling nextSibling

ownerDocument

children (geordnet)

firstChild lastChild

Attribute (ungeordnet)

#document

art

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

26.11.2001 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

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

26.11.2001 Norbert Helminger 31

Methoden zum Lesen der Attribute

getNodeType getNodeName getNamespaceURI getPrefix getLocalName getNodeValue getOwnerDocument getAttributes

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

26.11.2001 Norbert Helminger 32

Methoden zum Navigieren

getParentNode getChildNodes hasChildNodes getFirstChild getLastChild getPreviousSibling getNextSibling

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

26.11.2001 Norbert Helminger 33

Baum durchlaufen keine Methode zum Durchlaufen des

Baumesvoid traverseTree(Node current) {

myProcessNode(current);for (Node child = current.getFirstChild(); child != null;

child = child.getNextSibling() ) traverseTree(child);

}

Durchlaufen in die andere Richtungvoid traverseTreeReverse(Node current) {

for (Node child = current.getLastChild(); child != null;child = child.getPreviousSibling() )

traverseTreeReverse(child);myProcessNode(current);

}

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

26.11.2001 Norbert Helminger 34

Baum durchlaufen

period

#document

period

art

period period

artist artist artistartistartist artist

1

7

6

54

3

2

12

8

1110

9

1, 2, 3 ... Abarbeitungsreihenfolge der Knoten in der Methode traverseTree

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

26.11.2001 Norbert Helminger 35

Methoden zum Verändern

appendChild insertBefore replaceChild removeChild cloneNode

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

26.11.2001 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

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

26.11.2001 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));

}

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

26.11.2001 Norbert Helminger 38

Beispiel Einfügen

#document

period

art

period

child1 child2

period

newChild1(insertBefore)

period

#document

period

art

child1 child2

period

newChild2(appendChild)

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

26.11.2001 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

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

26.11.2001 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());

}

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

26.11.2001 Norbert Helminger 41

Beispiel Ersetzen/Löschen

#document

period

art

period

child1 child2

#document

period

art

period

newChild child2

#document

art

period

newChild

replaceChild removeChild

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

26.11.2001 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);

}

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

26.11.2001 Norbert Helminger 43

Beispiel Duplizieren

#document

artist

period

artist artist

period

artist

art

cloneNode

appendChild

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

26.11.2001 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

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

26.11.2001 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

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

26.11.2001 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

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

26.11.2001 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

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

26.11.2001 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

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

26.11.2001 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/.