Dokument-Typ

Definition von
Dokument-Typen
© Klaus Schild, XML Cearinghouse 2003
1
Lernziele
ƒ Wie kann mit einer DTD der Aufbau von XMLDokumenten eines bestimmten Typs beschrieben
werden?
ƒ Wie wird die Elementstruktur eines Dokumentes
deklariert?
ƒ Wie werden Attribute von Elementen deklariert?
ƒ Was sind die Nachteile von DTDs?
© Klaus Schild, XML Cearinghouse 2003
2
Dokument-Typen
ƒ Beschreiben den prinzipiellen Aufbau von Dokumenten
eines bestimmten Typs.
ƒ Können mit DTDs (Document Typ Definitions) spezifiziert
werden.
ƒ DTDs wurden von SGML übernommen.
ƒ DTDs benutzen Syntax, die regulären Ausdrücken
ähnlich ist.
Klasse
Objekt
Objekt
Objekt
© Klaus Schild, XML Cearinghouse 2003
DTD
XML-Dokument
XML-Dokument
XML-Dokument
3
Deklaration der Elementstruktur
<!ELEMENTcatalog
catalog(CD
(CD| |cassette
cassette| |record
record| |MP3)*>
MP3)*>
<!ELEMENT
ƒ Deklariert Element catalog
ƒ * bedeutet n Wiederholung mit n ≥ 0.
ƒ | bedeutet Auswahl.
ƒ CD, cassette, record und MP3 sind jeweils Kind-Elemente.
© Klaus Schild, XML Cearinghouse 2003
4
Deklaration der Elementstruktur
<!ELEMENTcatalog
catalog((EMPTY
EMPTY| |(catalog-item,
(catalog-item,catalog)
catalog))>
)>
<!ELEMENT
<!ELEMENTcatalog-item
catalog-item(CD
(CD| |cassette
cassette| |record
record| |MP3)>
MP3)>
<!ELEMENT
ƒ Rekursive Element-Deklarationen sind erlaubt.
ƒ EMPTY bedeutet leerer Element-Inhalt.
© Klaus Schild, XML Cearinghouse 2003
5
Deklaration der Elementstruktur
<!ELEMENTCD
CD(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
ƒ Deklariert Element „CD“
ƒ + bedeutet n Wiederholung mit n ≥ 1.
ƒ , bedeutet Sequenz: Aufeinanderfolge von Elementen
© Klaus Schild, XML Cearinghouse 2003
6
Deklaration der Elementstruktur
<!ELEMENTcatalog
catalog(CD
(CD| |cassette
cassette| |record
record| |MP3)*>
MP3)*>
<!ELEMENT
<!ELEMENTCD
CD(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
<!ELEMENTcassette
cassette(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
<!ELEMENTrecord
record(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
<!ELEMENTMP3
MP3(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
ƒ Deklariert Elemente cassette,
record und MP3
ƒ Analog zur Deklaration von CD
© Klaus Schild, XML Cearinghouse 2003
7
Deklaration der Elementstruktur
<!ELEMENTartist
artist(#PCDATA)>
(#PCDATA)>
<!ELEMENT
<!ELEMENTtitle
title(#PCDATA)>
(#PCDATA)>
<!ELEMENT
<!ELEMENTgenre
genre(#PCDATA)>
(#PCDATA)>
<!ELEMENT
<!ELEMENTdate-released
date-released(#PCDATA)>
(#PCDATA)>
<!ELEMENT
ƒ Deklariert jeweils Elemente
artist, title, genre und dateresleased.
ƒ #PCDATA bedeutet
unstrukturierter Text ohne
reservierte Symbole wie „<“
oder „>“.
© Klaus Schild, XML Cearinghouse 2003
8
Deklaration der Elementstruktur
<!ELEMENTsong
song(title,
(title,length,
length,parody)>
parody)>
<!ELEMENT
ƒ title, length und parody sind
Kind-Elemente von song.
ƒ title, length und parody
erscheinen immer in dieser
Reihenfolge.
© Klaus Schild, XML Cearinghouse 2003
9
Deklaration der Elementstruktur
<!ELEMENTlength
length(minutes,
(minutes,seconds)>
seconds)>
<!ELEMENT
<!ELEMENTminutes
minutes(#PCDATA)>
(#PCDATA)>
<!ELEMENT
<!ELEMENTseconds
seconds(#PCDATA)>
(#PCDATA)>
<!ELEMENT
ƒ minutes und seconds werden
als unstrukturierten Text
deklariert.
ƒ Datentypen wie positiveInteger
oder Integer stehen in DTDs
nicht zur Verfügung.
© Klaus Schild, XML Cearinghouse 2003
10
Deklaration der Elementstruktur
<!ELEMENTcatalog
catalog(CD
(CD| |cassette
cassette| |record
record| |MP3)*>
MP3)*>
<!ELEMENT
<!ELEMENTCD
CD(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
<!ELEMENTcassette
cassette(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
<!ELEMENTrecord
record(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
<!ELEMENTMP3
MP3(artist,
(artist,title,
title,genre,
genre,date-released,
date-released,song+)>
song+)>
<!ELEMENT
ƒ Struktur von CD, cassette, record und MP3 sind identisch.
ƒ Änderungen dieser Struktur müssen an mehreren
Stellen nachvollzogen werden.
© Klaus Schild, XML Cearinghouse 2003
11
Vermeidung von Wiederholungen
<!ELEMENTcatalog
catalog(CD
(CD| |cassette
cassette| |record
record| |MP3)*>
MP3)*>
<!ELEMENT
<!ENTITY%
%albumContentModel
albumContentModel"(artist,
"(artist,title,
title,genre,
genre,date-released,
date-released,song+)">
song+)">
<!ENTITY
<!ELEMENTCD
CD
%albumContentModel;>
<!ELEMENT
%albumContentModel;>
<!ELEMENTcassette
cassette %albumContentModel;>
%albumContentModel;>
<!ELEMENT
<!ELEMENTrecord
record
<!ELEMENT
<!ELEMENTMP3
MP3
<!ELEMENT
%albumContentModel;>
%albumContentModel;>
%albumContentModel;
%albumContentModel;
ƒ %albumContentModel; ist ein Parameter.
ƒ Allerdings nur einfache textuelle Ersetzung, keine
Vererbungshierarchien.
© Klaus Schild, XML Cearinghouse 2003
12
Primitive Datentypen
ƒ Neben den komplexen Datentypen zur Strukturierung von
Element-Inhalten, stehen drei primitive Datentypen (engl.
built-in datatypes) zu Verfügung:
ƒ #PCDATA: unstrukturierter Text ohne reservierte
Symbole.
ƒ EMPTY: Der Element-Inhalt ist leer. Das Element kann
allerdings Attribute haben.
<!ELEMENT br EMPTY>
Î <br/>
ƒ ANY: beliebige XML-Strukturen
<!ELEMENT title ANY>
© Klaus Schild, XML Cearinghouse 2003
13
Primitive Datentypen
ƒ Beachte: Elementare Datentypen, wie sie von
Programmiersprachen bekannt sind, stehen in DTDs nicht
zur Verfügung.
ƒ <!ELEMENT minutes (INTEGER)>
© Klaus Schild, XML Cearinghouse 2003
14
Zulässige Dokumente
ƒ In einem XML-Dokument
kann ein Dokument-Typ
spezifiziert werden.
ƒ Das Wurzelelement des
Dokumentes muss genau der
Struktur dieses Elementes
entsprechen, wie sie im
Dokument-Typ festgelegt ist.
ƒ In diesem Fall bezeichnet
man das Dokument als
zulässig (engl. valid).
© Klaus Schild, XML Cearinghouse 2003
15
Prüfung der Zulässigkeit
© Klaus Schild, XML Cearinghouse 2003
16
Prüfung der Zulässigkeit
© Klaus Schild, XML Cearinghouse 2003
17
Deklaration von Attributen
<!ATTLISTcatalog
catalog
<!ATTLIST
versionCDATA
CDATA#IMPLIED
#IMPLIED"1.0">
"1.0">
version
ƒ Das Element catalog hat ein Attribut mit dem Namen
version.
ƒ Außer version hat catalog keine weiteren Attribute.
ƒ Das Attribut ist vom Typ String (CDATA).
ƒ #IMPLIED: Das Attribut ist optional.
ƒ "1.0" ist der Standard-Wert.
ƒ #REQUIRED: Das Attribut ist obligatorisch.
ƒ #FIXED: Das Attribut hat immer den gleichen Wert.
© Klaus Schild, XML Cearinghouse 2003
18
Deklaration von Attributen
<!ATTLISTartist
artist
<!ATTLIST
gender(male
(male| |female)
female)"female">
"female">
gender
ƒ Das Element artist hat ein Attribut mit dem Namen
gender und keinen weiteren Atrribute.
ƒ Das Attribut hat entweder den Wert male oder female
(Aufzählungstyp).
ƒ "female" ist der Standard-Wert von gender.
© Klaus Schild, XML Cearinghouse 2003
19
Datentypen für Attribute
ƒ Neben Strings (CDATA) und Aufzählungstypen stehen im
wesentlichen folgende Datentypen zur Verfügung:
ƒ NMTOKEN: ein String, der den Namenskonventionen von
XML entspricht
ƒ NMTOKENS: ein Liste von solchen Namen, jeweils
getrennt durch ein Leerzeichen
ƒ ID: Bezeichner, der den Namenskonventionen von XML
entspricht und innerhalb des Dokumentes eindeutig ist.
ƒ IDREF: eine Referenz auf einen eindeutigen Bezeichner
ƒ IDREFS: eine Liste von solchen Referenzen
© Klaus Schild, XML Cearinghouse 2003
20
Ein Nachteil von DTDs
ƒ Reihenfolge von Kind-Elementen ist festgelegt:
<!ELEMENT song (title, length)>
ƒ Dadurch sehr starre Struktur in XML-Dokumenten!
ƒ Um Reihenfolgeunabhängigkeit zu garantieren, müssen
alle Permutationen explizit aufgezählt werden:
<!ELEMENT song ((title, length) | (title, length))>
ƒ Für n Element gibt es n! verschiedene Permutationen.
© Klaus Schild, XML Cearinghouse 2003
21
Weitere Nachteile von DTDs
ƒ keine XML-Syntax, daher eigene Parser nötig
ƒ kaum primitive Datentypen, insbesondere für ElementInhalte
ƒ keine eigenen Datentypen definierbar
ƒ keine Namensräume: Bereits existierende DTDs können
nur dann kombiniert werden, wenn es keine
Namenskonflikte gibt!
ƒ keine Vererbungshierarchien, nicht objekt-orientiert
© Klaus Schild, XML Cearinghouse 2003
22
Zusammenfassung
ƒ Dokument-Typen beschreiben den prinzipiellen Aufbau
von Dokumenten eines bestimmten Typs.
ƒ Dokument-Typen können mit Klassen und XMLDokumente mit Objekten verglichen werden.
ƒ In einem XML-Dokument kann ein bestimmter DokumentTyp spezifiziert werden.
ƒ Das Wurzelelement des Dokumentes muss dann genau
der Struktur dieses Elementes entsprechen, wie sie im
Dokument-Typ festgelegt ist.
ƒ In diesem Fall bezeichnet man das Dokument als zulässig
(engl. valid).
© Klaus Schild, XML Cearinghouse 2003
23
Zusammenfassung
ƒ Dokument-Typen können mit DTDs (Document Typ
Definitions) spezifiziert werden.
ƒ DTDs wurden von SGML übernommen.
ƒ DTDs haben entscheidende Nachteile:
ƒ keine XML-Syntax, daher eigene Parser nötig
ƒ kaum elementare Datentypen, insbesondere für ElementInhalte
ƒ keine eigenen Datentypen definierbar
ƒ keine Namensräume: DTDs können nur kombiniert
werden, wenn es keine Namenskonflikte gibt.
ƒ keine Vererbungshierarchien, nicht objekt-orientiert
© Klaus Schild, XML Cearinghouse 2003
24