Algorithmen - Einsatz beim RSA

Download Report

Transcript Algorithmen - Einsatz beim RSA

Informationsdarstellung mit XML
Klaus Becker
2007
2
Ziele und Inhalte
<?xml version="1.0" encoding="ISO-8859-1"?>
<Fortbildung>
<Titel>Informationsdarstellung mit XML</Titel>
<Ziele>
<Ziel>Einblick in XML</Ziel>
<Ziel>XML - ein Thema für den Informatikunterricht</Ziel>
<Ziel>Informatikunterricht am Puls der Zeit</Ziel>
</Ziele>
<Inhalte>
<Inhalt>Ein Blick hinter die Kulissen</Inhalt>
<Inhalt>Grundlagen von XML</Inhalt>
<Inhalt>Dokumenttypen und ihre Validierung</Inhalt>
<Inhalt>XML-basierte Sprachen</Inhalt>
<Inhalt>Exkurs: Namensräume, Formatierung, ...</Inhalt>
<Inhalt>Verarbeitung von XML-Dokumenten</Inhalt>
</Inhalte>
</Fortbildung>
3
Teil 1
Ein Blick hinter die Kulissen
4
Textverarbeitung
Mit OpenOffice wurde ein Text über den Kölner Dom erstellt und
anschließend in verschiedenen Ausgabeformaten abgespeichert ...
5
Darstellung des Textes
... als MS-Word-Datei (siehe "dom_koeln.doc"). Mit einem Text-Editor
geöffnet sieht diese Datei so aus:
6
Darstellung des Textes
... als OpenOffice-Datei (siehe "dom_koeln.odt"). Mit einem Text-Editor
geöffnet sieht diese Datei noch unverständlicher aus.
7
Darstellung des Textes
Wenn man die von OpenOffice erzeugte Datei "dom_koeln.odt" entpackt,
klärt sich einiges (siehe "content.xml").
8
Darstellung des Textes
... als DocBook-Datei (siehe "dom_koeln.xml"). Hier kann man deutlich die
Struktur des Textes ablesen.
9
Erstellung von Struktogrammen
Mit Hilfe von verschiedenen Struktogramm-Editoren wurde der Algorithmus
zur Berechnung des ggT in Struktogrammform dargestellt:
StruktEdit
NSCEdit
10
Datei-Formate zur Darstellung
StruktEdit-Datei
betrachtet mit einem
Hex-Editor
NSCEdit-Datei
betrachtet mit
einem Text-Editor
11
Automatensimulator
Das Simulationsprogramm JFlap wurde in den letzten Jahren mehrfach
überarbeitet und weiterentwickelt. Insbesondere wurde auch das
Speicherformat verändert. Zunächst sah dies so aus (JFlap40b8):
12
Automatensimulator
In den neueren Versionen sieht das so aus (JFlap40b14):
13
Aufgabe
Viele Programme speichern Daten heute im XML-Format. Um den
Speicherbedarf zu verringern, werden die Daten zusätzlich komprimiert.
Beispiel: GeoGebra
Benennen Sie eine mit GeoGebra erstellte Datei (z. B.
grenzwert_mit_streifen.ggb) geeignet um (grenzwert_mit_streifen.zip) und
entpacken Sie sie. Schauen Sie sich die entpackte Datei mit einem Editor
an.
14
Aufgabe
Lesen Sie den unten abgebildeten Text. Vergleichen die
Situation der Baumeister mit heutigen Nutzern von
digital gespeicherter Information. Welche Vorteile bietet
eine XML-basierte Darstellung?
Die Geschichte des Kölner Doms beginnt im Jahre 1248 mit der Grundsteinlegung für den
Chor, der gigantisch war für mittelalterliche Maßstäbe. Es folgten der Abriss des alten
Langhauses, die Arbeit an den Westtürmen - auch deren Ausmaße sprengten die damals
üblichen Dimensionen. Allein diese Bauarbeiten dauern drei ganze Jahrhunderte, während
derer man sich konsequent an die alten Baupläne hielt. Digital verschlüsselte Daten auf nicht
beständigen Datenträgern wären zu dem Zeitpunkt längst unlesbar gewesen.
Doch im 16. Jahrhundert kommen die Bauarbeiten am Großprojekt Dom zum Erliegen. Die
genaue Ursache ist bis heute unbekannt. Der Dom bleibt unvollendet, eine Bauruine, und
zwar ganze 300 Jahre lang. Erst zu Beginn des 19. Jahrhunderts kommt plötzlich wieder
Bewegung in das Projekt "Dom". Und noch immer existiert der mittelalterliche Bauplan. 600
Jahre ist er mittlerweile alt. Das Pergament brüchig, die Tinte vergilbt und - uncodiert. Und
damit ohne jegliche Software oder Hardware lesbar. Wäre er digital gespeichert gewesen,
wohl niemand hätte nach sechs Jahrhunderten geschafft, ihn zu lesen.
Doch mit einem Plan aus Tinte und Pergament war es kein Problem, den Dom bis zum Ende
des 19. Jahrhunderts genau so zu vollenden, wie es sich sein visionärer mittelalterlicher
Baumeister einst ausgedacht hat. (Quelle: http://www.wdr.de/tv/q21/1058.0.phtml)
15
Aufgabe
Im Ordner "Material_Datenbank" finden Sie Daten aus einer Datenbank ,
die im XML-Format exportiert worden sind.
Warum macht es Sinn, einen solchen Datenexport anzubieten?
<?xml version="1.0" encoding="utf-8" ?>
<wm-stufe1>
<!-- Tabelle begegnung -->
<begegnung>
<Team1>Deutschland</Team1>
<Team2>Costa Rica</Team2>
<Ergebnis>4:2</Ergebnis>
<Datum>2006-06-09</Datum>
<Ort>Muenchen</Ort>
</begegnung>
<begegnung>
<Team1>Polen</Team1>
<Team2>Ecuador</Team2>
<Ergebnis>0:2</Ergebnis>
<Datum>2006-06-09</Datum>
<Ort>Gelsenkirchen</Ort>
</begegnung>
...
</wm-stufe1>
16
Aufgabe
Verschaffen Sie sich einen ersten Überblick über XML. Lesen Sie sich hierzu
die Seite "XML in 10 Punkten" durch.
1. XML steht für strukturierte Daten
2. XML sieht ein wenig wie HTML aus
3. XML ist Text, aber nicht zum Lesen
4. XML ist vom Design her ausführlich
5. XML ist eine Familie von Techniken
6. XML ist neu, aber nicht so neu
7. XML überführt HTML in XHTML
8. XML ist modular
9. XML ist die Basis für RDF und das Semantic Web
10. XML ist lizenzfrei, plattformunabhängig und gut unterstützt
siehe: http://www.w3c.de/Misc/XML-in-10-Punkten.html
17
Datenrepräsentation bei Werkzeugen
GGT
Eingabe: x, y
SOLANGE y > 0
h := x mod y
x := y
y := h
Ausgabe: x
Repräsentieren
StruktEdit:
proprietäres
Format
Interpretieren
NSCEdit:
standardisiertes
Format
Repräsentieren
Interpretieren
<?xml version="1.0" encoding="UTF-8"?>
<nsc version="0.2">
<sequence>
<statement>
<text><span>Eingabe: x, y</span></text>
</statement>
<whileloop>
<text><span>SOLANGE y &gt; 0</span></text>
<sequence>
<statement>
<text><span>h := x mod y</span></text>
...
18
Datenrepräsentation mit XML
XML steht für Extensible Markup Language.
XML wird benutzt, um Daten strukturiert darzustellen.
Daten können auf ganz unterschiedliche Weise dargestellt und auch
strukturiert werden. XML bietet eine Art Standard zur Strukturierung von
Daten, den inzwischen sehr viele Werkzeuge nutzen.
NSCEdit:
standardisiertes
Format
<?xml version="1.0" encoding="UTF-8"?>
<nsc version="0.2">
<sequence>
<statement>
<text><span>Eingabe: x, y</span></text>
</statement>
<whileloop>
<text><span>SOLANGE y &gt; 0</span></text>
<sequence>
<statement>
<text><span>h := x mod y</span></text>
...
19
Teil 2
Grundlagen von XML
20
Strukturierte Darstellung v. Information
XML-Dokumente werden benutzt, um Information strukturiert darzustellen.
<?xml version="1.0" encoding="UTF-8"?>
<!--Created with JFLAP 4.0b14.-->
<structure>
<type>fa</type>
<!--The list of states.-->
<state id="0">
<x>119.0</x>
<y>101.0</y>
</state>
<state id="1">
<x>119.0</x>
<y>101.0</y>
<initial/>
<final/>
</state>
<state id="2">
<x>248.0</x>
<y>101.0</y>
</state>
<!--The list of transitions.-->
<transition>
<from>2</from>
<to>1</to>
<read>1</read>
</transition>
...
</structure>
<?xml version="1.0" encoding="UTF-8"?>
<nsc version="0.2">
<sequence>
<statement>
<text>
<span>Eingabe: x, y</span>
</text>
</statement>
<whileloop>
<text>
<span>SOLANGE y &gt; 0</span>
</text>
<sequence>
<statement>
<text>
<span>h := x mod y</span>
</text>
</statement>
...
</sequence>
</whileloop>
...
</sequence>
<text>
<span>GGT</span>
</text>
</nsc>
21
Aufgabe
Schauen Sie sich ein XML-Dokument mit einem geeigneten Browser an.
<?xml version="1.0" encoding="UTF-8"?>
<nsc version="0.2">
<sequence>
<statement>
<text>
<span>Eingabe: x, y</span>
</text>
</statement>
<whileloop>
<text>
<span>SOLANGE y &gt; 0</span>
</text>
<sequence>
<statement>
<text>
<span>h := x mod y</span>
</text>
</statement>
...
</sequence>
</whileloop>
...
</sequence>
<text>
<span>GGT</span>
</text>
</nsc>
Darstellung im
Editor
Anzeige mit
einem Browser
22
Hierarchische Baumstruktur
Die Strukturierung erfolgt in Form eines Baumes.
<?xml version="1.0" encoding="UTF-8"?>
<nsc version="0.2">
<sequence>
<statement>
<text>
<span>Eingabe: x, y</span>
</text>
</statement>
<whileloop>
<text>
<span>SOLANGE y &gt; 0</span>
</text>
<sequence>
<statement>
<text>
<span>h := x mod y</span>
</text>
</statement>
...
</sequence>
</whileloop>
...
</sequence>
<text>
<span>GGT</span>
</text>
</nsc>
Anzeige mit
einem Browser
23
Der Baum der Elemente
 Grundbausteine eines XMLDokuments sind die XML-Elemente.
 Ein (XML-) Element wird mit Hilfe
von Tags (Anfangs- und Endtag)
markiert.
 Ein Element kann selbst wieder
Elemente enthalten (Container)
oder nur noch Zeichen (eigentliche
Daten).
 Das erste Element eines XMLDokuments ist das Wurzelelement,
das alle anderen Elemente in sich
einschließt.
Wurzelelement
Element als
Container
Element mit
Zeicheninhalt
Ein XML-Dokument vermischt also Inhalte mit
Informationen über diese Inhalte (Meta-Information).
24
Tags
 Mit Hilfe von Tags werden die
verschiedenen Elemente begrenzt.
Verschiedene Tags markieren dabei
unterschiedliche Elementtypen.
 Tags werden (wie bei HTML) mit
spitzen Klammern gebildet. Die TagNamen sind (fast) frei wählbar.
 Anfangs- und Endtag müssen
immer exakt zueinander passen.
Dabei wird auf Groß- und
Kleinschreibung geachtet.
 Tags müssen korrekte
geschachtelt werden.
 Bei einem leeren Element wird i.
d. Regel eine verkürzte TagSchreibweise benutzt.
Anfangstag
Endtag
leeres Element
25
Attribute
 Elemente können mit Hilfe von
Attributen näher beschrieben
werden. Attribute können dabei
zusätzliche Informationen über den
Inhalt eines Elements liefern, ohne
selbst Teil des Inhalts zu sein.
Jedem Attribut muss ein bestimmter
Wert zugewiesen werden, der in
Anführungszeichen geschrieben
wird.
Attributwert
Attribut
26
Kommentare
 Kommentare erleichtern das Verständnis und werden
vom Browser mit angezeigt.
<?xml version="1.0" encoding="UTF-8"?>
<!--Created with JFLAP 4.0b14.-->
<structure>
<type>fa</type>
<!--The list of states.-->
<state id="0">
<x>119.0</x>
<y>101.0</y>
</state>
<state id="1">
<x>119.0</x>
<y>101.0</y>
<initial/>
<final/>
</state>
<state id="2">
<x>248.0</x>
<y>101.0</y>
</state>
<!--The list of transitions.-->
<transition>
<from>2</from>
<to>1</to>
<read>1</read>
...
</structure>
Kommentar
27
Prolog
 Ein XML-Dokument beginnt in der Regel mit dem Prolog <?xml ... ?>.
Der Prolog sollte hier stehen, um das Dokument als XML-Dokument zu
kennzeichnen.
<?xml version="1.0" encoding="UTF-8"?>
<!--Created with JFLAP 4.0b14.-->
<structure>
<type>fa</type>
<!--The list of states.-->
<state id="0">
<x>119.0</x>
<y>101.0</y>
</state>
<state id="1">
<x>119.0</x>
<y>101.0</y>
<initial/>
<final/>
</state>
<state id="2">
<x>248.0</x>
<y>101.0</y>
</state>
<!--The list of transitions.-->
<transition>
<from>2</from>
...
</structure>
 Im Prolog kann der Zeichensatz
festgelegt werden, der zur
Kodierung benutzt wird. Fehlt die
Angabe des Zeichensatzes, so wird
UTF-8 als Vorgabe benutzt. Wenn
deutsche Umlaute korrekt
dargestellt werden sollen, sollte
man den Zeichensatz ISO-8859-1
verwenden.
28
Wohlgeformtheit
Ein XML-Dokument, das alle
syntaktischen Bedingungen
erfüllt, heißt wohlgeformt.
beachte:
Nur wohlgeformte XMLDokumente werden vom Browser
in Baumform angezeigt.
wohlgeformte XML-Dokumente
29
Aufgabe
Versuchen Sie, nicht-wohlgeformte XML-Dokumente mit dem Browser
anzuzeigen. Testen Sie verschiedene Fälle:
- die Tag-Namen stimmen nicht exakt überein
- die Klammerung ist nicht korrekt
- der Attributwert fehlt / ist nicht in Anführungszeichen geschrieben
...
30
Aufgabe
Was geschieht, wenn man die Elementstruktur verändert. Lassen Sie gezielt
Tags weg bzw. verändern Sie gezielt die Baumstruktur, ohne gegen die
Syntaxregeln von XML zu verstoßen.
<?xml version="1.0" encoding="UTF-8"?>
<nsc version="0.2">
<sequence>
<statement>
<text>
<span>Eingabe: x, y</span>
</text>
</statement>
<whileloop>
<text>
<span>SOLANGE y &gt; 0</span>
</text>
<sequence>
<statement>
<text>
<span>h := x mod y</span>
</text>
</statement>
...
</sequence>
</whileloop>
...
</nsc>
weglassen
31
Aufgabe
Versuchen Sie, eine neue Anweisung im Struktogramm zur Berechnung des
GGT einzufügen (z. B. die Zuweisung h := 0 nach der Eingabe). Benutzen
Sie aber nicht die Struktogramm-Editoren, sondern versuchen Sie es direkt
im "Quelltext". Öffnen Sie anschließend den Quelltext mit dem
entsprechenden Struktogrammeditor. Welche Unterschiede zeigen sich
zwischen den verschiedenen Datenformaten? Vergleichen Sie mit der
Situation beim Bau des Kölner Doms.
32
Aufgabe
Eine Bank möchte Daten von Überweisungen mit Hilfe von XML strukturiert
darstellen. Entwerfen Sie ein passendes XML-Dokument.
33
Aufgabe
Entwickeln Sie ein XML-Dokument, mit dem man Informationen über eine
Schulklasse / ein Lehrerkollegium erfassen kann.
Aufgabe
34
Graphen treten in sehr vielen Anwendungen auf. Entwickeln Sie ein XMLDokument, mit dem man die Graph-Daten strukturiert darstellen kann.
KO
54
128
RB
28
35
MZ
BI
98
33
35
TR
AZ
36
48
116
FT
KL
48
31
SP
35
Teil 3
Dokumenttypen und ihre Validierung
36
Ungültige Dokumentenstruktur
Wenn man das Element zur
Darstellung der Struktogrammüberschrift weglässt, so wird das
Dokument weiterhin vom Browser
angezeigt. Das Dokument wird
aber nicht mehr vom
Struktogrammeditor akzeptiert, da
es nicht mehr den geforderten
Dokumenttyp hat.
Zielsetzung:
Im Folgenden sollen Verfahren
vorgestellt werden, mit denen der
Dokumenttyp präzise beschrieben
werden kann.
<?xml version="1.0" encoding="UTF-8"?>
<nsc version="0.2">
<sequence>
<statement>
<text>
<span>Eingabe: x, y</span>
</text>
</statement>
<whileloop>
<text>
<span>SOLANGE y &gt; 0</span>
</text>
<sequence>
<statement>
<text>
<span>h := x mod y</span>
</text>
</statement>
...
</sequence>
</whileloop>
<statement>
<text>
<span>Ausgabe: x</span>
</text>
</statement>
</sequence>
<text>
<span>GGT</span>
</text>
</nsc>
37
Dokumenttyp
Wir betrachten als erstes Beispiel
XML-Dokumente zur
(vereinfachten) Beschreibung
eines Lehrerkollegiums.
Ein Kollegium besteht aus Lehrerinnen
und Lehrern (mindestens eine / einer).
Im Folgenden werden mit "Lehrer" auch
Lehrerinnen erfasst.
Jeder Lehrer hat einen Namen und
Vornamen.
Jedem Lehrer ist ein Kürzel zugeordnet.
Jeder Lehrer unterrichtet mindestens ein
Fach.
Ein Lehrer kann eine oder mehrere EmailAdressen angeben.
Beschreibung des Kontextes
<?xml version="1.0" encoding="ISO-8859-1"?>
<kollegium>
<lehrer geschlecht="w">
<name>Meier</name>
<vorname>Christiane</vorname>
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
<lehrer geschlecht="m">
<name>Schmitt</name>
<vorname>Thomas</vorname>
<kuerzel>sch</kuerzel>
<fach>Latein</fach>
<fach>Musik</fach>
<fach>Philosophie</fach>
</lehrer>
<lehrer geschlecht="w">
<name>Müller</name>
<vorname>Katharina</vorname>
<kuerzel>mue</kuerzel>
<fach>Mathematik</fach>
<fach>Informatik</fach>
<email>[email protected]</email>
</lehrer>
</kollegium>
38
Dokumenttyp
Das Wurzelelement hat den Namen
"kollegium".
Ein Element vom Typ "kollegium" besteht
aus mindestens einem Element vom Typ
"lehrer".
Ein Element vom Typ "lehrer" besteht aus
- einem Element vom Typ "name",
- einem Element vom Typ "vorname",
- einem Element vom Typ "kuerzel",
- mindestens e. Element v. Typ "fach"
- beliebig viel. Elementen v. Typ "email".
Zudem hat ein Element vom Typ "lehrer"
das Attribut "geschlecht".
Ein Element vom Typ "name" besteht aus
Zeichen.
...
informelle Beschreibung des
Dokumenttyps
<?xml version="1.0" encoding="ISO-8859-1"?>
<kollegium>
<lehrer geschlecht="w">
<name>Meier</name>
<vorname>Christiane</vorname>
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
<lehrer geschlecht="m">
<name>Schmitt</name>
<vorname>Thomas</vorname>
<kuerzel>sch</kuerzel>
<fach>Latein</fach>
<fach>Musik</fach>
<fach>Philosophie</fach>
</lehrer>
<lehrer geschlecht="w">
<name>Müller</name>
<vorname>Katharina</vorname>
<kuerzel>mue</kuerzel>
<fach>Mathematik</fach>
<fach>Informatik</fach>
<email>[email protected]</email>
</lehrer>
</kollegium>
39
Dokumenttypdefinition
Das Wurzelelement hat den Namen
"kollegium".
Ein Element vom Typ "kollegium" besteht
aus mindestens einem Element vom Typ
"lehrer".
Ein Element vom Typ "lehrer" besteht aus
- einem Element vom Typ "name",
- einem Element vom Typ "vorname",
- einem Element vom Typ "kuerzel",
- mindestens e. Element v. Typ "fach"
- beliebig viel. Elementen v. Typ "email".
Zudem hat ein Element vom Typ "lehrer"
das Attribut "geschlecht".
Ein Element vom Typ "name" besteht aus
Zeichen.
...
informelle Beschreibung des
Dokumenttyps
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE
<!ELEMENT
<!ELEMENT
email*)>
<!ATTLIST
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
]>
kollegium [
kollegium (lehrer*)>
lehrer (name, vorname, kuerzel, fach+,
lehrer geschlecht CDATA #REQUIRED>
name (#PCDATA)>
vorname (#PCDATA)>
kuerzel (#PCDATA)>
fach (#PCDATA)>
email (#PCDATA)>
<kollegium>
<lehrer geschlecht="w">
<name>Meier</name>
<vorname>Christiane</vorname>
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
..
</kollegium>
formale Beschreibung des
Dokumenttyps
40
Dokumenttypdefinition
Eine Dokumenttypdefinition
(DTD) legt eine Klasse von
Dokumenten fest, die alle vom
gleichen Typ sind.
Dokumenttypdefinition
Eine Dokumenttypdefinition
beschreibt die Struktur eines
Dokuments mit Hilfe einer
Grammatik, die in Form von
Deklarationen beschrieben wird.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE
<!ELEMENT
<!ELEMENT
email*)>
<!ATTLIST
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
]>
kollegium [
kollegium (lehrer*)>
lehrer (name, vorname, kuerzel, fach+,
lehrer geschlecht CDATA #REQUIRED>
name (#PCDATA)>
vorname (#PCDATA)>
kuerzel (#PCDATA)>
fach (#PCDATA)>
email (#PCDATA)>
<kollegium>
<lehrer geschlecht="w">
<name>Meier</name>
<vorname>Christiane</vorname>
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
..
</kollegium>
41
Einbindung einer DTD
 Eine Dokumenttypdefinition
kann direkt in das XML-Dokument
nach dem XML-Prolog
eingebunden werden (interne
DTD).
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE kollegium [
...
]>
<kollegium>
...
interne DTD
</kollegium>
 Eine Dokumenttypdefinition
kann auch über eine Referenz auf
eine Datei mit dem XMLDokument verbunden werden
(externe DTD).
<!DOCTYPE kollegium SYSTEM "kollegium.dtd">
<kollegium>
...
externe DTD
</kollegium>
 Mit dem Schlüsselwort PUBLIC
wird auf eine veröffentlichte DTD
verwiesen.
 Als Name der DTD wird der
Name d. Wurzelelement benutzt.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd">
<html>
...
externe DTD
</html>
<!DOCTYPE Name [...]>
42
Deklaration von Elementen
Operator
Bedeutung
()
Bildung von Elementgruppen
,
Trennzeichen innerhalb einer Sequenz von Elementen
|
Trennzeichen zwischen sich ausschließenden Alternativen
*
Element(gruppe) kann beliebig oft (auch gar nicht) vorkommen
+
Element(gruppe) muss mindestens einmal, kann mehrfach vorkommen
?
Element(gruppe) kann einmal oder kein mal vorkommen
Elementtyp-Deklaration
<!ELEMENT Name Inhaltsmodell>
<!DOCTYPE
<!ELEMENT
<!ELEMENT
email*)>
<!ATTLIST
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
]>
kollegium [
kollegium (lehrer*)>
lehrer (name, vorname, kuerzel, fach+,
lehrer geschlecht CDATA #REQUIRED>
name (#PCDATA)>
vorname (#PCDATA)>
kuerzel (#PCDATA)>
fach (#PCDATA)>
email (#PCDATA)>
43
Inhaltsmodelle
Inhaltsmodell
Beschreibung
Elementinhalt
Das Element enthält ausschließlich Unterelemente
<!ELEMENT kollegium (lehrer*)>
<kollegium><lehrer>...</lehrer><lehrer>...</lehrer></kollegium>
#PCDATA
Das Element enthält nur Zeichendaten
<!ELEMENT name (#PCDATA)>
<fach>Sport</fach>
gemischter Inhalt
Das Element kann Zeichendaten und Unterelemente enthalten
<!ELEMENT anrede (#PCDATA?, vormame, name)>
<anrede>Frau<vorname>Christine</vorname><name>Meier</name></anrede>
EMPTY
Das Element hat keinen Inhalt
<!ELEMENT direktor EMPTY>
<direktor/>
ANY
Das Element hat beliebige Inhalte haben.
44
Deklaration von Attributlisten
<!ATTLIST Elementname
Attributname Attributtyp Vorgabewert
Attributname Attributtyp Vorgabewert
Attributname Attributtyp Vorgabewert
...
>
<!ATTLIST lehrer
geschlecht CDATA #REQUIRED
>
<!ATTLIST lehrer
geschlecht CDATA #REQUIRED
amtsbez CDATA #IMPLIED
>
Attributlisten-Deklaration
CDATA: nur einfache Zeichenketten erlaubt, keine Tags
...
#REQUIRED: Attributwert muss in jeder Elementinstanz vorkommen
#IMPLIED: Attributwert kann optional in einer Elementinstanz vorkommen
...
45
Gültigkeit
Ein XML-Dokument, das alle
Bedingungen einer DTD erfüllt,
heißt gültig bzw. valide.
 Ein gültiges XML-Dokument
muss auch wohlgeformt sein.
 Gültigkeit bezieht sich immer
auf eine spezielle
Strukturbeschreibung (hier in
Form einer DTD).
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE
<!ELEMENT
<!ELEMENT
email*)>
<!ATTLIST
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
]>
kollegium [
kollegium (lehrer*)>
lehrer (name, vorname, kuerzel, fach+,
lehrer geschlecht CDATA #REQUIRED>
name (#PCDATA)>
vorname (#PCDATA)>
kuerzel (#PCDATA)>
fach (#PCDATA)>
email (#PCDATA)>
<kollegium>
<lehrer geschlecht="w">
<name>Meier</name>
<vorname>Christiane</vorname>
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
..
</kollegium>
46
Validierung
Die Gültigkeit eines XML-Dokuments kann mit einem sog. XML-Parser
überprüft werden. Ein XML-Parser ist ein Programm, das überprüft, ob das
XML-Dokument die von der angegebenen DTD geforderte Struktur hat.
http://www.validome.org/xml/validate/
47
Validierung
Viele XML-Editoren haben XML-Parser integriert.
Open XML Editor
48
Aufgabe
Erweitern Sie die DTD zur Beschreibung von Lehrerkollegien. Die LehrerDaten sollen um Adressangaben ergänzt werden. Validieren Sie das
erweiterte XML-Dokument. Testen Sie insbesondere interne und auch
externe DTD.
49
Aufgabe
Wir betrachten XML-Dokumente zur Beschreibung von Graphen. Entwickeln
Sie jeweils passende DTD.
<?xml version="1.0" encoding="ISO-8859-1"?>
<graph>
<knotenmenge>
<knoten>
<name>TR</name>
</knoten>
<knoten>
<name>KL</name>
</knoten>
...
</knotenmenge>
<kantenmenge>
<kante>
<von>TR</von>
<nach>KL</nach>
<gewicht>116</gewicht>
</kante>
<kante>
<von>KL</von>
<nach>TR</nach>
<gewicht>116</gewicht>
</kante>
...
</kantenmenge>
</graph>
<?xml version="1.0" encoding="ISO-8859-1"?>
<graph id="RLP">
<node id="TR"/>
<node id="KL"/>
<node id="KO"/>
<edge source="TR" target="KL">
<data>116</data>
</edge>
<edge source="TR" target="KO">
<data>128</data>
</edge>
</graph>
50
Aufgabe
Entwickeln Sie eine DTD für Automatenbeschreibungen. Die von JFlap
erzeugten XML-Beschreibungen sollen dabei als gültig erkannt werden.
51
Aufgabe
Entwickeln Sie eine DTD für Struktogramme. Die von NSCEdit erzeugten
XML-Beschreibungen sollen dabei als gültig erkannt werden.
52
Aufgabe
Entwickeln Sie eine DTD für vereinfachte HTML-Dokumente. Dabei sollen
HTML-Dokumente wie das folgende als gültig erkannt werden. Gehen Sie
schrittweise vor. Beginnen Sie mit sehr einfachen Dokumenten wie in
"MyXHTML0.xml".
<html>
<head>
<title>IFB</title>
</head>
<body>
<h1>Weiterbildung am IFB</h1>
<p>Die Arbeit findet normalerweise in einem der Rechnerräume des IFB statt.</p>
<p><img src="Rechnerraum.jpg" alt="Rechnerraum"></img></p>
<p>Untergebracht wird man in dem schönen neuen S-Bau. </p>
<p><img src="SGebaeude.jpg" alt="S-Gebäude"></img></p>
<p><a href="Weiterbildungskurse.xml">Zurück</a></p>
</body>
</html>
53
Teil 4
XML-basierte Sprachen
54
Sprachen
Sprachen sind Zeichensysteme, die u.
a. für Kommunikation genutzt werden.
<mrow>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mrow>
<mn>4</mn>
<mo>&InvisibleTimes;</mo>
<mi>x</mi>
</mrow>
<mo>+</mo>
<mn>4</mn>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
Ido esas internaciona linguo kun poka
polisemio sate konciza kreita da Louis
de Beaufront en 1907 kom Esperanto
reformita, adoptita internacione en Paris
ye oktobro 1907, kom “idiomo helpanta
internaciona”, da la Delegitaro
(Délégation pour l’adoption d’une
langue auxiliaire internationale).
http://io.wikipedia.org/wiki/Ido
55
Lexik, Syntax, Semantik, Pragmatik
Aspekte von Sprachen:
Lexik: Lehre vom Wortschatz
Gesamtheit der Wörter der Sprache
Syntax: Lehre vom Satzbau
Regeln, nach denen Sätze gebildet
werden
Semantik: Bedeutungslehre
Bedeutung von Wörtern, Sätzen, ...
Pragmatik: Lehre von der
Verwendung sprachlicher Konstrukte
in Handlungssituationen
56
XML-Vokabulare
XML ermöglicht es, mit Hilfe von DTD neue Sprachen formal festzulegen.
Solche Sprachen werden auch XML-Vokabulare genannt. Die DTD ist die
Grammatik des zugehörigen XML-Vokabulars, dargestellt in SGML unter
Verwendung der erweiterten Backus-Naur-Form.
"Die Erweiterte Backus-Naur-Form,
kurz EBNF, ist eine Erweiterung der
Backus-Naur-Form (BNF), die
ursprünglich von Niklaus Wirth zur
Darstellung der Syntax der
Programmiersprache Pascal eingeführt
wurde. Sie ist eine formale Metasyntax
(Metasprache), die benutzt wird, um
kontextfreie Grammatiken darzustellen."
(wikipedia)
Regeln zur Festlegung der
Lexik und Syntax von MyHTML
<!DOCTYPE html [
<!ELEMENT html (head, body)>
<!ELEMENT head (title)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT body (h1 | p)+>
<!ELEMENT h1 (#PCDATA)>
<!ELEMENT p (#PCDATA | img | a)*>
<!ELEMENT img EMPTY>
<!ATTLIST img
src CDATA #REQUIRED
alt CDATA #REQUIRED>
<!ELEMENT a (#PCDATA)>
<!ATTLIST a
href CDATA #REQUIRED >
]>
57
XHTML
XHTML ist die XML-konforme Neufassung von HTML.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd">
<html>
<head>
<title>Weiterbildungskurse am IFB</title>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>Weiterbildung am IFB</h1>
<p>Die Arbeit findet normalerweise in einem der
Rechnerräume des IFB statt.</p>
...
<p><a
href="Weiterbildungskurse.html">Zurück</a></p>
</body>
</html>
DTD zur Festlegung der Lexik
und Syntax von XHTML
Browser als Interpreter:
Semantik von XHTML
58
Aufgaben
Aufgabe 1
Laden Sie sich die DTD von XHTML herunter und werfen Sie einen Blick in
die sehr umfangreiche DTD. Alles klar?
Sie finden die DTD unter der angegebenen URL.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Aufgabe 2
Informieren Sie sich über den sog. DOCTYPE-switch. Sie können auch nach
dem Stichwort "Quirks-Modus" suchen.
SVG
59
"Scalable Vector Graphics (SVG, deutsch Skalierbare Vektorgrafiken) ist ein
Standard zur Beschreibung zweidimensionaler Vektorgrafiken in der XMLSyntax." (wikipedia)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="300">
<circle cx="100" cy="100" r="50"></circle>
<rect x="100" y="100" width="50" height="50" fill="green"></rect>
</svg>
SVG-Dokument
Darstellung im Browser
60
Aufgaben
Aufgabe 1
Testen Sie zunächst, ob ihr Browser SVG-Dateien anzeigt. Benutzen Sie eine
der mitgelieferten svg-Dateien.
Aufgabe 2
Unter der URL "http://de.wikipedia.org/wiki/Scalable_Vector_Graphics"
finden Sie einige Hinweise zur Erstellung von SVG-Dokumenten. Testen Sie
einige der dort angegebenen Elemente und erstellen Sie eine Grafik nach
eigenen Vorstellungen.
61
"Die Mathematical Markup
Language (MathML) ist im
Computer-Datenverkehr ein
Dokumentenformat zur
Darstellung mathematischer
Formeln und komplexer
Ausdrücke. Der Standard
MathML 2.0 wird durch eine
Spezifikation des World Wide
Web Consortium von 2001
festgelegt. Wie in allen XMLSprachen (z. B. XHTML)
werden in MathML die Inhalte
eines Dokumentes in einer
logischen Struktur unabhängig
von ihrer graphischen
Gestaltung abgelegt."
(wikipedia)
MathML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi>c</mi>
<mo>=</mo>
<msqrt>
<mrow>
<msup>
<mi>a</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
</mrow>
</msqrt>
</mrow>
</math>
62
Aufgaben
Aufgabe 1
Testen Sie zunächst, ob ihr Browser MATHML-Dateien anzeigt. Wenn Sie
Firefox benutzen, müssen Sie evtl. weitere Zeichensätze installieren.
Aufgabe 2
Versuchen Sie, einfache Formeln mit MATHML zu erstellen.
Aufgabe 3
Das Dokument in "test3.xml" zeigt, wie man MATHML in XHTML einbettet.
Wie wird es gemacht?
63
WML
"Wireless Markup Language (WML) ist eine XML-basierte
Seitenbeschreibungssprache, die eine stark reduzierte Fassung von XHTML
darstellt. Sie ist Teil des Wireless Application Protocol (WAP) und zur
Darstellung veränderlicher Inhalte auf Mobiltelefonen entwickelt worden."
(wikipedia)
http://www.winwap.com/products_2_3.php
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="card1" title="IFB">
<p>
Die Fortbildung "Information und ihre Darstellung" findet im Raum
<br />
<a href="raum1.wml">01</a>
statt.
</p>
</card>
</wml>
64
Aufgaben
Aufgabe 1
Informieren Sie sich in der mitgelieferten WML-Kurzeinführung, wie WMLDokumente aufgebaut werden. Erstellen Sie auch eine einfache WML-Datei.
Laden Sie diese Daten in den WAP-Browser:
[Enter Adress][file:///...:/.../.../ifb.wml]
Aufgabe 2
Sie können Firefox dazu bringen, WML-Dateien anzuzeigen. Hierzu müssen
Sie nur ein zusätzliches Add-on installieren. Sie finden es hier:
"https://addons.mozilla.org/en-US/firefox/addon/62"
Zusätzlich müssen Sie folgende Einstellung vornehmen:
"Lokale Dateien mit Endung ".wml" als WML laden"
65
SMIL
"Synchronized Multimedia Integration
Language (SMIL; Aussprache wie engl.
smile) ist ein auf XML basierender, von dem
World Wide Web Consortium (W3C)
entwickelter Standard für eine
Auszeichnungssprache für
zeitsynchronisierte, multimediale Inhalte.
SMIL ermöglicht die Einbindung und
Steuerung von Multimedia-Elementen wie
Audio, Video, Text und Grafik in Webseiten."
<smil>
<head>
<layout>
<root-layout width="300" height="200"
background-color="#FCECF0" />
<region id="g1" left="15" top="15"
width="100" height="100" />
<region id="g2" left="70" top="15"
width="100" height="100" />
<region id="g3" left="15" top="50"
width="100" height="100" />
</layout>
</head>
(wikipedia)
<body>
<par><!-- zeige Grafik n Sekunden an -->
<img src="box1.gif" alt="Grafik"
region="g1" z-index="1" dur="10s" />
<img src="box2.gif" alt="Grafik"
region="g2" z-index="2" begin="5s" dur="10s" />
<img src="box2.gif" alt="Grafik"
region="g3" z-index="3" begin="8s" />
</par>
</body>
</smil>
66
Aufgaben
Aufgabe 1
Informieren Sie sich auf Seiten
http://www.hdm-stuttgart.de/streamingmedia/SMILStart.htm
über SMIL und erstellen Sie einfache SMIL-Dateien.
Zur Darstellung können Sie den QickTimePlayer benutzen.
67
DocBook
"DocBook ist ein Dokumentenformat, das in einer für SGML und XML
vorliegenden Dokumenttypdefinition (DTD) festgelegt ist. Es eignet sich
besonders zur Erstellung von Büchern, Artikeln und Dokumentationen im
technischen Umfeld (Hardware oder Software). DocBook ist ein offener
Standard, der von der Organization for the Advancement of Structured
Information Standards (OASIS) gepflegt wird."
(wikipedia)
<book id="einfaches_buch">
<title>Ein sehr einfaches Buch</title>
<chapter id="einfaches_kapitel">
<title>Kapitel</title>
<para>Hallo Welt!</para>
</chapter>
</book>
68
Aufgaben
Aufgabe 1
Informieren Sie sich auf den Seiten
http://www.goshaky.com/docbook-tutorial/
über DocBook und erstellen Sie einfache DocBook-Dateien.
Aufgabe 2
DocBook-Dateien lassen sich mit OpenOffice erzeugen und einlesen. Mehr
hierüber findet man hier:
http://de.openoffice.org/doc/sonstiges/DocBook16de.html
69
Aufgabe
Weitere XML-basierte Sprachen, denen man häufig begegnet, sind RSS und
RDF. Informieren Sie sich, wo diese Sprachen eingesetzt werden.
70
Aufgabe
Auf der Seite
http://web.mit.edu/mecheng/pml/standards.htm
finden Sie eine Übersicht über standardisierte XML-Vokabulare. Werfen Sie
einen Blick auf diese Seite, um zu erahnen, wo weitere Anwendungsgebiete
von XML liegen.
71
Teil 5
Exkurs:
Namensräume, Formatierung,
Strukturbeschreibung
72
Probleme
Wie kann man mehrere XML-Dokumente zusammenführen, ohne
Namenskonflikte zu erhalten?
Wie kann man XML-Dokumente formatieren?
Wie kann man die Struktur von XML-Dokumenten noch adäquater
beschreiben?
...
73
Exkurs: Namensräume
Beispiel 1:
<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
Namensraum: Ansammlung von
</head>
Namen für Elemente und Attribute
<body>
<h1>Überschrift</h1>
<p>Absatz</p>
</body>
</html>
<?xml version="1.0" encoding="ISO-8859-1"?>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Überschrift</h1>
<p>Absatz</p>
</body>
</html>
74
Exkurs: Namensräume
Beispiel 2:
<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
Namensraumdeklaration
</head>
<body>
<h1>Überschrift</h1>
<p>Absatz</p>
</body>
Präfix als Kurzorm
URI als weltweit eindeutiger Bezeichner
</html>
<?xml version="1.0" encoding="ISO-8859-1"?>
<seite xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xhtml:h1>Überschrift</xhtml:h1>
<xhtml:p>Absatz</xhtml:p>
</seite>
75
Exkurs: Namensräume
Beispiel 3:
<?xml version="1.0" encoding="ISO-8859-1"?>
<seite xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:math="http://www.w3.org/1998/Math/MathML">
<xhtml:p>Die Funktion f mit</xhtml:p>
<xhtml:p>
mehrere Namensräume
<math:mrow>
<math:mi>f</math:mi>
<math:mfenced>
<math:mi>x</math:mi>
</math:mfenced>
<math:mo>=</math:mo>
<math:msqrt>
<math:mi>x</math:mi>
</math:msqrt>
</math:mrow>
</xhtml:p>
<xhtml:p>heißt Wurzelfunktion.</xhtml:p>
</seite>
76
Exkurs: Namensräume
"In Dokumenten, die unterschiedliches Markup-Vokabular enthalten,
können Probleme mit der Erkennung und Kollisionen auftreten. SoftwareModule müssen die Tags und Attribute erkennen, für deren Verarbeitung sie
geschaffen wurden, auch im Fall einer Kollision, wenn Markup, das für eine
andere Software geschrieben wurde, die gleichen Elementtypen und
Attributnamen verwendet.
Diese Überlegungen erfordern, dass Dokumentkonstrukte, deren
Geltungsbereich über den des beinhaltenden Dokuments hinausgeht,
einzigartige Namen haben sollten. Diese Spezifikation beschreibt einen
Mechanismus, XML-Namensräume, der diese Anforderungen erfüllt.
Ein XML-Namensraum ist eine Zusammenstellung von Namen, identifiziert
durch einen URI-Verweis, die in XML-Dokumenten als Elementtypen und
Attributnamen verwendet werden."
aus: Namensräume in XML. http://www.schumacher-netz.de/TR/1999/REC-xml-names-19990114-de.html
77
Beispiel 1:
Exkurs: Formatierung
keine Formatierungsangabe
<?xml version="1.0" encoding="ISO-8859-1"?>
<dokument>
<ueberschrift>XML</ueberschrift>
<definition>XML steht für Extensible Markup Language und wird
benutzt, um Daten strukturiert darzustellen.</definition>
</dokument>
78
Exkurs: Formatierung
Beispiel 2:
Formatierung mit CSS
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="style.css" type="text/css"?>
<dokument>
<ueberschrift>XML</ueberschrift>
<definition>XML steht für Extensible Markup Language und wird
benutzt, um Daten strukturiert darzustellen.</definition>
</dokument>
ueberschrift{
color: blue;
font-weight: bold;
}
definition{
color: green;
}
style.css
79
Beispiel 3:
Exkurs: Formatierung
Formatierung mit XSLT
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<dokument>
<ueberschrift>XML</ueberschrift>
<definition>XML steht für Extensible Markup Language und wird
benutzt, um Daten strukturiert darzustellen.</definition>
style.xsl
</dokument>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head><title>XML</title></head>
<body>
<h1><xsl:value-of select="dokument/ueberschrift"/></h1>
<p><xsl:value-of select="dokument/definition"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
80
Exkurs: Formatierung
XSLT steht für Extensible Stylesheet Language Transformations. XSLT ist
eine Sprache zur Transformation von XML-Dokumenten in andere XMLDokumente, z. B. XHTML-Dokumente.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head><title>XML</title></head>
<body>
<h1><xsl:value-of select="dokument/ueberschrift"/></h1>
<p><xsl:value-of select="dokument/definition"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Für weitere Informationen und Beispiele siehe z. B.: http://de.selfhtml.org/xml/darstellung/index.htm
81
Exkurs: XML-Schema
Beispiel 1:
Strukturbeschreibung mit einer DTD
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE kollegium SYSTEM "kollegium.dtd">
<kollegium>
<lehrer geschlecht="w">
<name>Meier</name>
<vorname>Christiane</vorname>
<geburtsjahr>1981</geburtsjahr>
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
<lehrer geschlecht="m">
<name>Schmitt</name>
<vorname>Thomas</vorname>
<geburtsjahr>1975</geburtsjahr>
<!ELEMENT kollegium (lehrer*)>
<kuerzel>sch</kuerzel>
<!ELEMENT lehrer (name, vorname, geburtsjahr, kuerzel, fach+, email*)>
<fach>Latein</fach>
<!ATTLIST lehrer geschlecht CDATA #REQUIRED>
<fach>Musik</fach>
<!ELEMENT name (#PCDATA)>
<fach>Philosophie</fach>
<!ELEMENT vorname (#PCDATA)>
</lehrer>
<!ELEMENT geburtsjahr (#PCDATA)>
...
<!ELEMENT kuerzel (#PCDATA)>
</kollegium>
<!ELEMENT fach (#PCDATA)>
<!ELEMENT email (#PCDATA)>
82
Exkurs: XML-Schema
Nachteile von DTD: zu unflexibel
Strukturbeschreibung mit einer DTD
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE kollegium SYSTEM "kollegium.dtd">
<kollegium>
<lehrer geschlecht="w">
<name>Meier</name>
<vorname>Christiane</vorname>
<geburtsjahr>1981</geburtsjahr>
Datentyp: integer
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
Anzahl der Fächer: max. 4
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
<lehrer geschlecht="m">
<name>Schmitt</name>
<vorname>Thomas</vorname>
<geburtsjahr>1975</geburtsjahr>
<!ELEMENT kollegium (lehrer*)>
<kuerzel>sch</kuerzel>
<!ELEMENT lehrer (name, vorname, geburtsjahr, kuerzel, fach+, email*)>
<fach>Latein</fach>
<!ATTLIST lehrer geschlecht CDATA #REQUIRED>
<fach>Musik</fach>
<!ELEMENT name (#PCDATA)>
<fach>Philosophie</fach>
<!ELEMENT vorname (#PCDATA)>
</lehrer>
<!ELEMENT geburtsjahr (#PCDATA)>
...
<!ELEMENT kuerzel (#PCDATA)>
</kollegium>
<!ELEMENT fach (#PCDATA)>
<!ELEMENT email (#PCDATA)>
83
Beispiel 2:
Exkurs: XML-Schema
Strukturbeschreibung mit einem XML-Schema
<?xml version="1.0" encoding="ISO-8859-1"?>
<kollegium xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Kollegium.xsd">
<lehrer geschlecht="w">
<name>Meier</name>
xsi: XML-schema-instance
<vorname>Christiane</vorname>
<geburtsjahr>1981</geburtsjahr>
<kuerzel>mei</kuerzel>
<fach>Deutsch</fach>
<fach>Erdkunde</fach>
<email>[email protected]</email>
<email>[email protected]</email>
</lehrer>
<lehrer geschlecht="m">
<name>Schmitt</name>
<vorname>Thomas</vorname>
<geburtsjahr>1975</geburtsjahr>
<kuerzel>sch</kuerzel>
<fach>Latein</fach>
<fach>Musik</fach>
<fach>Philosophie</fach>
</lehrer>
...
</kollegium>
84
Beispiel 2:
Exkurs: XML-Schema
Schema-Definition mit e. XML-basierten Sprache
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="kollegium">
<xs:annotation>
<xs:documentation>Lehrerkollegium</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="lehrer" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="vorname" type="xs:string"></xs:element>
<xs:element name="geburtsjahr" type="xs:integer"></xs:element>
<xs:element name="kuerzel" type="xs:string"></xs:element>
<xs:element name="fach" type="xs:string" minOccurs="1"
maxOccurs="4"></xs:element>
<xs:element name="email" type="xs:string" minOccurs="0"
maxOccurs="unbounded"></xs:element>
</xs:sequence>
<xs:attribute name="geschlecht" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
85
Validierung: z. B. mit
Exkurs: XML-Schema
http://www.xmlvalidation.com/
86
Exkurs: XML-Schema
"XML Schema ist eine Empfehlung des W3C zum Definieren von XMLDokumentstrukturen. Anders als bei den klassischen XML-DTDs wird die
Struktur in Form eines XML-Dokuments beschrieben. Darüber hinaus wird
eine große Anzahl von Datentypen unterstützt.
XML Schema ist eine komplexe Schemasprache zur Beschreibung eines
XML-Typsystems. Dieses XML-Typsystem umfasst die Spezifikation neuer
XML-Elemente, deren Attribute, sowie deren Kindelemente. Im Gegensatz
zu DTDs kann bei Verwendung von XML Schema zwischen dem Namen des
XML-Typs und dem in der Instanz verwendeten XML-Tagnamen
unterschieden werden.
Vermutlich werden DTDs irgendwann vollständig von XML-Schemata
abgelöst. Allerdings sind XML-Schemata durch ihre erweiterten
Möglichkeiten wesentlich komplexer und nicht so einfach ohne Hilfsmittel
auszuwerten. ... Ein konkretes XML-Schema wird auch als eine XSD (XMLSchema-Definition) bezeichnet und hat üblicherweise die Dateiendung
".xsd"."
siehe: http://de.wikipedia.org/wiki/XML_Schema
87
Teil 6
Verarbeitung von XML-Dokumenten
88
Verarbeitung von XML-Dokumenten
Die Verarbeitung von XML-Daten erfolgt in zwei Stufen, mit einem so
genannten Parser und einer Anwendung.
Die Aufgabe des Parsers ist es, das vorhandene Dokument auf
Wohlgeformtheit und Gültigkeit zu überprüfen und die Daten geeignet
aufzubereiten (d. h. in einer bestimmten Weise intern darzustellen).
Eine Anwendung kann dann über eine geeignete Schnittstelle auf diese
interne Darstellung zugreifen und das Dokument in einer bestimmten
Weise verarbeiten (z. B.: erzeugt ein Browser eine grafische
Seitendarstellung). Die Verarbeitung legt demnach erst die Bedeutung
(Semantik) des Dokuments fest.
89
Beispiel: Browser
Parser
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
[
...
]
>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Weiterbildung am IFB</h1>
...
</html>
SyntaxAnalyse
Grafische
Aufbereitung
(Festlegung
der Semantik)
Anwendung
OK!
90
Beispiel: Automatensimulator
Eingabewort: [email protected]
<?xml version="1.0"?>
<!-- Created with JFLAP 4.0b13. -->
<structure>
<type>fa</type>
<!--The list of states.-->
<state id="0">
<x>60.0</x>
<y>59.0</y>
<initial />
</state>
...
<!--The list of transitions.-->
<transition>
<from>2</from>
<to>3</to>
<read>c</read>
</transition>
...
</structure>
Parser
SyntaxAnalyse
OK!
Simulation
Anwendung
Ergebnis: ok!
91
Zielsetzung
Um einen Einblick in die Verarbeitung von XML-Dokumenten zu gewinnen,
soll hier ein eigener Automatensimulator entwickelt werden, der XMLAutomatenbeschreibungen verarbeiten kann.
<?xml version="1.0"?>
<!-- Created with JFLAP 4.0b13. -->
<structure>
<type>fa</type>
<!--The list of states.-->
<state id="0">
<x>60.0</x>
<y>59.0</y>
<initial />
</state>
<state id="1">
<x>147.0</x>
<y>59.0</y>
</state>
...
<!--The list of transitions.-->
<transition>
<from>2</from>
<to>3</to>
<read>c</read>
</transition>
...
</structure>
[email protected]
Simulator
Ok!
Vorgehensweise
92
<?xml version="1.0"?>
<!-- Created with JFLAP 4.0b13. -->
<structure>
<type>fa</type>
<!--The list of states.-->
<state id="0">
<x>60.0</x>
<y>59.0</y>
<initial />
</state>
...
#document
#comment:
structure
type
#text: fa
#comment:
state
Id: 0
x
#text: 60.0
y
#text: 59.0
initial
Schritt 1: Strukturbaum erzeugen
Schritt 2: Auf die Knoten des Strukturbaums zugreifen
93
Erzeugung des Strukturbaums
<?xml version="1.0"?>
<!-- Created with JFLAP 4.0b13. -->
<structure>
<type>fa</type>
<!--The list of states.-->
<state id="0">
<x>60.0</x>
<y>59.0</y>
<initial />
</state>
...
#document
#comment:
structure
Zunächst wird der XML-Quelltext mit
Hilfe eines Parsers verarbeitet. Dabei
wird ein sog. DOM-Objekt erzeugt, das
den gesamten Strukturbaum
verwaltet.
type
#text: fa
#comment:
state
>>> from xml.dom.minidom import *
>>> dokument = parse(".../EmailDA1.jff")
>>> dokument
<xml.dom.minidom.Document instance at 0x0118AE40>
DOM: Document Object Model (W3C-Standard)
Id: 0
x
#text: 60.0
y
#text: 59.0
initial
Python
Zugriff auf den Wurzelknoten
94
Dokumentknoten
#document
#comment:
Wurzelknoten
structure
type
#text: fa
#comment:
state
Id: 0
x
#text: 60.0
y
#text: 59.0
initial
>>> from xml.dom.minidom import *
>>> dokument = parse(".../EmailDA1.jff")
>>> dokument
<xml.dom.minidom.Document instance at 0x0118AE40>
>>> wurzel = dokument.documentElement
>>> wurzel
<DOM Element: structure at 0x1190c88>
Wurzelknoten
95
Aufgabe
>>> from xml.dom.minidom import *
>>> dokument = parse(".../EmailDA1.jff")
>>> dokument
<xml.dom.minidom.Document instance at 0x0118AE40>
>>> wurzel = dokument.documentElement
>>> wurzel
<DOM Element: structure at 0x1190c88>
>>> wurzel.nodeName
u'structure'
Testen Sie die Erzeugung des DOM-Objekts. Achten Sie darauf, den Pfad zur
XML-Datei richtig einzugeben.
Navigation im Strukturbaum
96
Dokumentknoten
#document
#comment:
Elementknoten
structure
Textknoten
type
ParentNode
Operationen:
#text: fa
Attributknoten
#comment:
state
Id: 0
x
FirstChild
PreviousSibling
#text: 60.0
y
LastChild
#text: 59.0
initial
state
NextSibling
Id: 1
Grafik aus: Introducing the Document Object Model using OpenXML (Part 1) by Craig Murphy
97
Navigation im DOM-Baum
>>> wurzel.firstChild
<DOM Text node "
">
>>> wurzel.firstChild.nextSibling
<DOM Element: type at 0x1190d28>
>>> wurzel.firstChild.nextSibling.nextSibling
<DOM Text node "
">
>>> wurzel.firstChild.nextSibling.nextSibling.nextSibling
<DOM Comment node "The list o...">
Achtung:
Zeilenumbrüche und Leerzeichen
zwischen Tags werden mit zusätzlichen
Text-Knoten erfasst.
98
Aufgabe
>>> wurzel.firstChild
<DOM Text node "
">
>>> wurzel.firstChild.nextSibling
<DOM Element: type at 0x1190d28>
>>> wurzel.firstChild.nextSibling.nextSibling
<DOM Text node "
">
>>> wurzel.firstChild.nextSibling.nextSibling.nextSibling
<DOM Comment node "The list o...">
Navigieren Sie sich durch den Baum bis
zum ersten "state"-Knoten.
99
Navigation im DOM-Baum
>>> wurzel.childNodes
[<DOM Text node "
">, <DOM Element: type at 0x1190d28>, <DOM Text node "
">, <DOM Comment node "The list o...">, <DOM Text node "
...
">]
>>> wurzel.childNodes[2]
<DOM Text node "
">
>>> wurzel.childNodes[3]
<DOM Comment node "The list o...">
>>> wurzel.childNodes[5]
<DOM Element: state at 0x1190e40>
>>> wurzel.childNodes[5].firstChild
<DOM Text node "
">
>>>
100
Aufgabe
>>> wurzel.childNodes
[<DOM Text node "
">, <DOM Element: type at 0x1190d28>, <DOM Text node "
">, <DOM Comment node "The list o...">, <DOM Text node "
...
">]
>>> wurzel.childNodes[2]
<DOM Text node "
">
>>> wurzel.childNodes[3]
<DOM Comment node "The list o...">
>>> wurzel.childNodes[5]
<DOM Element: state at 0x1190e40>
>>> wurzel.childNodes[5].firstChild
<DOM Text node "
">
>>>
Navigieren Sie sich durch den Baum bis
zum "initial"-Knoten.
101
Zugriff auf die Knotendaten
>>> wurzel.childNodes[5]
<DOM Element: state at 0x1190e40>
>>> wurzel.childNodes[5].childNodes[1]
<DOM Element: x at 0x1190f30>
>>> wurzel.childNodes[5].childNodes[1].firstChild
<DOM Text node "60.0">
>>> wurzel.childNodes[5].childNodes[1].firstChild.nodeValue
u'60.0'
>>> wurzel.childNodes[5].nodeName
u'state'
>>> wurzel.childNodes[5].nodeValue
>>>
Operationen:
nodeName: Name des Knotens
nodeValue: Wert des Knotens
102
Aufgabe
>>> wurzel.childNodes[5]
<DOM Element: state at 0x1190e40>
>>> wurzel.childNodes[5].childNodes[1]
<DOM Element: x at 0x1190f30>
>>> wurzel.childNodes[5].childNodes[1].firstChild
<DOM Text node "60.0">
>>> wurzel.childNodes[5].childNodes[1].firstChild.nodeValue
u'60.0'
>>> wurzel.childNodes[5].nodeName
u'state'
>>> wurzel.childNodes[5].nodeValue
>>>
Wie erhält man den neuen Zustand,
wenn im Zustand "2" die Eingabe "c"
erfolgt. Bestimmen Sie diesen neuen
Zustand mit geeigneten Navigationsund Zugriffsoperationen.
103
Zugriff auf die Attributwerte
>>> wurzel.childNodes[5]
<DOM Element: state at 0x1190e40>
>>> wurzel.childNodes[5].attributes
<xml.dom.minidom.NamedNodeMap object at 0x011B7F08>
>>> wurzel.childNodes[5].attributes.item(0)
<xml.dom.minidom.Attr instance at 0x01190E90>
>>> wurzel.childNodes[5].attributes.item(0).nodeValue
u'0'
>>> wurzel.childNodes[5].attributes.item(0).nodeName
u'id'
Operationen:
attributes: Attributobjekte
item(...): Zugriff auf den ...-ten Knoten
104
Aufgabe
>>> wurzel.childNodes[5]
<DOM Element: state at 0x1190e40>
>>> wurzel.childNodes[5].attributes
<xml.dom.minidom.NamedNodeMap object at 0x011B7F08>
>>> wurzel.childNodes[5].attributes.item(0)
<xml.dom.minidom.Attr instance at 0x01190E90>
>>> wurzel.childNodes[5].attributes.item(0).nodeValue
u'0'
>>> wurzel.childNodes[5].attributes.item(0).nodeName
u'id'
Wie erhält man den Attributwert des
zweiten Zustands?
105
Bestimmung des Anfangszustands
from xml.dom.minidom import *
dokument = parse("...")
Pfad / Dateiname
ergänzen!
def anfangszustand():
wurzel = dokument.documentElement
for knoten1 in wurzel.childNodes:
if knoten1.nodeName == "state":
for knoten2 in knoten1.childNodes:
if knoten2.nodeName == "initial":
return knoten1.attributes.item(0).nodeValue
print anfangszustand()
106
Aufgabe
def naechsterZustand(zustand, eingabe):
...
# liefert den Folgezustand, wenn bei dem gegebenem Zustand die
# Eingabe verarbeitet wird.
def endzustand(zustand):
...
# liefert den Wert True / False, wenn der eingegebene Zustand
# ein / kein Endzustand ist
Ergänzen Sie die Funktionsdefinitionen.
107
Lösungsvorschläge
def naechsterZustand(zustand, eingabe):
wurzel = dokument.documentElement
for knoten1 in wurzel.childNodes:
if knoten1.nodeName == "transition":
for knoten2 in knoten1.childNodes:
if knoten2.nodeName == "from":
hfrom = knoten2.firstChild.nodeValue
if knoten2.nodeName == "to":
hto = knoten2.firstChild.nodeValue
if knoten2.nodeName == "read":
hread = knoten2.firstChild.nodeValue
if (hfrom == zustand) and (hread == eingabe):
return hto
return "?"
def endzustand(zustand):
wurzel = dokument.documentElement
for knoten1 in wurzel.childNodes:
if knoten1.nodeName == "state":
if knoten1.attributes.item(0).nodeValue == zustand:
for knoten2 in knoten1.childNodes:
if knoten2.nodeName == "final":
return True
return False
108
Simulator
# automatensimulator2.py
from xml.dom.minidom import *
dokument = parse("D:/Python/XML/EmailDA1.jff")
def anfangszustand():
...
def naechsterZustand(zustand, eingabe):
...
def endzustand(zustand):
...
def verarbeiten(zeichenkette):
zustand = anfangszustand()
for zeichen in zeichenkette:
zustand = naechsterZustand(zustand, zeichen)
if endzustand(zustand):
return True
else:
return False
# Test
print "[email protected]", verarbeiten("[email protected]")
print "acb@bca", verarbeiten("acb@bca")
109
DOM-Schnittstelle
"Das Document Object Model
(DOM) ist eine
Programmierschnittstelle (API)
für den Zugriff auf HTML- oder
XML-Dokumente. Sie wird vom
World Wide Web Consortium
definiert.
Im Sinne der objektorientierten
Programmierung besteht das
DOM aus einem Satz von Klassen
zusammen mit deren Methoden
und Attributen. Es erlaubt
Computerprogrammen,
dynamisch den Inhalt, die
Struktur und das Layout eines
Dokuments zu verändern."
Siehe:
http://de.wikipedia.org/wiki/Doc
ument_Object_Model
#document
#comment:
structure
type
ParentNode
#text: fa
#comment:
state
Id: 0
x
FirstChild
PreviousSibling
#text: 60.0
y
LastChild
#text: 59.0
initial
state
NextSibling
Id: 1
DOM-Knotenbaum
DOM-Schnittstelle
110
#document
#comment:
structure
type
ParentNode
#text: fa
#comment:
state
Attribute der Klasse "Node":
firstChild
Returns the first child of a node
lastChild
Returns the last child of a node
nextSibling
Returns the node immediately following a node
nodeName
Returns the name of a node, depending on its type
nodeType
Returns the type of a node
nodeValue
Sets or returns the value of a node, depending on its type
... (siehe: http://www.w3schools.com/dom/dom_node.asp)
PreviousSibling
#text: 60.0
Returns a NodeList of child nodes for a node
previousSibling Returns the node immediately before a node
x
FirstChild
childNodes
parentNode Returns the parent node of a node
Id: 0
y
LastChild
#text: 59.0
initial
state
NextSibling
Id: 1
111
Delphi-Implementierung
„Open XML is a collection of XML and Unicode tools and components for
the Delphi/Kylix™ programming language. All packages are freely available
including source code.“
Siehe: http://www.philo.de/xml/index.shtml
112
Delphi-Anwendung
Eine Delphi-basierte Implementierung eines Automatensimulators unter
Verwendung von OpenXML finden Sie in den Materialien zum
Weiterbildungslehrgang X:
http://informatik.bildung-rp.de/weiterbildungsmaterial/lehrgang-x-2005-2008/kurs-4.html
Weitere Hinweise zur Benutzung von OpenXML finden Sie hier:
http://www.hsg-kl.de/faecher/inf/theorie/formal/xml/openxml/index.php
Mit anderen gängigen Programmiersprachen kann man natürlich auch auf
den DOM-Baum zugreifen. Wie das mit JavaScript geht wird hier gezeigt:
http://www.w3schools.com/dom/dom_parser.asp
113
Teil 7
XML im Informatikunterricht
114
Thesen
XML ist heute schon Standard bei der strukturierten Darstellung von
Information und sollte daher im IU thematisiert werden.
XML ist die Basis von XHTML (DOCTYPE ...). Eine kurze Behandlung trägt
zum vertieften Verständnis von XHTML bei.
XML ist ein guter Ausgangspunkt zur Behandlung des Themas "formale
Sprachen" (Grammatiken, Parser, ...).
XML kann (im LK) als Ausgangspunkt zur Behandlung des Themas "Bäume"
genutzt werden.
Mit XML können fundamentale Ideen der Informatik mit sehr aktuellen
Unterrichtsbeispielen (WML, ...) behandelt werden ("IU am Puls der Zeit").
115
Literaturhinweise
Folgende Materialien wurden hier benutzt:
J.-C. Hanke: XML leicht & verständlich. KnowWare.
H. Vonhoegen: Einstieg in XML. Galileo Computing 2005.
G. Born: XML. Markt+Technik 2005.
M. Näf: Einführung in XML.
http://www.swisseduc.ch/informatik/programmiersprachen/xml_einfuehrung/index.html
M. Jeckle: Vorlesung XML.
http://www.jeckle.de/vorlesung/xml/script.html
XML in 10 Punkten:
http://www.w3c.de/Misc/XML-in-10-Punkten.html
SELFHTML:
http://de.selfhtml.org/xml/index.htm
Weitere benutzte Materialien sind auf den jeweiligen Folien zitiert.