Schönen guten Tag, ich begrüße Sie zu einer weiteren Fortsetzung von
Angewandte Informatik 2.
Und Sie hatten gerade eben ja hier etwas von Ihrem Kommilitonen
gehört, von der Fachschaft Vorlesungsbefragung etwas sehr Wichtiges.
Hatte ich schon letzte Woche gesagt, schon angekündigt, dass diese
Woche die Befragung sein wird.
Jetzt sitzen hier sehr wenige in dieser Vorlesung heute Morgen.
Das ist so, dass nur die natürlich, die jetzt hier sitzen, auch diese
Passwörter bekommen haben.
Aber es ist ja immer möglich, dass Sie auch als virtueller Hörer an
der Befragung teilnehmen.
Das, jetzt sind meine Mitarbeiter nicht mehr da, das sollte eigentlich
über die Webseiten verfügbar sein.
Ich werde das mit der Fachschaft noch klären, dass auch eine Befragung
für virtuelle Hörer ermöglicht wird, die also zum Beispiel nur das
hören, was ich jetzt hier sage und mich jetzt im Augenblick nicht
sehen, beziehungsweise später, wenn sie sich das hier anhören.
Also, Befragung nicht nur für diejenigen, die hier in der Vorlesung
sitzen, präsent, sondern auch diejenigen, die eventuell sich zu Hause
diese Vorlesung anhören.
So, ich wollte Ihnen heute erstmal zu Beginn ein paar Dinge kurz
erzählen oder Sie kurz hinweisen auf ein paar Sachen.
Einmal ein Kolloquium morgen, wer daran Interesse hat.
Ein Kolloquiumsvortrag über das Thema von Menschen und Ameisen, Denken
und Handeln in komplexen Zusammenhängen.
Da erzählt jemand von Daimler-Chrysler etwas über interessante Dinge,
wie man heutzutage Autos entwerfen kann, in einer sehr anderen
Architektur, als man das so kennt.
Wer daran Interesse hat, kann dort hingehen.
In dem Raum ist allerdings nicht ganz so viel Platz, wie in dem Raum,
der am nächsten Mittwoch für eine Veranstaltung gebucht ist, nämlich
für das Kick-off-Meeting für eine Forschergruppe, beziehungsweise eine
Gruppe von Personen, die sich mit interessanten Forschungsprojekten
beschäftigen.
Insbesondere mit Systemen, die hier steht, E-Organisation, also das
ist der wesentliche Name.
E-Organisation, das heißt, das ist ein Forschungsschwerpunkt, der sich
beschäftigt mit der elektronischen Organisation von Firmen, Gruppen,
verschiedensten Dingen, die sich auf elektronische Art und Weise oder
zur Hilfenahme des Internets organisieren.
Dazu gibt es bereits hier in Karlsruhe an unserer Fakultät und der
Fakultät für Informatik eine ganze Reihe von Projekten, unter anderem
das Projekt SESAM.
Sie sollen ja auch etwas über Forschungsdinge erfahren hier.
Das Projekt SESAM steht für Selbstorganisation und Spontaneität in
liberalisierten und harmonisierten Märkten.
Dort beschäftigen wir uns, ich bin auch mit dabei, mit der Gestaltung
virtueller Marktplätze für die Energiewirtschaft.
Also mal die Utility-Märkte, virtuelle Kraftwerke und später einmal
Marktplätze für Variable Services, also tragbare Dienste, die man mit
sich rumträgt und die sich dann untereinander einigen darüber, wer
welche Aufgabe übernimmt.
Das ist eine Sache, also ein Projekt.
Dann gibt es hier noch so ein paar andere Dinge.
Es gibt andere Projekte, die jetzt hier gar nicht aufgeführt sind.
Es sind eine Reihe weiterer Firmen aufgeführt, die das unterstützen.
Und dieser Forschungsschwerpunkt wird vermutlich in nächster Zeit ein
Exzellenzzentrum werden für dieses Thema und als kick-off für dieses
Forschungszentrum, das Exzellenzzentrum, was es einmal werden soll
zurzeit, es ist ein Forschungsschwerpunkt, gibt es also eine
Veranstaltung am nächsten Mittwoch, 15 Uhr im Hörsaal am Forum, also
im Audimax.
Und da erzählen sehr interessante Leute etwas.
Weltweit führende Experten in Themen, die damit zusammenhängen.
Und zwar einmal von Professor Hal Varian, wer sich also irgendwie
beschäftigt hat mit dieser Thematik elektronische Dienste, Web
-Services, also alle möglichen Dinge, die in dem Zusammenhang eine
Rolle spielen, der weiß, der Name Varian spielt eine große Rolle.
Er wird etwas erzählen über Innovation, Components und Complements.
Dann erzählt Professor Lawrence Lessig von Stanford etwas über Free
Culture.
Der kommt aus Stanford von der Law School, also hier geht es um
rechtswissenschaftliche Dinge.
Und Professor David Clark vom MIT erzählt etwas über das Thema Is
there a future for the Internet?
Und ich denke jeder, der diese Vorlesung verfolgt hat, weiß, dass man
darauf nur eine Antwort geben kann.
Denn ohne das Internet gibt es keine Zukunft.
So müsste man das wahrscheinlich sagen.
Ich nehme an, dass er das ähnlich formulieren wird.
Auf jeden Fall sind das hier drei Personen von international sehr gut
bekannten Institutionen.
University of California, Berkeley, Stanford und MIT.
Das ist eine durchaus gute oder recht bekannte Institution.
Und ich denke, das wird ein sehr interessanter Nachmittag.
Kann ich nur empfehlen, da hinzugehen.
Sie sind alle herzlich eingeladen, sich das auch anzuschauen und
anzuhören.
Gut, das dazu.
Und dann... ja, das war diese Veranstaltung.
Dann kann ich gleich noch hinweisen auf eine Veranstaltung, die am 18.
Juni stattfinden wird.
Sie haben vielleicht so im Kopf, 17.
bis 19.
Juni ist der Stadtgeburtstag hier in Karlsruhe.
Und die Universität Karlsruhe ist dabei sehr stark aktiv.
Es gibt alle möglichen Veranstaltungen.
Und es gibt auch die Diplomfeier, die für Sie irgendwann mal relevant
sein wird.
Im Augenblick noch nicht.
Und bei der Diplomfeier wird jemand etwas erzählen, der am Tag davor
bei uns im Fakultätskolloquium einen Vortrag halten wird.
Und dieser jemand ist Andreas Weigend, der der Chief Scientist ist bei
Amazon.com.
Der erzählt etwas über das Verhalten von Nutzern in solchen Märkten,
wie sie Amazon.com aufmacht.
Also ein Thema, das für Hörer dieser Vorlesung sehr interessant sein
sollte.
Und ich möchte Sie auch darauf auf jeden Fall hinweisen, der Vortrag
wird sein am 18.06.
Freitagnachmittag 14 Uhr im Hörsaal 001, Bau 3, Kollegium am Schloss.
Dazu wird es noch Ankündigungen geben, Plakate und ähnliches.
Wir werden uns ja hier erst wieder am 17.
Juni sehen in der Vorlesung, also am Tag vor dem Vortrag.
Deswegen gebe ich es für sinnvoll, Sie jetzt schon einmal darauf
hinzuweisen.
Ich hatte allerdings hierfür jetzt keine Folie vorbereitet, das kommt
dann noch.
Also, drei Veranstaltungen morgen, interessanter Kolloquiumsvortrag
bei uns im Institut über Menschen und Ameisen.
Nächsten Mittwoch Kick-Off-Event für diese Forschungsschwerpunkt-E
-Organisation.
Und am 18.06.
im Rahmen dieses internationalen Alumni-Treffens und des
Stadtgeburtstags.
Und außerdem ist noch Tag der Technik im bundesweiten Jahr der
Technik.
Ein Vortrag von Andreas Weigen, dem Chief Scientist von Amazon.com.
Okay, das sei dazu erstmal genug.
Und jetzt wollen wir doch mal sehen, was wir eigentlich in der
Vorlesung machen wollten, bzw.
was wir dort gemacht haben.
Was wir gemacht haben, ist in dieser Datei...
Also, wir haben uns letztes Mal beschäftigt mit der Beschreibung von
Dokumenten mit XML.
Ich habe Ihnen XML vorgestellt und wir sind hier durch verschiedenste
Dinge durchgegangen.
Das Wesentliche ist das, was hier steht, die Trennung von Inhalt,
Struktur und Darstellung.
Genau wie bei SGML, bei XML sehr stark angepasst an das, was wir
heutzutage für Dokumente im Internet brauchen.
SGML ist da ja etwas anachronistisch in bestimmten Dingen, aber bietet
eine gute Basis, um XML zu formulieren.
Und nochmal, Inhalt über das XML-Dokument, die Struktur definiert über
eine Grammatik, die man hier Dokumententypdefinition nennt, oder ein
XML -Schema.
Und schließlich die Darstellung, die über Style Sheets definiert wird,
entweder Cascaded Style Sheets oder durch die XML Style Sheet
Language.
Dann hatten wir hier kurz gesehen, worum es eigentlich geht, dass man
Dokumente, je nachdem wo sie gebraucht werden, unterschiedlich
darstellen möchte.
Auf dem Drucker, auf dem Handy oder im Webbrowser.
Und ich hatte Ihnen dazu Beispiele genannt, da brauche ich jetzt nicht
im Einzelnen durchzugehen.
Wir haben gesehen, dass sie wohlgeformt sein können, dass sie gültig
sein müssen in Bezug auf die Einhaltung der Regeln an der Grammatik.
Wir hatten uns dann mit den Elementen von XML beschäftigt.
Ich hatte Ihnen hier dieses Beispiel vorgeführt, in dem man eine XML
-Datei sieht, im oberen Teil, und im unteren Teil die entsprechende
Definition der Elemente, wie sie in einer Dokumententypdefinition
vorkommen müsste.
Wir sind dann die einzelnen Teile hier durchgegangen, haben uns das
alles kurz angeschaut.
Und hier sah man dann zwei verschiedene Möglichkeiten.
Möglichkeit A war die Möglichkeit, eine Dokumententypdefinition
getrennt von dem Dokument aufzubewahren in einer extra Datei, sodass
man sich aus verschiedenen Dokumenten daraus beziehen kann.
Man kann aber eben auch direkt im Dokument die Definition der Struktur
einschließen.
Das war die Möglichkeit B.
Und das ist genau das, was wir zum Beispiel bei EDI vermisst haben,
dass ein Dokument selbst die Information in sich trägt, wie es
strukturiert ist.
Und das heißt, dann kann ja jemand, der dieses Dokument empfängt,
dieses Dokument auch entsprechend parsen und die Gültigkeit
feststellen und entsprechend darauf reagieren.
Mir fällt gerade ein, ich habe eine Sache noch vergessen.
Ich muss ja ganz kurz noch diese Werkzeuge starten, damit zumindest
diejenigen, die das möchten, reagieren können.
Dazu brauche ich das hier.
Entehe Feedback.
Und dauert einen kleinen Augenblick.
Na, da ist es.
Jetzt müssen wir noch ganz kurz in die Konfiguration rein.
AI2.
Passwort AI2.
Okay, dann sollte es eigentlich so stimmen.
Und dann gehen wir gleich hier in den Presentation Mode.
Und zurück auf unsere Präsentation.
Ne, die Präsentation waren wir noch gar nicht.
Wir waren an dieser Stelle.
Also, jetzt haben wir hier die Möglichkeit, für Sie wieder Feedback zu
geben oder Fragen zu stellen elektronisch.
So, das waren die beiden Möglichkeiten.
EDI bot das nicht.
Das haben wir dort vermisst.
Hier in XML sind diese Möglichkeiten da.
Und deswegen ist es halt wesentlich besser als EDI.
XML ist auch leistungsfähiger als HTML.
Dort hatten wir vermisst, die Möglichkeit, das Layout anzupassen und
auch ein bisschen mehr über die inhaltliche Bedeutung von
irgendwelchen Bestandteilen des Dokuments in der Struktur schon zu
notieren.
Und das sieht man halt hier, dass man bei dieser Art von Tags, die
verwendet werden, um das Wetter zu beschreiben, halt schon deutlich
sieht, was für Inhalte man dort erwartet.
So, dann hatten wir hier ganz kurz hingewiesen auf MathML.
Die Möglichkeit, Formeln zu beschreiben, auch sehr wichtig.
Zwar etwas umständlich, textuell eine Formel zu beschreiben, aber das
geht halt nicht wesentlich einfacher.
Es gibt dafür natürlich auch Editoren, aber dann geht das halt syntax
-gesteuert und etwas einfacher.
Wenn man das so aufschreibt, wird es ein bisschen aufwendig.
Hier war kurz der Hinweis auf EDIFAK und XML.
Dann hatten wir uns mit Namespaces beschäftigt und ich hatte Ihnen
dann die Schemata vorgestellt.
Und damit möchte ich jetzt einfach weitermachen nochmal mit der
Definition der Schemata.
Dann gehen wir jetzt auf diese Folie und gehen auf Präsentationsmodus.
Hier hatten wir halt gesehen, eine Alternative zu den Dokumententyp
-Definitionen, bei denen wir eine andere Möglichkeit haben, die
Elemente einer Struktur zu definieren.
Und diese Teile, die sahen halt so aus.
Eine Präambel, in der zunächst mal die Namespaces angegeben werden,
die in dieser Schema-Definition verwandt werden.
Dann eine Annotation, die Möglichkeit etwas zu beschreiben darüber,
was hier verwendet wird oder was hier gemacht wird in dem Schema, was
eigentlich definiert werden soll.
Und dann werden halt die einzelnen Elemente definiert, die wir in
einer ähnlichen Form ja auch in DTDs verwenden konnten, aber hier in
einer etwas anderen Syntax, die aber genau der Syntax von XML auch
entspricht.
Bei den DTDs war die Syntax etwas anders als in XML.
Dann gab es hier die Möglichkeit, Simple Types zu definieren.
Und das Wesentliche ist, ich konnte hier einen Simple Type definieren,
der neu ist, der einen anderen Datentyp einschränkt.
Solche Möglichkeiten habe ich in den DTDs nicht.
Hier also zum Beispiel Zeichenfolge Länge 30 konnten einfach durch
Einschränkung des Basistypes String definiert werden.
Und man kann auch Datentypen erweitern.
Man kann komplexe Datentypen definieren, zum Beispiel einen Adresstyp,
in dem eine Sequenz vorkommt.
Und wir haben halt hier dieses Element Sequenz.
Jetzt muss ich hier wieder meinen Stift erstmal einschalten.
Also die Sequenz definiert eine geordnete Folge von Elementen, die
auch wieder selbst komplexe Typen sein können.
Es ist klar, dass man hier dadurch in der Lage ist, wesentlich besser
komplexere Objekte aus Anwendungen zu beschreiben.
Man kann hier drin auch Referenzen verwenden, auch das ist
vorteilhaft.
Ich kann Bezug nehmen auf ein Element, das an einem anderen Ort
bereits definiert ist und an einer anderen Stelle in dem Schema auf
ein Element Ort.
Auch das hier nicht nur einmal explizit aufzuführen.
Und das erleichtert natürlich die Definition.
Dann gab es noch weitere Möglichkeiten für komplexe Datentypen,
Gruppen, All, Choice oder Sequence.
Bei Gruppe ist es so, dass wir mehrere Elemente zu einer Gruppe
zusammenfassen und über den Gruppennamen referenzieren können.
Das ist etwas, was auch die Möglichkeiten erleichtert, weitere Typen
zu definieren.
Dann kann ich All hinschreiben.
All bedeutet, alle Reihenfolgen der Sequenz sind erlaubt.
Also dann schreibt man nicht Sequenz hin, sondern All und dann ist die
Reihenfolge der Elemente gleichgültig.
Hier in dem Beispiel hier oben war es so, dass die Reihenfolge
natürlich vorgeschrieben ist.
Erst die Straße, dann die Hausnummer.
Wenn ich All dorthin geschrieben hätte und nicht Sequence, wäre die
Reihenfolge beliebig gewesen.
Und dann gibt es noch Choice, die Möglichkeit auszuwählen zwischen
mehreren Alternativen.
In diesem Fall sind die Alternativen entweder hier eine Sequenz zu
nehmen oder ein Element.
Das Element ist ein Postfach, die Sequenz ist hier Straße und
Hausnummer.
Dann gibt es noch die Möglichkeiten anzugeben, wie häufig ein Element
vorkommen soll.
Auch das ist wichtig, dass ich nicht jedes Element 17 Mal hinschreiben
muss, wenn es 17 Mal vorkommen soll.
Ich kann das über Min und Max occurs angeben.
Lassen Sie mich ganz kurz auf das Programm XML-Spy umschalten.
Da kann man sich z.B.
anschauen, das wäre hier ein solches Schema.
Und um Ihnen zu zeigen, wie vorteilhaft so ein Editor verwendet werden
kann, da kann man sich ja z.B.
anschauen, wie sieht denn eigentlich die Struktur aus.
Ich habe jetzt also die textuelle Version genommen.
Jetzt schaue ich mir die Struktur an und sehe jetzt eine Struktur
angegeben.
Die möchte ich aber jetzt nicht in dieser tabellarischen Form sehen,
sondern ich möchte die als Baum sehen.
Und dann sehen Sie hier die Struktur dieses komplexen Datentyps
Adresse.
Und hier sehen Sie also das hier.
Das ist eine Sequenz von Ort und Postleitzahl.
Und dann kommt noch etwas, wobei die Reihenfolge eigentlich heutzutage
anders sein müsste, aber das ist egal.
Es steht also immer zuerst der Ort, dann die Postleitzahl und dann
steht hier etwas.
Und das ist die Auswahl zwischen entweder Straße und Hausnummer oder
Postfach.
Also so ein Editor ist halt sehr hilfreich.
Sie können dann hier drin, auch sittags gesteuert, natürlich diese
Definition modifizieren und verändern, weitere Dinge hinzufügen.
Das wollen wir jetzt nicht machen.
Ich wollte nur zeigen, welche schönen Möglichkeiten man hat, dann
wirklich die Struktur eines Dokuments oder einer Dokumentdefinition
sich hier klarzumachen.
Das ist vor allen Dingen für den vernünftigen Entwurf eines Dokuments
wichtig.
Wenn Sie sich das nur in der Textversion anschauen könnten, dann wäre
das etwas schwieriger, die Struktur wirklich genau zu erkennen.
Das hängt davon ab, wie Sie das dann aufschreiben.
Und deswegen für den Entwurf solcher Dokumente setzt man
selbstverständlich Werkzeuge ein.
Leider kann ich Ihnen nicht allen die XML-Spy zur Verfügung stellen.
Wenn Sie das in den Übungen jetzt machen müssen, müssen Sie das per
Hand irgendwo editieren.
Aber wenn man öfter XML-Dokumente entwerfen muss, ist es ganz klar,
dass man solche Werkzeuge dann verwendet.
Gehen wir zurück zu unserer Präsentation.
Wir haben also hier diese Strukturierungsmöglichkeiten.
Wir können Attribute definieren.
Kennen wir ja auch aus der DTD.
Und hier fehlt natürlich etwas Text.
Das war falsch animiert.
Also hier kann ich verschiedene Sachen hinschreiben.
Ich kann Optional hinschreiben oder Required als bei Use.
Und entsprechend ist dann das Attribut optional oder unbedingt
erforderlich.
Sie erinnern sich, dass wir das bei DTDs auch angeben konnten.
Und hier ist nochmal ein anderes Schema, wo man auch auf den ersten
Blick gar nicht genau sieht, was es eigentlich ist.
Wenn man das in XML-Spy anschaut, ist das alles wieder viel einfacher.
Dann sieht man...
muss ich einmal kurz gucken...
das dazu...
muss ich ganz kurz jetzt das aufmachen.
Ich glaube, ich habe das...
Genau, das ist dieses hier.
Das ist also das Schema, das gerade auf der Folie zu sehen war.
Es ist etwas klein geschrieben.
Sie können es vielleicht doch lesen.
Und jetzt schaut man sich an, wie ist die Struktur.
Das eine ist also Element Name.
Das ist gar nichts weiter.
Das ist einfach nur dieser Name in String.
Die Bedeutung steht also hier auf der rechten Seite.
Und wir können wieder zurückgehen zu der anderen Ansicht.
Hier haben wir also eine Reihe von solchen Elementen, die definiert
sind.
Das einzige strukturierte Element ist das hier unten.
Da haben wir halt eine Liste, Kundenliste.
Sie erinnern sich, wir hatten diese Datentyp-Definition oder
Dokumententyp -Definition.
Eine Kundenliste, die ist hier jetzt einfach nochmal als Schema
definiert worden.
Und kann ebenso auch die Struktur eines Dokuments definieren.
Gut, das nur kurz zu diesen Möglichkeiten der Schema-Definitionen.
Wir schauen uns einfach an, wenn wir jetzt so eine Liste tatsächlich
definieren wollen, dann steht eben hier genau wie vorher, Sie erinnern
sich an das XML-Dokument, das wir vorher schon mal hatten, Title
gleich Kundenliste.
Das bezieht sich jetzt eben auf diese Schema-Definition, die hier
unten steht.
Auszug aus dem Schema der vorigen Folie.
Attribute Name, Title, Type, XSD, String.
Und genauso sind die anderen Bestandteile in diesem XML-Dokument halt
oder werden validiert durch Bezug auf das Schema.
Nicht mehr durch Bezug auf die Dokumententyp-Definition.
Ich sehe, dass hier eine Frage ist.
Ich soll etwas lauter stellen.
Aha, das kann ich gerne machen.
Das können wir ganz einfach hier machen.
Das sollte so eigentlich jetzt in Ordnung sein.
Ich hoffe, das reicht so.
Ja?
Wenn nicht, können Sie sich ja nochmal melden.
Also irgendjemand, der mich jetzt nicht gut verstehen kann?
Niemand?
Okay.
Also, dann haben wir also hier diesen einen Teil einfach nur
rausgeholt.
Und jetzt müssen wir wieder zurückgehen auf unsere Präsentation.
Hier ist nochmal dieses Schema angegeben.
Und hier wird der Namensraum definiert.
Das war also der Namensraum.
Dann haben wir hier eine Definition von Name und E-Mail.
Weiter unten an dieser Stelle, bei der Sequenz, wird auf Name und E
-Mail Bezug genommen.
Das wird halt nicht in die Definition des komplexen Datentyps
hineingenommen, sondern extern oder weiter oben definiert.
Darauf kann dann mehrfach wieder Bezug genommen werden.
Es macht eigentlich nicht viel Sinn, wenn man nur einmal darauf Bezug
nimmt.
Sinn macht es, wenn man mehrfach darauf Bezug nimmt.
Aber im Vorlesungsbeispiel kann man halt nicht immer alle
Möglichkeiten darstellen.
Hier haben wir nochmal die Sequenz, geordnete Gruppe von Elementen.
Da wird angegeben, wie oft diese Elemente vorkommen sollen.
Und hier steht halt, dass wir eine leere Liste haben können.
Was wie immer Sinn macht oder auch nicht.
Also überhaupt kein Kunde.
Oder wir können auch beliebig viele dort reinschreiben.
Es gibt keine Obergrenze für die Anzahl der Kunden, die in der Liste
aufgeführt sind.
Also, das war das Schema.
Und nochmal kurz zu den Strukturen.
Das ist eine wesentliche Sache, dass wir hier jetzt komplexe
Datentypen haben, mit denen wir die Objekte, die wir mit dem XML
-Dokument beschreiben wollen, halt strukturieren können.
Auf eine wesentlich elegantere Art und Weise, als das mit
Dokumententyp -Definitionen möglich wäre.
Ich brauche, glaube ich, auf die einzelnen Teile gar nicht nochmal...
Ganz kurz, Gruppe haben wir hier, Attributgruppen.
Wir haben die Verknüpfung Sequenzen, All oder Choice.
Und wir haben die Möglichkeit, Datentypen zu modifizieren, durch
Einschränkung, durch Erweiterung, durch Vereinigung von Datentypen.
Und wir können Listen von Elementen auch angeben.
Also das sind einfach dann...
Modifikationen von Datentypen wesentlich mehr, als wir das in anderen
Teilen hatten.
Oder bei XML und bei den DTDs hatten.
Nochmal kurz zu den eingebauten Basis-Datentypen.
Einmal haben wir hier also einfach nur Identifikatoren, Referenzen,
Entities.
Ihr erinnert sich, Entities, das waren diese Bezüge auf Umlaute und
ähnliches.
Oder Bezüge auf irgendwelche Makros, die man definiert hat.
Dann haben wir hier Tokens, wir haben Namen, wir haben Qualified
Names.
Also Namen, die mit einem Namespace qualifiziert sind, mit einem
Präfix qualifiziert sind.
Oder wir haben NC Names, das sind auch Namespace-Namen, die aber ohne
Präfix und Doppelpunkt angegeben werden.
Dann gibt es weitere Datentypen, nämlich Integer.
Ich kann also irgendeine ganze Zahl angeben, auf diese übliche Art und
Weise, mit Vorzeichen und Dezimalziffern dahinter.
Ich habe einen Bereich Non-Positive Integer, das heißt negative Zahlen
oder Null.
Ich habe negative Zahlen, also das Non-Positive ohne Null.
Ich habe dann die Datentypen, die mit den Datentypen aus
Programmiersprachen, die Sie aus Java kennen, zum Beispiel, kompatibel
sind.
Nämlich long, int, short, byte.
Das ist ja wichtig, wenn Sie jetzt so ein Dokument verarbeiten wollen
mit einem Java-Programm.
Dann wollen Sie irgendwelche Daten übernehmen und dann ist es wichtig,
dass Sie genau solche Inhalte dort stehen haben, die Sie dann
entsprechend aus einem XML-Dokument auslesen können.
Entsprechend diesen Typen.
Das ist halt klar, hier haben Sie die Wertebereiche, weil das bei long
halt 64-Bit sind, bei int 32-Bit, bei short 16-Bit und bei byte gerade
8 -Bit.
Dann kann man genau das gleiche machen, was man hier mit negativen
gemacht hat, auch mit den positiven.
Also nicht negative Zahlen, positive Zahlen.
Dann gibt es unsigned long, unsigned int und so weiter.
Datentypen, die Sie alle kennen.
Hier unten noch die Gleitpunktzahlen, float, double.
Sie können auch decimal angeben oder boolean.
Also die Datentypen, die Sie aus Programmiersprachen kennen, sind ja
auch nochmal verfügbar.
Weitere eingebaute Datentypen.
String, hatten wir schon gesehen.
Dann können Sie ein Datum angeben, das ein spezielles Format haben
soll.
Zum Beispiel hier in dieser Art 2001, also 30.08.2001 wäre in dem Fall
so anzugeben.
Oder eine Zeit angegeben in Stunden, Minuten, Sekunden.
Und dann noch eine Zeitverschiebung.
Dann können Sie ein Time Instant angeben, also an einem Tag eine
bestimmte Uhrzeit.
Time Period, das wäre hier sieben Monate im Monat.
Das wäre hier der erste Monat im Jahr.
Ein Jahr, gut, das erste Jahr, das wäre das Jahr 01.
Century in 19, also solche Möglichkeiten haben Sie dann hier halt,
Datentypen zu strukturieren.
Verschiedene Sachen, zum Beispiel hier, schauen Sie sich mal an.
Und Time Duration, wenn Sie das hier anschauen, denken Sie, was ist
das denn bloß?
Es steht überall 0000 und so weiter.
Also, ich habe das mal kurz zitiert, was dort eigentlich steht.
Bei Time Duration, das ist das Format, das hier unten angegeben ist.
Da steht ein Jahr, also vor dem Y steht eine Jahreszahl.
Da steht in diesem Fall 0, das wäre natürlich das Jahr 0.
Dann steht dahinter ein Monat mit N.
Dann steht N für den Tag.
Und dann steht dahinter die...
Aha, das Punktnetz ist weg.
Dann steht dahinter die...
Deswegen ist jetzt auch mein Werkzeug hier nicht mehr verbunden.
Also, jetzt steht dahinter noch, hinter dem T stehen noch Stunden,
Minuten und Sekunden.
Also, das hier wäre 0000, Zeit 1.30 Uhr.
Und dann kann man noch weitere Datentypen angeben.
Die brauche ich, glaube ich, im Einzelnen gar nicht genau hier
anzugeben.
Sie können Sprachen definieren.
Und wir haben also auf jeden Fall eine Vielfalt von Datentypen zur
Verfügung, die es wesentlich erleichtert, Dokumente zu strukturieren,
wie ich das schon sagte.
Jetzt will ich doch mal kurz versuchen, wieder den Kontakt
herzustellen zum Netz.
Ich befürchte, ich habe jetzt keinen Kontakt mehr.
Dann lassen wir das.
Das sind die Nachteile eines...
Ja, lassen wir das jetzt.
Ich kann hier also im Augenblick nicht drauf zugreifen.
Deswegen ist das Interaktionswerkzeug jetzt für mich hier nicht
nutzbar.
Und ich kann es genauso gut auch hier rausnehmen.
Gut, jetzt kommen wir zu einem weiteren Bestandteil der XML
-Definitionen.
Und dieser Bestandteil bezieht sich auf etwas, was ganz interessant
ist.
Das sind Erweiterungen von XML, die Sie aber in vielen XML-Browsern
oder XML-Parsern noch gar nicht finden.
Das sind aber wichtige Konstrukte, die man in Dokumenten gerne
verwenden möchte.
Man kann damit einige Dinge sehr interessant beschreiben.
Also xlink ist die XML-Linking-Language.
Sie wissen, dass HTML die Sprache war, die es ermöglichte, Verweise zu
setzen zwischen Dokumenten.
Und diese Art der Verweise werden hier in xlink einfach etwas
erweitert.
Hier werden also Konstrukte definiert, die es erlauben, Beziehungen
zwischen Objekten zu bezeichnen.
Das ist also nicht nur ein einfacher Verweis, sondern hier haben wir
etwas allgemeiner Beziehungen zwischen Objekten.
Die werden natürlich mit XML-Syntax beschrieben.
Selbstverständlich muss man hier sowohl die Hyperlinks von HTML als
auch ein Spezialfall drin haben.
Aber es sollen auch kompliziertere Links möglich sein.
Schauen wir uns das an.
Die einfachen Links kennen wir aus HTML.
Da steht zum Beispiel, das ist hier angegeben, das war ja das kleine a
für Abkürzung für Adresse.
Da stand dort eine Hyper-Reference, HTTP und so weiter, eine URL.
Und dahinter, hinter dieser schließenden eckigen Klammer, stand dann
der Name, der mit diesem Link verbunden sein soll.
Das Ganze kann man in XML natürlich auch angeben.
Jetzt muss man aber zunächst mal einen entsprechenden Namespace
angeben, den xlink-Namespace.
Dann wollen wir einen Simple-Type definieren, also einen einfachen
Link in XML.
Und dieser Link soll folgende URL bezeichnen.
Das ist im Prinzip der Punkt, wohin das Ganze verweisen soll.
Das ist genau die URL, die oben auch steht.
Also da ist diese Angabe, die oben auch mit href bezeichnet war.
Dann steht hier extra nochmal der Titel dieses Links.
Habe ich jetzt abgekürzt, FGEffizienteAlgorithmen.
Das heißt, jetzt habe ich hier genau das gemacht, was ich oben auch
konnte.
Ist nur etwas länger geworden, ein bisschen mehr, man könnte sagen,
Syntactic Sugar.
Aber das erlaubt eben auch, das werden wir gleich sehen, etwas
kompliziertere Dinge zu machen.
Dann kann ich hier noch angeben, wo eigentlich dieser Link geöffnet
werden soll.
Wenn Sie auf einen Link klicken auf einer Webseite, dann wird manchmal
an der Stelle in dem Dokument etwas geöffnet.
Oder es kann sein, dass ein neues Browserfenster aufgeht.
Das kann man hier halt angeben.
Da steht hier New.
Dann gibt es Möglichkeiten, dass man sagt, es soll etwas Onload
aufgehen.
Das heißt, jetzt wird ein Dokument geöffnet.
Darin, ein HTML-Dokument wird geladen vom Server.
Oder ein XML-Dokument wird vom Server geladen.
Im XML-Dokument kommt dieser einfache Verweis vor, aber da steht
Onload.
Das heißt, in dem Augenblick, wo die Seite geladen wird, soll bereits
dieses weitere Fenster aufgehen mit der URL, die hier oben angegeben
ist.
Das ist etwas, was Sie in HTML nicht zur Verfügung hatten.
Und natürlich kann hier statt Adresse auch ein beliebiger anderer Tag
-Name stehen.
Das ist hier nur so hingeschrieben zur Kompatibilität mit dem A in
HTML.
Also, es sieht etwas komplizierter aus, aber man kann sich schon
vorstellen, dass man hier eben auch mehr mitmachen kann.
Und hier nochmal kurz zur Läuterung.
Der Type ist in diesem Fall also Simple.
Dann können wir entweder New oder Replace sagen.
Das heißt, der Link soll ersetzt werden durch das, was dort dann
geladen wird.
Das wäre Replace.
Bei New gehen wir halt in ein neues Fenster hinein.
Dann kann ich sagen, wie ein Link tatsächlich aktiv wird.
Entweder dadurch, dass ein Benutzer raufklickt oder dass er
automatisch geladen wird.
Der Titel ist klar, liefert die Beschreibung des Links.
Aber es ist nicht so, dass dieses Attribut von der xLink-fähigen
Anwendung genutzt werden muss.
Das waren die einfachen Links.
Kennen Sie alle im Prinzip aus HTML.
Und die kann man halt hier in XML dann auch verwenden.
Jetzt gibt es aber auch noch erweiterte Links.
Und da gibt es die Positionen, die in einem erweiterten Link beteiligt
sind.
Ich möchte also explizit eine Verbindung zwischen zwei Positionen
definieren.
Dann wird dieses xLink-Arg verwendet.
Und dort kann man also den Endpunkt eines Links festlegen.
Also ich habe hier einen Link, den möchte ich gerne definieren.
Ich lege den Endpunkt fest, da steht TO.
Das heißt, das wäre die Adresse, wo ich hinlaufen will.
Und ich kann auch den Startpunkt angeben.
Eine URL für den Startpunkt, das ist FROM.
Und jetzt kann ich auch noch die Rolle, die Funktion des Inhalts
definieren.
Diese Möglichkeiten gibt es, Rollen von Links zu definieren.
Ein Beispiel sehen Sie hier.
Hier ist ein Locator.
Also href ist otto-mustermann.xml, role Elternteil, title otto
-mustermann.
Und hier sehen Sie dann noch einmal katja-mustermann, role Kind, title
otto -mustermann.
Und dann sehen wir hier, da steht jetzt ein Link.
Arc from Elternteil to Kind.
Show, replace, actuate on request.
Das heißt, hier haben wir einen Link von otto-mustermann auf katja
-mustermann.
Hier können wir also auf die Dokumente zurückgreifen.
Wenn wir diesen Link verwenden, gehen wir zum Ursprung des Links.
Das wäre in dem Fall otto-mustermann oder zum Ziel des Links, das wäre
dann halt das Kind.
Das also zur Möglichkeit, solche Links etwas erweitert zu definieren.
Jetzt möchte ich Teile eines XML-Dokuments adressieren.
Dafür brauche ich etwas, was sich XPath nennt.
Eine weitere Sprache, die XML ergänzt.
Das heißt, ich habe hier irgendein Dokument und ich möchte jetzt an
eine ganz spezielle Stelle im Dokument springen.
Wozu brauche ich das?
Ich habe gesagt, wir müssen ein XML-Dokument hier auch irgendwie
darstellen.
Wir müssen ein Layout definieren.
Also die Layout-Definition geschieht über das XSLT, also den Style
Sheet Transformer.
Und in dem XSLT sage ich, wie bestimmte Teile eines XML-Dokumentes
dargestellt werden sollen.
Und ich kann halt mit dem XSLT z.B.
aus einem XML-Dokument ein HTML-Dokument erzeugen.
Und kann dort angeben, welche Bestandteile aus dem XML-Dokument jetzt
an welchen Stellen, und auch vielleicht einmal oder zweimal oder wie
immer, in einem HTML-Dokument auftauchen sollen.
Das kann ich mit XSLT machen.
Muss dazu natürlich die Bereiche in dem XML-Dokument adressieren
können.
Und das wird jetzt in einer eigenen Syntax festgelegt.
Ich kann hier mit bestimmten Mustern nach Orten in dem Dokument
suchen.
Und das Ganze werde ich jetzt ganz kurz andeuten, wie das gemacht
wird.
Ein wichtiger Begriff ist der Begriff einer Achse.
Also so ein XPath-Ausdruck besteht aus einem Triple.
Da ist eine Achse drin, ein Knotentest und ein Prädikat.
Die Achse definiert, an welcher Stelle ich einen Test mache auf den
Inhalt dieses Knotens.
Und die möglichen Achsen sind in diesem Fall Child, Parent oder
irgendein weiteres Attribute.
Warum Child, Parent und so weiter?
Ein XML-Dokument ist baumstrukturiert.
Ich bin an einer bestimmten Stelle im Dokument, habe also mein XML
-Dokument bis zu einer bestimmten Stelle abgearbeitet und jetzt möchte
ich irgendetwas machen mit einem Elternknoten, also Parent, oder mit
irgendwelchen Kindknoten oder möchte irgendwelche Attribute dort
verwenden.
Und ich kann dann spezielle Elemente innerhalb dieser Achse
spezifizieren.
Das Prädikat, das auftaucht, ist in diesem Fall ein bool'scher
Ausdruck, der für jeden Knoten aus dem Knotentest ausgewertet wird.
Das heißt, ich spezifiziere über den Knotentest eventuell auch eine
Gruppe von Knoten und kann jetzt suchen in dieser Gruppe von Knoten
nach irgendwelchen Elementen, die diesem Prädikat entsprechen.
Ich gebe gleich ein Beispiel dafür.
Also, dieses hier ist so ein Dokument in verschiedenen Formen.
Sie erinnern sich, ich hatte Ihnen das ja dargestellt in dem XML-Spy.
Da gab es verschiedene Ansichten.
Hier oben, das wäre die textuelle Version, die hier abgekürzt ist,
einfach nur mit einbuchstabigem Text, damit man ein bisschen mehr
raufkriegt auf die Seite.
Einfach nur so angegeben.
Und das ist ja im Prinzip eine Baumstruktur.
Die Baumstruktur konnten wir in XML-Spy auch sehr schön uns anschauen.
Hier ist sie auch angegeben.
Also, das ist die Struktur dieses Dokuments, das Sie dort in dem
gelben Feld sehen.
Und wir nehmen an, wir sind hier an dieser Stelle beim Knoten D.
Das ist jetzt also die Position, die wir mit self präferenzieren
können.
Das ist der Punkt, wo wir sind.
Das ist unsere Achse im Augenblick.
Das ist also eine Achsenangabe.
Jetzt werden alle Bezeichnungen hier gemacht, relativ zu dem Punkt, wo
wir uns gerade in dem Baum befinden.
Wie gesagt, bei self ist der Knoten, der gemeint ist, der Knoten D.
Jetzt kann ich sagen parent.
Parent von D ist klar, das kann nur der Knoten B sein.
Ich habe ja nur einen Elternknoten.
Also ist parent der Knoten B.
Wenn ich jetzt auf child gehe, dann gucke ich mir die Menge aller
Knoten an, die child sind.
Und das sind die Knoten E und G.
Also das sind hier beides Children, beides Kinder, dieses Knoten D.
Deswegen habe ich jetzt eine Menge von Knoten damit spezifiziert.
Also wenn ich bei B gewesen wäre, dort child gesagt hätte, hätte ich
halt C, D, H und I als Knotenmenge spezifiziert.
Entsprechend kann ich sagen descendant.
Descendant an der Stelle wäre auch noch der Knoten F.
Das wären nämlich alle Knoten, die unterhalb der aktuellen Position
liegen.
Also alle Knoten des Teilbaumes mit Wurzel D.
Das wäre descendant.
Descendant or self würde den Knoten D mit einschließen.
Und dann kann ich sagen ancestor, das wären also Vorgänger.
Vorgänger ist also nicht nur parent, sondern alle Vorgänger.
Das wären also alle Knoten auf dem Pfad bis zur Wurzel, das wären B
und A.
Ancestor or self ist klar, dann ist B mit drin.
Dann kann ich noch weitere Dinge angeben, wie zum Beispiel preceding.
Preceding in diesem Fall ist der Knoten C.
Hier habe ich ja, wenn das so aufgeteilt ist, eine Folge von
Elementen.
Und C ist das Element, das vor dem Element D in dem Dokument steht.
Deswegen ist das das preceding Element.
Und preceding, Sibling wäre in dem Fall der vorliegende Geschwister.
Sibling ist ja Geschwister, wäre in dem Fall auch C.
Following, das wären alle, die danach folgen auf der Ebene.
H, I, die folgen.
So, und jetzt folgen auch noch diese hier, J und K, also die
Nachfolger.
Von den folgenden Knoten sind auch mit da drin.
Das sind J und K.
Und dann kommen dahinter auch noch L und M in dem Dokument.
Also, schauen wir uns das an.
Wir sind hier bei D.
D war diese Position.
Wenn wir jetzt auf Following schauen, dann sehen wir hier H, I, J, K,
L und M.
Das sind also alle folgenden.
Und da wird jetzt das hier praktisch so durchgeguckt, dass wir alle
folgenden anschauen, die im Dokument noch dahinter sind.
Und Following-Sibling wären die folgenden Geschwister auf der gleichen
Ebene, die also den gleichen Elternknoten haben.
Das sind natürlich nur die Knoten H und I.
Ja, eine Frage.
E, F und G sind bei Following nicht drin.
Die wären drin, wenn ich Following-Orself hinschreiben würde.
Dann wären die mit drin.
Die werden mit zu dem Knoten, also man guckt dann alles das an, was
hinter D praktisch...
Ich habe ja hier den Endknoten von D annotiert.
Die werden praktisch mit da eingeschlossen.
Das, was hinter dem Knoten D kommt, und da schaue ich halt auf das
Endetag von D, alles was dahinter kommt.
Und E, F und G tauchen halt vor dem Ende von G auf.
Gut, das also zu dieser Möglichkeit, wie man jetzt verschiedene Orte
in so einem Dokument beschreiben kann.
Und jetzt schauen wir nochmal weiter.
Hier haben wir halt jetzt verschiedene Knotentypen.
Also, wir haben Wurzelknoten, Elementknoten, Attributknoten,
Textknoten.
Wir konnten irgendetwas ausführen, wir konnten was kommentieren oder
Namespaces angeben.
Und das sind halt verschiedene Arten von Knoten, die man spezifizieren
kann in diesen Angaben.
Jetzt werden Knotentests gemacht.
Also, wenn ich hinschreibe Book, dann werden alle Tags gesucht, die
die Bezeichnung Book tragen, in den Knoten, die ich ausgewählt habe
über diese Achsen Ausdruck.
Oder wenn ich Note sage, alle Knoten in der Achse.
Text sucht alle Elemente mit reinem Text.
Oder Comment alle Kommentarknoten.
Oder Processing Instruction alle Anweisungen, die in der Knotenmenge,
die ich ausgewählt habe, vorkommen.
Also, so könnte ich eben sagen, ich möchte alle Anweisungen haben, die
im weiteren Verlauf des Dokuments noch irgendwo vorkommen.
Beispiele hier.
Attribute, da steht jetzt ein Stern.
Da werden alle Attributknoten identifiziert.
Child Text, also alle Child Knoten, die Textinhalt haben.
Dann Prädikate, ich kann in die Prädikaten Vergleichsoperationen
reinschreiben und kann dadurch also noch genauer suchen.
Nicht nur danach suchen, ob das jetzt ein Knoten mit einer bestimmten
Marke ist, sondern kann noch weitere Sachen angeben.
Auch dafür kommt gleich ein Beispiel.
Es gibt, bevor ich jetzt das Beispiel bringe, noch hier ein paar
Abkürzungen.
Auf Child wird häufig verzichtet.
Einfach weil das, wenn man sucht, man in der Regel unter den Kindern
halt sucht, dann kann man Attribut abkürzen auf eine bestimmte Art und
Weise.
Man kann den eigenen Knoten durch einen Punkt angeben, den Vorgänger
durch Punktpunkt.
Sie erinnern sich an die Notation, die wir ansonsten haben, wenn wir
in Verzeichnisbäumen laufen.
Die gleiche Notation wird hier halt verwendet.
Ich kann die Bezeichnung Descendent or Self, das wären ja alle
Nachfolger, einfach durch zwei schräge Striche angeben.
Also alle Knoten, die von diesem Knoten an in dem Dokument drin sind.
Und man kann auch sagen, ich möchte eine bestimmte Position haben,
also das dritte Kind eines Knotens kann ich hier auch angeben.
Wird auch etwas abgekürzt und jetzt kommen hier endlich Beispiele.
Also hier Book, also Child, hier ist es nicht abgekürzt.
Child Book Position kleiner gleich drei.
Hier wird also gesucht nach Kind, also nach Knoten unterhalb dieses
aktuellen Knotens, die den Typ Book haben, also Book Tags.
Und ich möchte aber nur die ersten drei Kind-Elemente anschauen.
Also, ich schaue mir alle Bücher, ich suche nach allen Bücher-Knoten
unter den ersten drei Kindern.
Solche Dinge kann man hier angeben.
Das heißt, ich kann auf diese Art und Weise dann sehr schön in einem
Dokument Bereiche auswählen.
Hier will ich alle Element-Knoten mit Tag Name Adresse suchen.
Oder hier werden Name-Element-Knoten direkt unter Adresse-Element
-Knoten gesucht.
Das heißt, ich suche hier also Knoten, die ein Adress-Tag haben.
Und unterhalb dieses Knotens, das ist hier dieser Schrägstrich, soll
dann ein Knoten sein, der gerade ein Name-Element-Knoten ist.
Oder ich suche nach einem ganz speziellen Namen, in diesem Fall John
Doe.
Oder ich suche nach allen Namens-Knoten unterhalb eines Book-Knotens.
Sie sehen verschiedene Möglichkeiten, Bereiche in einem XML-Dokument
zu adressieren.
Und das ist eben ein ganz wichtiger Punkt.
Ich kann dadurch XML-Dokumente sehr systematisch transformieren in
eine andere Struktur.
Ich kann daraus ein HTML-Dokument machen, kann die Inhalte, die in
einem XML-Dokument drinstehen, jetzt in ein anderes Dokument
hineinschreiben und der Verwendung dieser XPath-Ausdrücke kann ich
dann also zugreifen auf die Bereiche.
Weitere Beispiele...
Also hier, ich kann die Wurzel eines Dokuments hier adressieren.
Ich kann, naja, irgendwas unterhalb von Adressen, einen Namen
unterhalb von Adressen angeben.
Das wäre also ein Name-Element-Knoten irgendwo im Dokument.
Oder ich möchte hier Attribut-Knoten mit Namen Type, also ich möchte
Type -Attribut haben unterhalb von Adress-Element-Knoten.
Und in diesem Fall hätte ich hier ein E-Mail-Attribut-Knoten unterhalb
von Adress.
Okay, das also zu diesen Möglichkeiten von XPath.
Noch ein paar Beispiele.
Hier möchte ich den Adress-Element-Knoten mit einem direkten Name
runterknoten haben.
Also Adress und darunter direkt Name oder hier Adress und darunter
Name John Doe und so weiter.
Ich glaube, das ist klar, was hier für Möglichkeiten bestehen.
Die genaue Spezifikation finden Sie da, wo ich schon immer darauf
verwiesen habe, bei W3C in den ganzen Dokumenten, die dort die
Standards definieren.
XPointer, eine weitere Variante, eine weitere Ergänzung von XML,
ständig aktualisiert worden.
Letztes Mal im März vorigen Jahres.
Hier gibt es weitere Möglichkeiten, auf interne Strukturen von XML
-Dokumenten zuzugreifen.
Hiermit kann ich die Struktur von Dokumenten bearbeiten.
Das wird in der Regel eingesetzt in XSLT, um zuzugreifen auf die
verschiedenen Bestandteile von Dokumenttypen.
Ich gehe auf XPointer nicht im Einzelnen ein.
Es macht keinen Sinn, hier alle Varianten von XML zu beschreiben.
Ich wollte Sie nur darauf hinweisen, dass es eine ganze Reihe
Varianten oder Ergänzungen von XML gibt, die, hatte ich auch schon
gesagt, nicht von allen XML-Pathern unterstützt werden, aber diese
Pointer und Path-Ausdrücke, die werden in XSLT verwendet.
So, das war dieses XPointer.
Hier wird also die Möglichkeit, die man in den XPath hat, also
irgendwelche Bereiche zu adressieren, ergänzt, um beliebige Positionen
in XML-Dokumenten anzugeben, um Bereiche zu definieren und um
Musterkennung zu machen.
Ich führe das hier nur relativ kurz auf.
Ich halte es nicht für sinnvoll, Ihnen alle Einzelheiten davon an
dieser Stelle zu präsentieren.
Wenn Sie XML-Dokumente erzeugen oder auch mit XSLT arbeiten, dann
müssen Sie sich die Spezifikation sowieso in dem Augenblick anschauen,
wenn Sie es machen.
Das kann sein, dass Sie das in einem Jahr machen oder in zwei Jahren
oder irgendwann später im Beruf und bis dahin sind die Standards
sowieso weiterentwickelt.
Das, was ich Ihnen hier vermitteln kann, ist eigentlich nur, welche
Möglichkeiten durch diese Erweiterungen geschaffen werden.
Also, hier ist ein kurzes Beispiel angegeben.
Schauen wir uns das mal an.
Hier auf der linken Seite sehen wir ein XML-Dokument und da kommen
irgendwelche Daten vor.
Eine Adresse, Mustermann, also ID ist Mustermann, ein Name, Vorname,
dann ein Herr Karl Mayer usw.
Und hier sehen wir jetzt eine Adresse, ein Link, simple.
Und hier steht jetzt die Adresse .xml und da steht jetzt dieser
Ausdruck addid Mustermann.
Das heißt, hier will man genau auf diese Adresse zugreifen.
So wird hier also definiert, an welcher Stelle oder worauf sich
tatsächlich dies bezieht.
Sie kennen das auch aus HTML, da gibt es auch diese
Nummernmöglichkeiten.
Also, dass man angibt, dieses Doppelkreuz und dann dahinter eine
Bezeichnung.
Nur hier haben wir halt die Möglichkeit an beliebige Stellen zu
springen.
Also, hier wird auf dieses Mustermann zugegriffen.
Und ja, gleiche hier nochmal für die Möglichkeit hier auf die Adresse
.xml zuzugreifen, die hier sich auf die ID Mayer bezieht.
Okay, ich gehe hier in das Dokument Adresse .xml und dort halt an die
Position Mayer.
Das zu Xpointer, ich kann also in Dokumente damit hineinspringen, an
spezielle Positionen.
Eine weitere Ergänzung, XML Query Language.
Man möchte eine Möglichkeit haben, Anfragen in XML zu formulieren.
Und Sie kennen die Query Language aus Datenbanken.
Das ist halt eine Sprache um Anfragen an Datenbanken zu machen.
Und es gibt halt für XML auch eine spezielle Query Sprache, auf die
ich hier aber auch nicht im Einzelnen eingehen werde.
Hier wird halt Syntax und Semantik für die Auswahl von Daten
angegeben, die in XML Dokumenten stehen.
Wir haben ja gerade eben mit XPath und Xpointer verschiedene
Möglichkeiten gesehen, wie man einzelne Adressen definieren kann.
Jetzt macht man irgendwelche größeren Anfragen an eine Reihe von XML
Dokumenten.
Und dafür muss man halt die entsprechende Syntax haben und das wird
durch XML Query Language bereitgestellt.
Ist also ähnlich wie SQL daran angelegt, aber halt in der Syntax von
XML.
Hier ein kurzes Beispiel.
Da wird also gesagt, ich möchte irgendwo drauf zugreifen.
Where Anschrift Name, da steht jetzt hier Ortname gleich Berlin.
Das heißt, da möchte ich auf Anschriften zugreifen, in denen halt
Berlin vorkommt.
Und möchte dann halt hier entsprechend den Namen übernehmen.
Also eine Liste erzeugen, in der dann genau solch ein Tag
reingeschrieben wird.
Das heißt, hier soll der Name rausgeholt werden aus einem Dokument von
Personen, oder aus Adressen, bei denen der Ortsname Berlin ist.
Und ich möchte dann eine Liste erzeugen, Liste.xml.
Und da habe ich dann einen Tag Berliner und da steht dann der Name
drin.
Dahinter Schrägstrich Berliner als Endetag.
Also so kann ich aus Dokumenten Inhalte rausholen mit dieser Query
Language.
Oder kann das formulieren, dass dort Inhalte rausgeholt werden sollen
und reingeschrieben werden in eine andere Liste.
Das also relativ kurz zu dieser Query Language.
Und jetzt müssen wir uns noch anschauen, wie man eigentlich diesen
dritten Teil macht.
Nämlich die Darstellung von XML-Dokumenten definiert.
Also, wir erinnern uns an dieses Bild.
Wir haben ein XML-Dokument geschrieben, Presentation.xml.
Das geschrieben wurde mit Bezug auf eine Dokumententyp-Definition oder
ein Schema.
Das Ganze wird gepasst mit einem XML-Parser und jetzt soll es
dargestellt werden.
Entweder auf dem Drucker oder auf dem Handy oder auf irgendwo in der
Webseite.
Und dann muss entsprechend die Style Sheet Language benutzt werden, um
dieses Layout zu spezifizieren.
Wie kann das geschehen?
Das geht einmal durch sogenannte Cascading Style Sheets.
Das kennen Sie eventuell aus HTML.
Man kann also auch bei HTML Cascading Style Sheets verwenden, um
solche Angaben, um also auch bei HTML das Erscheinungsbild zu
modifizieren.
Also, hier steht folgendes drin.
Style Angaben für einen Knoten werden auf alle nachfolgenden Knoten
hier vererbt.
Die können also sowohl innerhalb des Dokuments erfolgen, als auch
irgendwo außerhalb.
Und dieses Cascading, fragt sich, was das eigentlich ist, es bezieht
sich also darauf, dass wir hier unterschiedliche Style Sheets
verwenden können, die bereits vom Browser verwendet werden.
Da sind ja einige bereits angegeben.
Das sind die HTML Styles, die in HTML bereits drin sind oder auch in
XML noch nicht.
Aber bei HTML sind halt bereits einige vorgesehen.
Dann kann der Autor weitere Styles hinzufügen.
Und es kann eventuell auch der Benutzer noch weitere Styles
definieren, durch die das Erscheinungsbild von Dokumenten weiter
modifiziert wird.
Sie wissen, dass jedes HTML-Dokument ja auch baumstrukturiert ist.
Brauche ich nicht weiter zu erläutern.
Jetzt fehlt hier oben noch... das ist also etwas schlecht animiert.
Also, das zu diesen Cascading Style Sheets.
Sie können sie sowohl für HTML als auch für XML Dokumente einsetzen.
Wichtig ist, auch für HTML Dokumente, ich hatte ja zu Anfang gesagt,
HTML Dokumente haben ein fest vorgegebenes Layout, das ist auch in der
Regel richtig.
Aber man kann es durchaus auch anpassen, indem man eben solche Style
Sheets einsetzt.
Und das ist halt der baumartigen Struktur, der Dokumente folgt, ist
klar.
Tut mir leid, dass das jetzt hier falsch animiert war.
Jetzt gehen wir gleich auf diese Darstellung.
Wir haben hier ein Beispiel.
Also, was steht hier für ein Dokument?
Ich hoffe, Sie können das gut sehen.
HTML-Dokument, Title, Bachs Homepage, Body, da steht jetzt einmal H1,
Bachs Homepage, Paragraph und so weiter.
Dann haben wir eine Liste, das wohltemperierte Klavier und so weiter.
Da steht also nichts weiter drin.
Also, hier sind die üblichen Angaben nur verwendet, kein Style Sheet
verwendet.
Und wenn man das jetzt so im Browser darstellt, dann kommt halt genau
dieses raus.
Es wird hier einmal Überschrift H1 genommen, das ist halt Bachs
Homepage.
Dann haben wir halt Paragraphen und eine Liste, wie üblich die
Listenstrukturen.
So wird das im Browser halt dargestellt.
Wenn man es modifizieren will, dann kann man zum Beispiel hier an der
Stelle sagen, Style H1 in grüner Farbe, Liste Italic, also Kursiv.
Und von diesem Knoten an wird es an alle weiteren Knoten nach unten
weitergegeben.
Da das hier bereits im Header passiert, wird es also im gesamten
Dokument so ausgeführt.
Und hier unten drunter steht jetzt genau das wie vorher auch, aber
natürlich jetzt modifiziert.
Jetzt haben wir halt die Überschrift H1 in grün und wir haben die
Listen -Elemente alle in Kursiv dargestellt.
Auf die Art und Weise kann man also jetzt den Style auch modifizieren.
Und das kann man natürlich sowohl im Dokument machen, dann vererbt auf
alle Knoten, die unten drunter sind, oder man macht das extern durch
eine Datei.
Also die können in eine Stylesheet-Datei ausgelagert werden.
Das war das, was wir in HTML eben auch machen können.
Und jetzt kommen wir zu XSL, Extended Style Sheet Language.
Das ist jetzt die Möglichkeit, wie wir das Layout von XML-Dokumenten
spezifizieren können.
Das geschieht ganz ähnlich wie in den Cascaded Style Sheets.
Auch die Cascaded Style Sheets sind ja eigentlich nur eine
Vereinfachung dessen, was wir in dieser DSSL-Documenten-Style-Sheet
-Language haben von SGML.
Und das XSLT ist also eine Sprache zur Spezifikation von
Transformationen.
Die Bestandteile, die daran vorkommen, habe ich Ihnen bereits
beschrieben.
Nämlich wir brauchen dort Möglichkeiten, auf Dokumente zuzugreifen
usw.
Wir wollen eine Transformation zwischen XML-Dokumenten transformieren
oder auch von einem XML-Dokument ein völlig anderes Dokument erzeugen.
Und ich kann aus einem XML-Dokument z.B.
ein HTML-Dokument machen.
Dann wird man das in jedem Browser darstellen können.
Ich kann ein PDF-Dokument machen, wenn ich es auf dem Drucker
ausdrucken möchte.
Oder ein PowerPoint-Dokument, wenn ich das als Folien brauche in einer
Präsentation.
Als Word-Dokument, als RTF-Dokument, was immer.
Sofern ich die Formate für diese Dokumente kenne, kann ich auch solche
Dokumente erzeugen.
Da muss mir natürlich das Format klar sein, damit ich das Dokument
auch so erzeugen kann.
Und dann gibt es noch ein XML-FO.
Formatting Objects und Attribute für fortgeschrittene
Präsentationsaufgaben.
Da gehe ich nachher auch noch kurz drauf ein.
Also, wir haben hier XSLT.
Das transformiert einen Ursprungsbaum in irgendeinen Ergebnisbaum.
Es kann sein, dass ich ein XML-Dokument, wie es da oben steht, in ein
anderes XML-Dokument überführe.
Vielleicht auch von einem Dokumententyp in einen anderen Dokumententyp
hinein.
So etwas könnte durchaus wichtig sein, wenn ein Lieferant mit
unterschiedlichen Abnehmern kommuniziert und dort unterschiedliche
Dokumententypen verwendet werden.
Dann muss ich von einem Dokumententyp in den anderen transformieren
können.
Das geht halt über dieses XSLT.
Und wie Sie sehen, ist es nicht nur einfach eine Umstrukturierung
eines Dokuments, sondern es könnte sein, dass ein Teilbaum nochmal
unten hingeschrieben wird.
Oder was immer da unten noch reingeschrieben wird.
Hier ist es also keineswegs so, dass dort genau die gleichen Inhalte
drinstehen müssen wie in dem Ursprungsdokument.
Wir können es durchaus in der Struktur modifizieren.
So, das zu diesem XSLT.
Und jetzt gibt es also Formatting Objects.
Und diese Formatter, die machen dann daraus entsprechend die einzelnen
Bestandteile, die auf dem Drucker oder auf dem Handy oder auf dem
anderen gebraucht werden.
Also eine ist erstmal die Transformation der Struktur.
Und dann gehe ich an die einzelnen Knoten ran.
Für die einzelnen Knoten gehe ich nicht nur auf einzelne Knoten,
sondern ich gehe auf sogenannte Formatting Objects.
Und die werden dann entsprechend mit Formatierungsangaben versehen.
Gut.
Was muss hier gemacht werden?
Wir müssen erstmal einen Parser da drin haben.
Damit ich die Struktur transformieren kann, muss ich sie erstmal
erkennen.
Das heißt, ich muss erstmal...
Das, was hier jetzt beschrieben ist, ist der XML-Parser.
Jetzt muss ich mir erstmal das Style-Sheet anschauen.
Da muss natürlich angeschaut werden, was dort alles drinsteht.
Das ist klar, das muss geparst werden.
Dann muss ich das Dokument lesen.
Und es könnte ja sein, dass...
Je nachdem, wo jetzt dieses Style-Sheet vorkommt, muss ich die ja
erstmal durchschauen.
Dann weiß ich, auf welche Bereiche ich hier zugreifen muss.
Ich muss das Dokument direkt durcharbeiten.
Auch dort auf Wohlgeformtheit und Gültigkeit überprüfen.
Und dann wird das XML-Dokument bearbeitet.
Und es wird jeder Knoten verglichen mit den Style-Sheet-Regeln bzw.
jeder Knoten modifiziert.
Entsprechend den Regeln, die in dem Style-Sheet dort drinstehen.
So ein Dokument könnte zum Beispiel so aussehen, wie hier angegeben.
Zunächst mal haben wir hier wieder die Namespace-Definition.
Und jetzt ist hier ein Template für ein Matching angegeben und wird
ausspezifiziert.
Da könnte irgendein XPath-Ausdruck stehen, der angibt, was an
bestimmten Stellen gemacht werden soll.
Da sind hier eine Reihe von Aktionen angegeben.
Und hier gibt es eine andere Spezifikation mit irgendwelchen weiteren
Aktionen.
Also es werden dort eine Reihe solcher Templates angegeben.
Und für jeden Bereich in dem Dokument, an dem diese Spezifikation
zutrifft, werden dann eine Reihe von Aktionen ausgeführt.
Das ist im Prinzip die Struktur eines XSLT-Dokuments.
Also hier nochmal ist das Pattern von XPath angegeben.
Und die Regeln, die Aktionen, die ausgeführt werden sollen, die stehen
dann halt da unten drunter.
Eine solche Regel ist halt immer so ein Template.
Das sind halt hier die einzelnen Aktionen, die dann ausgeführt werden
müssen.
Und hier ist halt noch eine andere Template-Regel.
Eine andere Spezifikation.
Okay, hier nochmal ein Beispiel für solch ein Style-Sheet.
Was steht hier drin?
Wir haben zunächst mal die Namespace-Angaben.
Und hier steht ein Match gleich.
Es steht hier ein Schrägstrich.
Das heißt, hier sind wir am Anfang des Dokuments, an der Wurzel.
Und jetzt heißt das, wir schreiben jetzt hin, in das Dokument hinein,
HTML und HEAD, Title.
Und da steht jetzt, XSL, Value of Select, Liste.
Da wird das Attribut Title gesucht.
Und der Wert soll dort hingeschrieben werden.
Das heißt, da suche ich mir aus dem XML-Dokument praktisch hier raus,
die eine Titel-Definition.
Und die wird dann reingeschrieben.
Und dahinter schreibt man dann halt HEAD Body.
Also die End-Tag und End-Tag von HEAD.
Und dann kommt der Rumpf der Liste.
Und jetzt geht es hier weiter.
XSL, Value of Select.
Nochmal wird hier in diesem Fall der gleiche Wert nochmal
hingeschrieben, welchen Sinn das auch immer hat.
Jetzt werden hier Kunden angegeben.
Also wird das Wort Kunden hingeschrieben.
Und dann werden hier ein paar Style-Angaben gemacht für eine Tabelle.
Da wird halt der Rand der Tabelle definiert.
Es wird die Größe der Schrift definiert.
12 Punkt, Verdana Schrift in Fettdruck.
Und dann kommen halt entsprechend hier die...
Es soll also Name stehen.
Dann steht dahinter, welche Schrift jetzt hier...
Also hier soll die E-Mail geschrieben werden in hellgrau.
Also etwas abgesetzt.
Und jetzt wird für jeden Kunden in dieser Liste, wird entsprechend
jetzt hier ein Teil gesucht.
Nämlich der Name gesucht.
Das eine war die Überschrift für unsere Tabelle.
Und jetzt werden tatsächlich dort die Kundennamen reingeschrieben.
Und das geschieht durch diesen Teil.
Da geht man durch das XML-Dokument durch und sucht sich jetzt die
einzelnen Namen heraus.
Und schreibt dort jeweils dann dahinter die E-Mail-Adresse.
Also wir haben dann aufgebaut eine solche Tabelle, wo halt hier oben
drüber steht Name und dahinter E-Mail.
Und das Ganze auch noch mit einem Rahmen versehen.
Und dann werden die hier entsprechend aufgelistet, so wie sie im XML
-Dokument drin standen.
Aber jetzt eben mit den entsprechenden Layout-Informationen versehen,
sodass dort tatsächlich eine Tabelle in dem HTML-Dokument erzeugt
wird.
Auf diese Art und Weise greift man jetzt zu auf die einzelnen
Bestandteile eines XML-Dokuments, indem man solche Template-Regeln von
XSLT definiert.
Das zu diesen Style-Sheets.
Also hier steht jetzt nochmal genauer die Template-Regel.
Habe ich gerade eben hier erläutert.
Und da steht nochmal, dass da Wert eingebettet werden muss.
Hier haben wir diese Schleifenstruktur und dort den Wert, der
eingebettet wurde.
Gut.
Hier ein weiteres Beispiel.
Was wir gerade eben gemacht haben, ist ja, dass wir ein Style-Sheet
definiert haben, eine Regel definiert haben, die jetzt von dem Parser
verwendet werden kann.
Und es wird, wenn halt hier in PresentationXML genau so eine
Kundenliste drin steht, dann würde in dem Fall eben eine Tabelle in
der Form, wie sie hier auf diesem Bild angegeben ist, entstehen.
Das ist das, was dort in der Regel definiert wurde.
So würde das dann in einem Browser sichtbar sein.
Okay.
Hier, wie gesagt, ist nochmal ein Beispiel für ein XML-Dokument, das
in dem Fall einfach eine Liste darstellt von solchen vier Elementen.
Und an sich ist ja noch keineswegs klar, wie das dargestellt werden
soll.
Mit XSLT könnte das zum Beispiel so jetzt gemacht werden, dass wir
suchen nach einem Item und dann hier hinschreiben entsprechend die
weiteren Bestandteile.
Hier suchen wir nach einem Namen.
Name.
Dann steht hier konkret H und Position.
Das heißt, jetzt wird hier ein String definiert.
Hier haben wir eine Operation auf Strings.
Da wird das Zeichen H kombiniert mit dem Wert von Position.
Und das heißt, das erste Element, das erste Item, das gefunden wird,
wird also mit H1 angegeben.
Und dann steht dahinter Value of Select Position.
Da soll also jetzt stehen der Wert von Position, zum Beispiel 1 und
dahinter ein Punkt.
Und dann steht hier hinter noch Value of Select Punkt.
Da blicke ich im Augenblick nicht, was das jetzt bedeutet.
Das ist also das Ende dieser Definition.
Das heißt, das hier wird jetzt praktisch immer wieder angewandt auf
jedes Item.
Und dann haben wir der Reihe nach, wenn wir hier durchlaufen, wenn das
eine Schleife eingebunden ist, kommen hier heraus dann H1, H2, H3, H4,
die vier Elemente.
Und entsprechend, da hier dann H1, H2, H3, H4 steht, haben wir dann
diese Darstellung im Browser.
Also immer kleinere Überschriften mit den entsprechenden Bezeichnungen
dahinter.
Also, ganz einfach.
Was heißt das hier?
Wenn hier Punkt Select gleich Punkt, brauchen Sie nur
zurückzuerinnern, was hieß Punkt?
Das ist die aktuelle Position, an der ich bin.
Das heißt, die Position war die Position 1, 2, 3 oder 4.
Und an der Position steht hier zum Beispiel der Wert The First Item.
Wenn hier also steht, Value of Select, ein Anführungszeichen Punkt
dazwischen, das war der Ausdruck, der als Punkt gekennzeichnet ist,
und Sie erinnern sich bei den Abkürzungen, da stand der Punkt gibt
gerade den aktuellen Ort an, ist eine Abkürzung für Self.
Und eigentlich soll dahinter noch ein Punkt stehen.
Der Punkt, der hätte hier eigentlich jeweils noch daneben stehen
müssen, der fehlt in dieser Darstellung.
Ja, das ist also jetzt das ganze Dokument, was dabei entstehen soll.
Und jetzt sehen wir, es wird eine Folge von Elementen gemacht, die
jeweils dann hier mit H1, H2, H3, H4 bezeichnet sind.
Und auf diese Art und Weise entsteht dann dieses HTML-Dokument.
Jetzt gibt es natürlich auch Attribute, die wir, schauen wir uns
durch, was hier drin steht.
XSLT, hier machen wir wieder ein Match auf eine Liste.
Und jetzt schauen wir jedes Item in dieser Liste durch, suchen dort
nach einem Attribut, Name gleich Number.
Jetzt soll hier Value of Select Punkt, heißt wieder der Wert, der dort
steht, soll dort hingeschrieben werden.
Und das ist das Ende dieses Dingens hier.
Und daraus wird dann folgendes, hier wird jetzt hingeschrieben,
Number, also wird Item hingeschrieben.
Das wird hier dargestellt, es soll Item hingeschrieben werden.
Und dann soll ein Attribut dazugefügt werden, Attribut Number.
Und Number in dem Fall erhält den Wert, der hier spezifiziert war,
Select gleich und hier der Punkt.
Dann haben wir also hier den Inhalt an dieser Position, ist gerade the
first item, the second item, the last item.
Und das gibt also das Ergebnis an der Ausführung dieser Regel.
So, und jetzt bin ich nicht ganz fertig, aber ich habe Ihnen einiges
von diesen prozeduralen Strukturen jetzt schon angedeutet.
Nächstes Mal werde ich das abfließen, es kommt noch ganz kurz etwas zu
den Formatting Objects.
Und dann sind wir auch so ziemlich durch XML durch.
Und beim nächsten Mal werde ich Ihnen auch etwas erzählen über weitere
Dinge, die sich mit der Erzeugung dynamischer Webseiten beschäftigen.
Also auch mit kleinen Server-Architekturen und Ähnlichem.
Gut, vielen Dank für die Aufmerksamkeit.
Ich bitte, am Ende war ich ein bisschen, haben Sie gemerkt, war ich
nicht 100% vorbereitet, hat einen ganz einfachen Grund.
Ich bin extra für diese Vorlesung von einem Ideen-Workshop, an dem ich
gerade außerhalb von Karlsruhe teilnehme, hierher gekommen, war
anschließend sofort wieder zurück und habe ganz einfach nicht genügend
Zeit gehabt, mir alle Folien anzuschauen vorher.
Aber ich denke, ich habe das Ihnen trotzdem so erklärt, dass Sie das
verstehen können, dass ich Ihnen die wesentlichen Teile hier
vermitteln konnte.
Vielen Dank für die Aufmerksamkeit, bis zum nächsten Mal.
Nächstes Mal in 14 Tagen.