Document Object Model (DOM)
Level 2 HTML Specification
Gliederung
1. Einführung
Spezifikation
2. DOM Module
Levels,
Core, Überblick
3. DOM Intern
Funktionsweise,
4. DOM Level 2 HTML
Eigenschaften,
Parser
Vorteile, Beispiel
5. HTML-Elemente
HTMLDocument,
Java-Programm
1. Einführung
DOM – Die Spezifikation (1)
„Document Object Model“ =>
logisches Modell zur Darstellung von
Daten
sprach- und plattformneutral
vom W3C definierte Sammlung von
Schnittstellen zum Zugriff auf das
Modell
DOM – Die Spezifikation (2)
Anwendungen, die auf XML- oder
HTML Dokumente zugreifen können
Navigieren, Lesen, Schreiben,
Hinzufügen und Entfernen von
Dokumentinhalten
DOM – Die Spezifikation (3)
alle Objekte des Dokuments in
hierarchischer Baumstruktur
eingegliedert
werden
im DOM Knoten genannt
garantiert strukturellen
Isomorphismus
jedes
XML-Dokument besitzt eindeutige
Struktur
2. Die Module
DOM – Die Module (1)
DOM Level 1 vom W3C Konsortium
am 1. Oktober 1998 fertiggestellt
Motivation:
mehrere Firmen entwickelten
unterschiedliche Methoden, wie man auf
eine HTML Datei zugreifen kann -> Gefahr
der Sprachverwirrung
Norm, wie die unterschiedlichen Inhalte
solcher Dokumente angesprochen werden
sollen
Das Core - Modul
DOM Level 1 Core
wichtigstes
Modul (Basis für den Umgang
mit XML-Dokumenten)
Struktur eines XML - Dokuments in
Baumstruktur
DOM – Die Module (2)
DOM Level 2 am 13. November
2000 herausgegeben
berücksichtigt Konzept der Namensräume
Manipulieren von Style Informationen
DOM-Implementierungen müssen
Core oder HTML erweitern und
beliebig viele weitere Module
DOM – Die Module (3)
DOM – Die Module (4)
DOM Level 3 – Dezember 2000
Laden und Speichern
Typmodelle wie DTD
Schema mit Datenvalidierung
Document Views und Formatierung
Ereignisgruppen
3. DOM Intern
Wie funktioniert DOM?
DOM Parser (1)
DOM Parser: nach syntaktischer
Überprüfung der HTML Datei wird
diese vollständig in Form eines
Baumes (Dokumentenbaumes) im
Speicher abgebildet.
Die einzelnen Bestandteile der HTML
Datei bilden Knoten des Baumes.
DOM Parser (2)
Dadurch kann der Programmierer
ständig auf alle Teile der Datei
zugreifen und sie an beliebiger Stelle
verändern
DOM Parser (3)
DOM Parser, z.B. Xerces
import org.apache.xerces.parsers.DOMParser
Objekt der Parserklasse instantiieren
DOMParser parser = new DOMParser();
Dokument-Objekt holen
getDocument();
DOM und Java (1)
Document Object Model API
Zugriff auf Baum mit DOM API
DOM API importieren
import org.w3c.dom.*
Methoden aus dem Interface Node:
int getNodeType();
String getNodeValue();
NodeList getChildNodes();
boolean has ChildNodes();
DOM und Java (2)
Verfügbare APIs
Xerces Apache Project
JDOM www.jdom.org
JAXP
java.sun.com
www.apache.org
4. DOM Level 2 HTML
DOM Level 2 HTML (1)
Für HTML 4.0 und XHTML 1.0
Dokumente
Stützt sich auf DOM Level 2 Core (für
XML 2.0) ab, nicht kompatibel mit
DOM Level 1
DOM HTML Level 1 ursprünglich nur
für HTML 4.01 entwickelt, bevor
XHTML 1.0 spezialisiert wurde
DOM Level 2 HTML (2)
Wesentlicher Unterschied: XHTML
beachtet Groß- und Kleinschreibung,
HTML nicht.
stellt für HTML spezialisierte
Schnittstellen zur Verfügung
eigene Schnittstelle für viele HTMLTags
Vorteile (1)
Einheitliche Schnittstelle in
verschiedenen
Entwicklungsumgebungen
Logisches Objekt, das HTMLDokumente in eindeutiger Form
strukturiert
vom W3C standardisiert und
unterstützt durch Firmen wie Sun,
IBM, Microsoft
Vorteile (2)
Spezialisieren und Hinzufügen von
Funktionalität, die sich auf HTML –
Elemente bezieht
Unterstützung von
benutzerfreundlichen Mechanismen
für häufige Operationen auf HTML
Elementen
Speicher und Performance
Keine Probleme bei kleineren
Dokumenten
Bei umfangreichen Dateien
schwerfällig und langsam
=>besser viele kleine Dokumente als ein großes
Beispiel
http://www.brainjar.com/dhtml/domvi
ewer/demo.html
5. HTML Elemente
HTMLDocument
Spezialisierung von Document aus
Core
repräsentiert gesamtes HTMLDokument
<html>…</html>
title, referrer, domain, URL, body,
images, applets, links, forms,
anchors, cookie
interface HTMLDocument : Document {
attribute DOMString title;
readonly attribute DOMString referrer;
readonly attribute DOMString domain;
readonly attribute DOMString URL;
attribute HTMLElement body;
readonly attribute HTMLCollection images;
readonly attribute HTMLCollection applets;
readonly attribute HTMLCollection links;
readonly attribute HTMLCollection forms;
readonly attribute HTMLCollection anchors;
attribute DOMString cookie;
// raises(DOMException) on setting
void open();
void close();
void write(in DOMString text);
void writeln(in DOMString text);
NodeList getElementsByName(in DOMString elementName);
};
HTMLElement
Spezialisierung von Element aus Core
Elemente, die nur die Kernattribute
von HTML erweitern (z.B. Sub, Sup,
Span, Big, Small, Em, Strong, Abbr,
Dt, Noframes, Center)
id, title, lang, dir, className
interface HTMLElement : Element {
attribute DOMString
id;
attribute DOMString
title;
attribute DOMString
lang;
attribute DOMString
dir;
attribute DOMString
className;
};
HTMLCollection
entspricht NodeList von Core, Menge
von Node-Objekten
Zugriff über Index oder Namen
length, item, namedItem
interface HTMLCollection {
readonly attribute unsigned long length;
Node item(in unsigned long index);
Node namedItem (in DOMString name);
};
HTMLBodyElement
Spezialisierung von HTMLElement
repräsentiert den Körper der HTMLDatei
<body>…</body>
aLink, background, bgcolor, link, text,
vLink
interface HTMLBodyElement : HTMLElement {
attribute DOMString aLink;
attribute DOMString background;
attribute DOMString bgColor;
attribute DOMString link;
attribute DOMString text;
attribute DOMString vLink;
};
HTMLFormElement
Spezialisierung von HTMLElement
repräsentiert ein HTML-Formular
<form> … </form>
elements, length, name,
acceptCharset, action, enctype,
method, target, submit, reset
interface HTMLFormElement : HTMLElement {
readonly attribute HTMLCollection elements;
readonly attribute long length;
attribute DOMString name;
attribute DOMString acceptCharset;
attribute DOMString action;
attribute DOMString enctype;
attribute DOMString method;
attribute DOMString target;
void submit();
void reset();
};
Verwendung: Java-Programm
„ChangeBGColor“ – setzt bei
beliebigen HTML-Dokument bgcolorAttribut im Body auf Wert und
speichert dies + Textausgabe
import
import
import
import
import
import
import
java.io.*;
org.w3c.dom.*;
org.xml.sax.*;
org.w3c.dom.html.*;
org.apache.xml.serialize.*;
org.apache.html.dom.HTMLDocumentImpl;
org.apache.xerces.parsers.DOMParser;
public class ChangeBGColor {
public ChangeBGColor() { }
public static void main(String[] args) {
try {
String filename = args[0];
DOMParser parser = new DOMParser();
parser.parse(new InputSource(filename));
HTMLDocumentImpl doc =
(HTMLDocumentImpl)parser.getDocument();
HTMLBodyElement body = (HTMLBodyElement)
doc.getBody();
String color = body.getBgColor();
System.out.println ("Aktuelle Hintergrundfarbe ist
"+color+"."); color = args[1];
body.setBgColor(color);
System.out.println ("Farbe geändert zu
"+color+".");
// Document drucken
OutputFormat format = new OutputFormat (doc);
format.setLineSeparator (LineSeparator.Windows);
FileOutputStream out = new FileOutputStream
(filename);
HTMLSerializer html = new HTMLSerializer (out,
format);
html.serialize (doc);
} catch(Exception e) {
System.out.println ("Fehler beim Parsen!");
e.printStackTrace (System.out);
}}}
Vielen Dank!