So, schönen guten Tag.
Ich begrüße Sie zur Fortsetzung der Vorlesung angewandter Informatik
2.
Ich wollte vielleicht ganz... oh, jetzt muss ich nochmal ganz schnell
hier die Verbindung zum Netz herstellen.
Geht gleich los.
Also, was ich noch kurz hinweisen wollte, war, dass Sie hier am Ende
sehen, die Termine, zu denen die Vorlesung stattfindet.
Und wenn Sie auf diese Liste schauen, sehen Sie hier den 14.05., das
ist heute, und danach eine ziemliche Lücke.
Es zeichnet sich ab, dass ich nächste Woche doch da sein werde.
Das heißt, dass hier an der Stelle eigentlich der 24.05.
stehen müsste.
Das heißt, das klärt sich morgen, ob ich da bin oder nicht.
Und es geht halt um eine externe Veranstaltung, bei der ich eigentlich
sein müsste.
Aber ich denke, ich werde eher hier sein, dann kann ich nämlich ein
bisschen was vorziehen von den Vorlesungen.
Und ich werde am 13., ich meine, das ist der 13.06., jedenfalls, nee,
das müsste der 14.06.
sein.
An dem Tag werde ich auch hier sein.
Das heißt, wir können hier zwei weitere Termine donnerstags machen,
sodass wir weniger am Ende häufen müssen.
Das ist für den Fortschritt der Vorlesung deutlich besser, denke ich,
dann haben wir mehr Stoff für die Übungen.
Und dann drängt sich nicht der ganze Inhalt nachher am Ende, das wäre
eigentlich nicht gut.
Sie hätten sonst in den Übungen eigentlich nicht viel mehr zu machen
als nur XML und das wäre nicht gut.
Also insofern muss ich eigentlich sehen, dass ich das vorziehe.
Und ich denke, ich werde an den beiden Tagen da sein.
Zumindest einer der beiden Donnerstage wird also ein Vorlesungstag
sein.
Der 14.06.
auf jeden Fall und eventuell auch der 24.05.
Und wir werden das hier bekannt geben.
Wenn sich also daran etwas ändert, werden Sie das auch hier sehen.
Ich bitte Sie darauf zu gucken, auch diejenigen, die heute nicht hier
sind in der Vorlesung, sondern Sie das nur anschauen in der
Aufzeichnung.
Die Vorlesung wird also aller Voraussicht nach am 24.05.
und am 14.06.
auch donnerstags stattfinden.
So, jetzt kommen wir tatsächlich zur Vorlesung.
Und zwar hatten wir uns letztes Mal nochmal HTML angeschaut.
Da hatte ich Ihnen einiges darüber erzählt, was man mit HTML so alles
machen kann.
Und wir hatten uns insbesondere beschäftigt mit den Style Sheets.
Das waren hier nochmal die Links.
Ich hatte Ihnen so ein paar Komponenten erzählt.
Wir hatten dann Style Sheets angeschaut.
Wir hatten gesehen, wie man formatieren kann.
Also nach Benutzerangaben formatieren.
Auch ohne benutzerspezifische Formatierung wird ja eine vernünftige
Darstellung gewählt, aber eben nur eine Standarddarstellung.
Und wenn man das nach seinem persönlichen Geschmack machen möchte,
macht man das mit CSS.
Und insbesondere ist es dann natürlich auch so, dass man, wenn man
jetzt also mehr macht als nur Farben von Buchstaben verändern, dann
wird man arbeiten mit...
Na, wo habe ich das jetzt?
Mal kurz reingucken.
Das war hier die Meta-Information.
Dann haben wir etwas zu Barrierefreiheit gesagt.
Und wir hatten dann an einer Stelle...
Genau, hier waren diese verschiedenen anderen Dinge angegeben.
Ich sehe es jetzt nicht.
Ich hatte Ihnen jedenfalls zwei, drei verschiedene Varianten gezeigt
von der Homepage dieser Vorlesung.
Und da sah man das einmal mit Style Sheets, einmal ohne Style Sheets.
Und das Wesentliche war, dass man eben deutlich sehen konnte, wie man
durch die Verwendung der Container, also dieser Div-Bereiche, die
Anordnung der Inhalte im Browserfenster einfach festlegen konnte.
Und das geht eben mit diesen Div-Bereichen deutlich flexibler, als
wenn man dafür irgendwie diese Hilfsmittel, Frames oder Tabellen
nehmen würde.
Die sind ja auch, was Barrierefreiheit angeht, gar nicht zulässig.
Und ich hatte Ihnen ja auch dann einiges erzählt über
Barrierefreiheit, war gerade eben schon mal kurz zu sehen gewesen.
Es ist eben wichtig, dass man Seiten barrierefrei gestaltet, damit
jeder auch wirklich Zugriff auf die Information hat.
Das ist für jemanden in einem geschäftlichen Bereich nicht so
relevant, aber für jemanden im öffentlichen Bereich, wenn man also
Dienstleistungen zu erbringen hat, dann hat jeder ein Recht darauf, an
dieser Information teilzuhaben.
Ich hatte Ihnen dann, das kann ich also jetzt zumachen, ich hatte
Ihnen dann begonnen, etwas zu erzählen über XML.
Ich hatte Ihnen im Prinzip hier diese Folie gezeigt, wo man sieht,
dass man mit einem XML-Dokument zunächst mal Informationen aufbauen
kann, entsprechend einer Definition, entsprechend eines
Dokumententyps.
Man kann also überprüfen, ob ein XML-Dokument den Anforderungen
entspricht.
Das werden wir uns heute als Beispiel anschauen.
Dafür gibt es entweder eine DTD, also Document Type Definition, wie
bei SGML auch.
Oder es gibt ein Schema, das werden wir nach heute wahrscheinlich
nicht mehr kennenlernen, das werden wir aber nächstes Mal dann kennen.
Und dann kann man also, wenn man das Dokument überprüft hat,
entsprechend dieser Struktur, kann man es entsprechend einer Style
-Sheet -Sprache XSL bzw.
mit XSLT dann übertragen in verschiedene Präsentationsformate für den
Drucker, für irgendein Gerät, PDA, Handy oder eben auch für den
Webbrowser.
Also dann würde man HTML erstellen oder XHTML.
Und wir hatten dann kurz hier ein einfaches Beispiel gesehen für ein
XML -Dokument, was zunächst mal sehr ähnlich aussieht von der
Struktur, von der Art der Tags wie HTML.
Aber es ist ja klar, es basiert beides auf SGML.
Nur was man hier eben sofort sieht, man kann hier deutlich
sprechendere Tags verwenden.
Und diese Tags haben hier etwas zu tun mit dem Inhalt.
Die sind also deutlich besser angepasst an den Inhalt, als wenn man
sich das bei HTML anschaut.
Da sind die Tags im Wesentlichen bezogen auf die Struktur, auf die
Präsentationsobjekte und weniger auf die Inhalte.
Dann hatten wir uns ganz kurz angefangen, hier solche Bestandteile von
XML anzuschauen.
Und dieses hier ist die erste neue Folie heute, wo ich zwei Dinge noch
nicht animiert habe.
Das können wir also gleich auf einige Dinge nochmal schauen.
Auf Beispieldokumente, die wir uns nochmal anders anschauen im Editor.
Es geht jetzt um einen Begriff, das ist die Wohlgewarmtheit eines
Dokuments.
Es gibt Regeln, nach denen ein Dokument aufgebaut sein soll.
Und das ist etwas, das gilt eigentlich genauso für SGML.
Man beginnt mit einer Deklaration des Dialekts, den man hier verwenden
möchte.
Hier also XML.
Ich gehe mal gleich auf das erste Beispiel.
Dann sieht man das.
Hier sieht man XML-Version 1.0 steht dort.
Das ist die XML-Deklaration.
Dann müssen alle Tags mit Inhalt sowohl einen Beginn- und Endtag
haben.
Tags ohne Inhalt, das wäre also irgendein Tag, bei dem z.B.
Wir hatten ein Beispiel gehabt, dieses hier.
Das wäre ein Tag ohne Inhalt.
Da habe ich ja nur einen Tag, da habe ich keinen Beginn- und Endtag.
Dann, nächste Regel, Tags ohne Inhalt müssen entweder einen Endtag
haben oder mit diesem Schrägstrich abschließen.
Auch das ist klar.
Also ein Inhalt eines Tags ist halt, das sollte ich auch nochmal kurz
sagen, das wäre Anfangs- und Endtag und hier, was dazwischen ist, ist
der Inhalt eines Tags.
Und der Inhalt hier bei dem Beispiel wäre eben hier der Inhalt des
Tags Gespräch, wäre Gruß, Hallo, Endgruß, Antwort, Gleichfallsantwort,
das wäre der Inhalt.
Oder der Inhalt des Gruß wäre Hallo.
Also ganz einfaches Beispiel.
Und wenn wir uns dieses Beispiel einmal anschauen.
Achso, wir waren noch nicht ganz durch.
Attributwerte.
Sie wissen, dass es Attributwerte geben kann.
Sprache in dem Fall hier ist ein Attribut, das einen Wert hat, in dem
Fall Deutsch.
Und die müssen in Anführungszeichen stehen, das ist noch so eine
Regel.
Elemente müssen ohne Überlappung geschachtelt werden.
Es muss eine Baumstruktur werden.
Es muss richtig gebildet sein.
Und so, wie Sie das hier sehen, ist es sicherlich richtig.
Wir haben hier Gruß geht auf und endet wieder.
Antwort geht auf und endet wieder.
Gespräch geht auf, dann kommen einige Dinge hier drin von Gruß,
Antwort und dann kommt Gespräch, Ende.
Das ist vernünftig geschachtelt und wir hätten hier also im Prinzip
das Gespräch.
Das wäre die Wurzel in dem Fall.
Und dann würden wir verzweigen in diese beiden Teile Gruß und Antwort.
Und das wäre es eigentlich schon.
Das wäre diese ganz einfache Struktur.
Einfacher Baum, ein Wurzelelement Gespräch, zwei Elemente dort drin,
Gruß und Antwort.
So, das können wir uns jetzt auch noch mal, wenn wir wollen, kurz
anschauen, wie das aussieht im Editor.
Und da kommt die übliche Warnung.
Hoffen wir, dass alles richtig ist.
Gestern Abend hat es noch funktioniert.
Ich habe hier eine Version von xmlSpy.
Das ist nicht die Home Edition, diese kostenlose Version von xmlSpy,
sondern die ausführliche Version.
Ich zeichne aber die Sachen ruhig in dieser ausführlichen Version.
Die Eingabeschnittstelle dürfte eigentlich gleich sein.
So, ich mache es mal ein bisschen größer.
Da sehen Sie also jetzt genau noch mal dieses Dokument.
Und wenn ich jetzt überprüfen will, ob das in Ordnung ist, dann gehe
ich hier oben auf diese Leiste.
Da oben sehe ich eine Leiste, da kann man überprüfen, oder ein Icon.
Check Well-Formedness.
Wenn ich da raufklicke, dann sagt er, aha, hier unten, leider ist das
jetzt...
Ich weiß nicht, ob ich das auch größer kriege.
Ne, kriege ich nicht größer.
Da steht jetzt dieser gelbe Haken, das Ding ist Well-Formed, wohl
geformt.
So, jetzt gehen wir kurz zurück auf dieses Beispiel hier.
Hier haben wir noch eine andere Datei.
Da steht schon drunter, die ist nicht wohl geformt.
Wenn wir uns die jetzt anschauen, dann machen wir das Gleiche noch
mal.
Hier ist jetzt eine andere Datei, die sieht eigentlich ganz ähnlich
aus, aber sie ist doch etwas anders aufgebaut.
Schauen wir mal, was uns jetzt der sagt, wenn ich das überprüfe.
Und dann kommt sofort unten eine rote Fehlermeldung.
Das können Sie wahrscheinlich nicht lesen von hinten.
Da steht jetzt, File not well-formed.
Character X is grammatically unexpected in column 3 at line 1.
Wird also genau angegeben, da oben, das X ist nicht akzeptiert.
Ich kann gleich sagen, warum.
Man wundert sich, wieso, da steht doch XML, das sollte es doch sein.
Der will hier ein Kleinbuchstaben haben.
Jetzt überprüfe ich noch mal.
Jetzt sagt er, das M will er nicht haben.
Also ich mache das jetzt kürzer und entferne die beiden, mache daraus
M und L.
Und jetzt überprüfen wir noch mal.
Jetzt sagt er, das V will er nicht haben.
Also noch ein Großbuchstaben.
Er möchte also gerne hier in diesem Fall nur Kleinbuchstaben haben.
Das war also das erste Problem.
Also diese Schlüsselwörter müssen hier in Kleinbuchstaben sein.
Dann sagt er auf einmal einen Zwischenraum hier.
Character, da unten stehen zwei Anführungszeichen, ist grammatically
unexpected.
Und das heißt, hier darf kein Zwischenraum sein zwischen der Klammer
auf und dem Tag, das hier stehen soll.
Das heißt, wir müssen den Zwischenraum wegnehmen.
Dann gehen wir weiter und sehen den nächsten Fehler schon wieder.
Das ist jetzt hier Spalte 4, Zeile 3.
Da haben wir also das Gleiche noch mal.
Und mal gucken, ob das nächste auch anmeckert.
Genau, Spalte 4.
Das hat also nicht angemeckert.
Das heißt, dahinter kann man durchaus einen Zwischenraum haben, aber
davor nicht.
Also muss ich den Zwischenraum auch noch wegnehmen.
Und wenn ich jetzt wieder überprüfe, hat er immer noch nicht alles
richtig.
End Tag must not have name Gruß in column 30 at line 4.
Also, da sehen Sie genau dieses Problem, eine falsche Überlappung.
Wir haben hier Antwort eröffnet und jetzt geht Gruß zu, bevor Antwort
beendet ist.
Das ist eine falsche Überlappung von zwei Tags.
Das darf so nicht sein.
Deswegen ist das hier also auch noch falsch.
Das heißt, jetzt müssten wir den Gruß hier nach unten schieben und es
dann zumachen, wenn eben dieses Antwort-Tag beendet ist und dann wäre
alles richtig.
Das lasse ich aber jetzt.
Ich will nicht zu viel Zeit darauf verwenden.
Auf jeden Fall sehen Sie, wie man durch die Überprüfung der
Brügeformtheit sehr angenehm Fehlermeldungen hier bearbeiten kann.
So, gehen wir zurück auf unsere Präsentation und machen hier mal
weiter.
Dann kommt jetzt das nächste Thema, nämlich die Gültigkeit.
Das eine war die Wohlgeformtheit.
Das sind einfach eine Reihe von Regeln, die ich bei jedem Dokument
überprüfen kann.
Da geht es noch gar nicht um die Dokumententyp-Definition.
Lassen Sie mich eine Sache noch mal kurz überprüfen.
Ja, alles in Ordnung.
Hat er gerade eben befürchtet.
Ich hätte nicht richtig aufgenommen, aber er nimmt auf.
So, jetzt haben wir die Gültigkeit.
Ein XML-Dokument ist gültig, wenn es erstens wohlgeformt ist und
zweitens auf eine DTD verweist und drittens alle Regeln dieser DTD
einhält.
Also, das hier wäre eine mögliche DTD.
Wäre also solch ein Dokument.
Und ich meine, ich habe hier... genau, da habe ich nur diese DTD drin.
Das ist natürlich nichts Besonderes.
Das mag er nicht.
Offensichtlich funktioniert hier die Verbindung nicht.
Er macht aus irgendeinem Grund ein DTD-Dokument nicht auf.
Also ich könnte jetzt diese DTD aufnehmen.
Was steht denn in dieser DTD drin?
Sie erinnert sich an die DTD, die wir zum SGML-Beispiel, Mini-HTML
einmal gesehen hatten.
Hier werden Elemente definiert.
Ein Elementgespräch.
Und dieses Elementgespräch hat zwei Elemente als Teile.
Nämlich ein Gruß oder eine Antwort.
Beziehungsweise hier ist nicht oder, sondern hier steht ein Komma.
Das heißt, hier müssen diese beiden kommen.
Gruß und dann Antwort.
Und beim Gespräch haben wir eine Attributsprache.
Ups, das war noch nicht umgestellt auf dem Kugelschreiber.
Jetzt haben wir hier eine Attributsprache.
Und der Wert ist impliziert.
Wenn es also verwendet wird, ist der Wert dieses Attributs genau der
Wert, der dort in dem Tag angegeben wurde.
In dem Beispiel war das Sprache-Deutsch.
Und das Element Gruß hat also als Inhalt gerade Past-Character-Data
und das Element Antwort ebenso.
Also eine ganz einfache DTD.
Wir werden noch weitere DTDs sehen.
Und jetzt haben wir in dieser DTD also Elemente deklariert.
Hier ist ein anderes Beispiel für die Deklaration eines Elements.
Hier wird ein Element Name deklariert.
Und bei diesem Namen kommen eine Reihe weiterer Teile vor.
Zunächst mal eine Folge von Titeln.
Eine Folge von Titeln, die nicht leer sein darf.
Hier steht ein Stern daneben.
Stern heißt immer beliebig häufig oder beliebig viele.
Kann auch überhaupt gar nicht vorkommen.
Also darf auch null Mal vorkommen.
Dann haben wir einen Vornamen oder Initiale.
Und dann kommt eventuell ein Mittelname vor.
Aber nur ein Mittelname.
Und das Fragezeichen heißt, wir haben also eventuell einen
Mittelnamen, der darf vorkommen oder auch nicht, aber eben nicht
mehrfach.
Und als letztes Nachnamen.
Und beim Nachnamen steht ein Plus dahinter.
Das heißt, es darf eine Folge von Nachnamen auftauchen.
Es gibt ja Menschen, die haben mehrere Nachnamen.
Insofern wären das die Dinge, die man bei dem Namen hier vorgesehen
hat.
Und jetzt muss natürlich...
Genau, hier steht dieses Fragezeichen ist 0 oder 1 Mal.
Stern 0 bis n-fach, die übliche Interpretation.
Plus 1 bis n-fach, also beliebig oft.
Und A oder B, dieser senkrechte Strich, Standardzeichen für
Dysfunktion.
Und jetzt könnte man beim Titel zum Beispiel hinschreiben, dass das
irgendein Pass-Character-Data ist oder Element.
In dem Fall steht hier auch, also Quatsch, Element Nachname.
Auch nur irgendwie Pass-Character-Data.
Genauso kann man alle anderen Elemente hier drin deklarieren.
In dem Fall wären das alles Pass-Character-Data.
Und hier würde man vermutlich keine weiteren Attribute dazu schreiben.
Könnte man aber gerne machen.
Wenn ich jetzt also dazu passend einen XML-Text hinschreibe, würde ich
also dieses Tag Name hernehmen.
Und da kann ich jetzt die Informationen reinschreiben.
Ich könnte also, wenn ich meinen Namen als Beispiel nehme, hier
zunächst mal einen Titel hinschreiben.
Professor, noch einen Titel, Doktor.
Wobei die jeweils gleich wieder zugehen.
Dann habe ich einen Vornamen und einen Nachnamen.
Und das sieht also so aus, als wäre das in Übereinstimmung mit dem,
was da oben steht.
Eine ganz einfache Art, wie man jetzt einen Inhalt strukturieren kann.
Und Sie sehen, das ist eine deutlich andere Strukturierung, als wir
das bei HTML kennengelernt haben.
Da könnte man sowas ja gar nicht in der Form inhaltsbezogen
strukturieren.
Wobei man sehen muss, es wird an keiner Stelle überprüft, ob das, was
z.B.
zwischen dem Titel-Tag steht, tatsächlich ein Titel ist.
Da steht nicht, welche Elemente erlaubt sind.
Genauso beim Vornamen steht nicht, dass da nur deutsche Vornamen oder
irgendwie international Vornamen drinstehen dürfen.
Da könnten auch Zahlen drinstehen oder irgendwas.
Das ist hier nicht vorgeschrieben.
Also das, was da steht als Tag, ist nur eine Art Indikator dafür, was
man eigentlich erwartet.
Wir werden später, wenn wir die Schemata kennenlernen, noch lernen,
dass man durchaus auch gewisse Datentypen spezifizieren kann in XML,
aber dann eben mit diesem Schemata und nicht mit der Dokumententyp
-Definition.
Die erlaubt also keine solche Überprüfung der Inhalte auf irgendeine
Typzugehörigkeit.
Das ist eine Möglichkeit gewesen, so einen Namen zu strukturieren.
Eine andere ist, das über Attribute zu machen.
Also ich könnte eine Definition machen, die hier jetzt steht.
Hier ist es allgemein angegeben, ein Elementname.
Das könnte dann das Element Name sein.
Und dann gibt man ein Attributnamen1 an, ein Attributtyp dafür und ein
DefaultValue.
Man kann also ein DefaultValue angeben, muss es nicht unbedingt.
Wir werden gleich ein Beispiel sehen.
Es kann also sein, dass ich vorgegebene Werte habe, die auf jeden Fall
gelten sollen.
Es kann auch sein, dass man sagt, ein bestimmtes Attribut muss
spezifiziert werden.
Andere sind rein optional.
Das ist also hier angegeben, mit welchen Werten ein Attribut haben
kann und was der Default-Wert eines Attributs ist.
Das kann explizit gegeben werden, kann aber auch anders angegeben
sein.
Hier ist also ein Attributtyp, zum Beispiel cData.
Das ist eine einfache Zeichenfolge, CharacterData.
id wären eindeutige Schlüssel.
idRef und idRefs wären Referenzen auf andere IDs im Dokument, die an
anderer Stelle schon definiert sind.
Dann haben wir Entities, Name eines oder mehrerer Entities, die man
verwendet.
Dann gibt es noch so etwas wie NM-Token oder NM-Tokens.
Das wären also ein Wort oder mehrere Wörter.
Insofern haben wir hier verschiedene Möglichkeiten, solche
Attributtypen anzugeben.
Es könnte auch eine Liste von Namen sein, das wäre ein Aufzählungstyp.
Da würde ich einfach nur eine Liste von Werten hinschreiben und einer
von diesen Werten muss dann konkret bei der Verwendung dieses Elements
mit dem Attribut ausgewählt werden.
Bei dieser Deklaration sagt sich, wird auch angegeben, was für einen
Wert man haben will, dass dieser Default-Wert, zum Beispiel dieses
hier, Value, wäre so ein Default-Wert, beliebiger gültiger Wert, der
immer dann der Wert des Attributes ist, wenn nichts anderes explizit
definiert wird.
Also könnte man hier für ein Attribut einen Wert angeben und hätte
dann das hier als Default-Wert.
Man kann auch einen anderen Wert explizit hinschreiben, wenn man aber
das Attribut gar nicht aufführt, hat es automatisch den dort
angegebenen Wert.
Sie könnten also meinetwegen für Schriftzeichenfarbe automatisch
schwarz angeben und wenn Sie nichts anderes hinschreiben, wird das
genauso genommen.
Wenn Sie eine andere Farbe haben wollen, könnten Sie das also zum
Beispiel hier auf die Art und Weise machen oder was immer Sie ein
Attribut hier verwenden.
Dann gibt es aber eben auch andere Sachen.
Hier steht etwas als Default-Wert, kann dort stehen, dieses
Doppelkreuz Required.
Das bedeutet, das Attribut muss immer einen Wert haben, wobei hier
kein Default-Wert vorgegeben ist.
Da muss man also explizit bei der Verwendung des Tags einen
Attributwert deklarieren.
Bei Implied ist es so, hier kann es einen Wert haben, muss aber nicht
sein.
Es ist kein Default-Wert vorgegeben, das heißt, dieses Attribut ist
undefiniert, wenn man es nicht verwendet.
Aber wenn man es verwendet, hat es halt den vorgegebenen Wert.
Und dann haben wir hier noch Fixed.
Bei Fixed ist es so, wenn es verwendet wird, dann hat das Attribut
genau diesen Wert, aber es muss nicht unbedingt verwendet werden.
Also insofern kann man es nur mit diesem einen Wert verwenden.
Also eine ganze Reihe von Möglichkeiten.
Ich werde nicht bei allen Variationen von XML, bei allen Tags hier
angeben, wie die ganze Bandbreite der Möglichkeiten ist.
Aber zu Beginn muss ich das ja mal machen.
Man könnte also zum Beispiel sagen, hier ein Element Name, in dem Fall
ist empty.
Empty heißt, ich habe keinen Inhalt.
Ich habe nur eine Attributliste.
Die Attributliste besteht jetzt aus Titel, Vorname, Mittelname,
Nachname.
Hatten wir vorher auch schon.
Und beim Titel, da steht jetzt Implied.
Implied bedeutet, wie gesagt, wenn es verwendet wird, wird der Wert
genommen, der dort in der Verwendung steht.
Ein Vorname muss dort angegeben werden.
Ein Mittelname muss nicht angegeben werden, aber wenn er angegeben
wird, dann hat er genau diesen Wert.
Und der Nachname muss auch wieder angegeben werden.
Wenn man das jetzt wieder als Beispiel nimmt, wäre zum Beispiel dieses
Element, ein Element, das fast den gleichen Inhalt hat, wie das
Element, das ich Ihnen vorher gezeigt hatte, mit diesen geschachtelten
Strukturen.
Hier haben wir das innerhalb eines Elements mit einer Reihe von
Attributen gemacht.
Hier ist jetzt der Titel, der da nur einmal vorkommt.
Habe ich jetzt hier einfach Professor Doktor hingeschrieben.
Und jetzt haben wir das Attributvorname Hartmut, Nachname Schmeck.
Das ist also jetzt eine ganz andere Art, das aufzuschreiben.
Man muss jetzt sich überlegen, wenn man ein solches Dokument sich
strukturiert, was ist die sinnvolle Art für solch ein Element.
Ich würde normalerweise annehmen, dass man einen Namen eher nach der
anderen Form mit diesen geschachtelten Werten nimmt.
Man kann aber beides machen.
Ist also ein bisschen Geschmackssache.
Nur wenn man hier Variabilität drin haben möchte, ich hatte vorher
gesagt, es könnten auch mehrere Nachnamen sein oder es könnten mehrere
Titel sein, es könnten auch mehrere Vornamen sein.
Sobald Sie hier eine Flexibilität drin haben wollen, geht das mit den
Attributen nicht so gut.
Jetzt habe ich hier noch ein weiteres Beispiel.
Also hier ist jetzt angegeben, wie eine DTD, so eine
Dokumententypdefinition, verwendet wird, um ein Dokument zu
strukturieren.
Bei diesem Beispiel sehen wir, hier haben wir oben drüber natürlich
den Header stehen, das ist nichts Besonderes.
Version muss angegeben werden und dann noch das Encoding UTF-8, also
da muss der Zeichensatz angegeben werden, in dem der Text zwischen
diesen Tags definiert ist oder in dem der geschrieben wird.
Und hier sehen Sie jetzt ein erstes Element, Liste.
Dieses Liste-Element, schauen wir nach hier unten, das steht hier an
dieser Stelle, das hier unten ist also die DTD, da steht Element Liste
ist eine Folge von entweder Pass-Character-Data oder ein Element
Kunde.
Und auf jeden Fall haben wir also eine Definition von Liste.
Sie sehen, hier oben haben wir einmal Pass-Character-Data, dann haben
wir ein Kunden-Element.
Hier werden also die beiden nacheinander hingeschrieben.
Man hätte auch eine beliebige Folge machen können.
Dahinter steht nämlich noch ein Stern.
Deswegen hätte das eine beliebige Folge sein können von Text- und
Kunde -Elementen.
Was steht hier jetzt noch drin?
Das Nächste, auf das man stößt, ist...
Was ist das Nächste?
Das Nächste ist eigentlich gar nicht...
Ich will es jetzt in der Reihenfolge machen, wie ich das hier in der
Reihenfolge der Folien habe.
Wir kommen noch auf die anderen Sachen.
Hier sehen wir jetzt das Element Kunde, das ist nämlich relativ
einfach.
Element Kunde sehen wir hier.
Dieses Element ist hier unten definiert und enthält einen Namen und
eine Folge von E-Mail-Adressen.
Kann also auch keine sein, aber es könnten hier auch mehrere Adressen
sein.
Manche Leute haben ja mehrere E-Mail-Adressen.
Und das Ganze, also Name und E-Mail, kann auch häufiger vorkommen.
Also ein Plus dahinter.
Das heißt, ich kann also Folgen von Namen und E-Mail-Adressen haben.
So, hier steht in dem Beispiel nur ein Element.
Das Element Name kommt vor, das Element E-Mail kommt vor.
Dann haben wir hier weitere Elemente.
Wir haben hier unten den Namen.
Name, Company, XY, Name oder Name.
Und wir sehen, Element Name besteht nur aus Past-Character-Data.
Da ist also irgendeine Zeichenfolge.
Und als nächstes kommt jetzt hier noch E-Mail.
Und da steht, das ist auch einfach nur Past-Character-Data.
Wir sehen, hier taucht Past-Character-Data auf.
Also einfach eine Zeichenfolge.
Es ist aber wichtig, dass das Past-Character-Data ist und nicht
einfach Character-Data.
Warum ist das wichtig?
An dieser Stelle sehen wir eine Zeichenfolge und Zeichen.
A, T, Semikolon.
Das wird, weil es Past-Character-Data ist, auch noch interpretiert.
Da kommen wir gleich noch drauf.
Das wird interpretiert als ein Entity.
Und Entity sieht man hier unten.
Das ist auf einer der weiteren Folien noch mal angegeben.
Das wird dann erkannt.
Da geht man auf ein Entity.
Und dieses Entity-Add ist hier unten deklariert als das Zeichen für
den Klammeraffen.
Hier wurde aber erstmal auf die Attributliste verwiesen.
Das hätte ich eigentlich anders in der Reihenfolge machen sollen, aber
ist jetzt egal.
Die Attributliste von Liste.
Hier kommt ein Titel vor.
Titel dieser Liste.
Oder das Attribut Titel.
Da steht jetzt nur eine Zeichenfolge drin.
So wie Sie es hier sehen, Titel ist Character-Data.
Und der Wert ist impliziert, muss also nicht vorkommen.
Wenn er vorkommt, hat er den Wert, der hier steht, nämlich
Kundenliste.
Jetzt haben wir also eine Kundenliste.
Da steht noch mal drin, enthält Kundenliste.
Und da ist jetzt noch mal auf das Entity hingewiesen worden.
Hatte ich gerade eben schon auf der anderen Folie gezeigt.
Also weil das hier Pass-Character-Data ist, wird das hier an der
Stelle erkannt.
Und es müsste...
Nee, es kommt jetzt nicht, deswegen muss ich das noch mal ganz kurz
erläutern.
Hier oben sehen Sie noch etwas.
Das ging ja los mit Pass-Character-Data hier oben.
Und hier sehen Sie so eine seltsame Zeichenfolge.
Was hat das denn zu bedeuten?
Also das hier wird interpretiert als Pass-Character-Data.
Und jetzt kommen wir hier...
Also man möchte gerne Folgendes haben.
Wenn das gepasst wird, soll dort im Prinzip etwa ein Text stehen, der
auch vielleicht irgendwo dargestellt wird, als Kundenliste in, oder
möchte man Klammer auf, XML, Ausrufezeichen haben.
Dieser Text soll dort stehen.
Wenn ich aber anfangen würde, hier einfach nur dieses Enthält
-Kundenliste in, Klammer auf, Fragezeichen, XML, Ausrufezeichen,
Klammer zu.
Wenn ich das hinschreiben würde, würde das da gepasst werden.
Und das ist gar keine gültige Syntax, die hier steht.
Also haben wir hier vor einen Teil, da steht ein Klammer auf, das wird
gepasst, wird erkannt, jetzt kommt irgendetwas.
Das ist ein Hinweis für den Parser.
Was hier kommt, ist einfach nur Character-Data.
Und in diesen eckigen Klammern, der Teil, wird nur interpretiert als
Character -Data.
Und dann geht es im Prinzip weiter.
Das heißt, das ist einfach nur eine Anweisung an den Parser, dass
diese Zeichen, die hier stehen, reine Character-Data sind.
Also keine Elemente von XML.
Und deswegen einfach so als Zeichenfolge zu überlesen sind.
Ist ein bisschen umständlich, vielleicht, auf den ersten Blick.
Aber es zeigt einfach, ich kann auch innerhalb von Passed-Character
-Data bestimmte Bestandteile, die ich genau in der Form einfach nur
als Inhalt haben möchte und nicht als XML-Elemente, über diese Art und
Weise, mit dieser Anweisung an den Parser, als Character-Data
deklarieren und habe es dadurch integriert in den Inhalt.
Und kein weiteres Element des Dokuments aufgemacht.
So, damit sind wir durch diese Beispiele alle durch.
Und jetzt schauen wir uns einfach mal an, was das jetzt ist.
Wir haben also hier jetzt ein Dokument.
Da steht jetzt Liste.xml.
Das müsste eigentlich dieses Beispiel sein, was ich hier angegeben
habe.
Ich hoffe, dass es funktioniert.
Ich mache mal die anderen Dinger hier zu.
So, hier sehen wir jetzt dieses Dokument.
Ich mache das mal wieder etwas größer.
Das ist etwas zu groß geworden.
So, jetzt sehen wir hier also dieses Dokument.
Wir sehen eigentlich noch eine ganze Reihe Sachen.
Also jetzt hier die Anfangszeile.
Dann steht hier Doctype Liste.
Dahinter steht System.
Und System bezieht sich darauf, dass wir eine DTD verwenden.
Kundenliste.dtd.
Und diese Kundenliste.dtd ist also irgendwo anders deklariert.
Oder irgendwo anders in diesem Dokument.
Kundenliste.dtd steht das drin.
Genau das, was ich Ihnen gerade auf den vorigen Folien gezeigt hatte.
Hier sehen Sie übrigens die Elemente.
Da sehen Sie E-Mail, Kunde, Liste, Name.
Das sind die Elemente, die deklariert wurden in dem XML oder in der
DTD.
Und die können hier verwendet werden.
Jetzt kann ich mir das übrigens auch unterschiedlich anschauen.
Ich kann es auch auf diese Form, auf diese Art angucken.
Etwas andere Art der Darstellung.
Dann kann man das so aufklappen.
Und sieht jetzt so die unterschiedlichen Inhalte.
Etwas andere Darstellung.
Ich kann mir das als Schema...
Wieder eine andere Darstellung.
Das hat er nicht gemacht.
Dann hat er hier ein...
Das macht hier keinen Sinn.
Und im Browser...
Da steht es einfach so.
Im Browser.
Wenn Sie also so ein Dokument sich hernehmen und das darstellen
wollen, dann wird es einfach mit den ganzen Tags hingeschrieben.
Weil der Browser für die Präsentation damit nichts anfangen kann.
Das ist ja eine Inhaltsstrukturierung.
Hat mit der Präsentation gar nichts zu tun.
Wird halt nur ganz nett dargestellt.
Dann hatten wir hier noch den Text hier vorne.
Das sieht jetzt fast genauso aus.
Aber hier haben wir eben beim Text noch ein bisschen Strukturelemente.
Da sind die Zeilenangaben drin.
Die Zeilennummerierung.
Und wir sehen hier auch noch so ein bisschen Strukturelemente.
Und jetzt kann ich also nochmal daran gehen zu sehen, ist das Ganze
eigentlich wohl geformt?
Das ist es.
Und ich kann mir anschauen, das ist auch valide.
Also es ist valid, es ist gültig.
Das entspricht genau der Definition dieser Dokumententyp-Definition.
Gut, ich glaube, das reicht an der Stelle.
Leider hätte jemand dazu eine Frage.
Und die andere Möglichkeit wäre, diese Möglichkeit, bei der man die
DTD nicht extern reinnimmt, sondern konkret in das File direkt mit
rein.
Das ist also hier angegeben.
Bei diesem Beispiel sehen Sie jetzt hier oben die Dokumententyp
-Definition in den Zeilen 2 bis 8.
Da steht jetzt Doctype, Liste, eckige Klammer auf.
Und dahinter steht genau die Definition der Elemente, wie sie in der
DTD auch drin stehen müssen.
Und dann geht das hier am Ende eben zu, eckige Klammer zu.
Und auch dieses Element geht dann zu, die spitze Klammer zu.
Und dahinter steht jetzt ein Inhalt genau mit der Struktur, die hier
angegeben ist.
Also zwei verschiedene Möglichkeiten.
Ich kann im Dokument angeben, welche Strukturelemente dort vorkommen.
Und kann mit dem XML-Parser das Dokument dann entsprechend dieser
Definition parsen und feststellen, ob es gültig ist oder nicht.
Oder ich kann, wenn ich also eine DTD mehrfach verwenden möchte, so
eine DTD in eine Datei auslagern und einfach mich darauf beziehen,
wenn ich irgendein Dokument schreibe.
Also diese beiden Möglichkeiten.
Ich denke, ich habe das ausreichend erklärt.
Ganz kurz ein Vergleich.
XML und HTML.
Bei HTML haben wir halt die festen Bezeichner und die Semantik.
Gut, die Semantik der Bezeichner ist klar, es geht um die Darstellung
von Text.
Bei XML können Sie das völlig beliebig machen.
Und man verwendet es, um im Prinzip etwas über den Inhalt zu sagen.
Also wenn Sie hier in HTML zum Beispiel eine Wetterangabe machen
wollen, dann beziehen sich die Tags, die hier vorkommen, nur darauf,
dass Sie jeweils einen eigenen Paragrafen schreiben wollen.
Also untereinander.
In XML könnte man das so machen, dass man halt...
Ja, da gibt man ja etwas an, was sich jetzt nur bezieht auf die
Inhalte.
Also Wetter, Ort, Name gleich Karlsruhe, Himmel bewölkt, Temperatur 28
Grad, Wind 60 km pro Stunde, Barometer und so weiter, Feuchte, Sicht,
UV -Index.
Das sind alles nur Tags, die hier drin stehen.
Aber wenn Sie so ein Dokument sehen, haben Sie sofort den Eindruck
davon, was da inhaltlich wohl stehen sollte.
Sie könnten zwischen diese Tags, also hier bei Temp zum Beispiel,
könnten Sie beliebigen Text reinschreiben.
Sie haben natürlich trotzdem die Vorstellung, da müsste jetzt
irgendeine Gradangabe stehen.
Und das ist hier eben auch gemeint, aber es ist noch keine
vollständige Verbindung da zwischen den Tags und den Texten, die dort
dazwischen stehen können.
Trotzdem ist so ein Dokument, wie es hier auf der rechten Seite zu
sehen ist, sicherlich ein sprechenderes Dokument als dieses hier, wo
man sich eigentlich nur um die Präsentationsstruktur gekümmert hat und
auf die Inhalte kann man dabei gar nicht eingehen.
Das könnte man höchstens versuchen über irgendein Style-Sheet noch ein
bisschen zu machen, aber so richtig kriegt man das in HTML einfach
nicht hin.
Auch das habe ich, glaube ich, deutlich gemacht.
Dann gibt es, hatten wir auch kurz, oder hatte ich vielleicht am Rande
erwähnt, wenn Sie in HTML irgendeine Formel schreiben wollen, dann
können Sie Dinge machen, wie meinetwegen x-Quadrat schreiben oder Sie
können x1, sowas können Sie hinschreiben, x1 bis xn, das geht in HTML,
weil Sie hier nur mit einem Subscript und einem Superscript arbeiten.
Aber sobald Sie irgendeine Formel wie Summe x, i oder sowas schreiben
wollen und i gleich 1 bis n, sowas kriegen Sie in HTML nicht hin.
Es sei denn, Sie machen daraus irgendein GIF, also ein Bild.
Sie müssen also erstmal die Formel erzeugen, aus der Formel machen Sie
ein Bild und dann wird dieses Bild integriert in Ihren Text und dann
sieht das häufig etwas ungünstig aus.
Das ist also keine schöne Darstellung.
HTML ist nicht dafür gedacht, dass man Formeln darstellt, sondern es
ist eigentlich mehr für textbasierte Inhalte gedacht und weitere
Elemente, die man einbetten kann.
Aber in XML ist das einfacher möglich.
Da gibt es eine sogenannte Mathematical Markup Language, MathML, also
eine spezielle Variante mit einer speziellen Interpretation.
Und dazu gibt es, wie bei allen Dingen, die mit XML zu tun haben, bei
W3C eine Dokumentation zu.
Und dann haben Sie zum Beispiel solch eine Struktur, also ein XML-Teil
eines XML-Dokuments.
Das geht mit Math los.
Und dann steht hier Apply.
Dann ist hier ein Summen-Tag, der sofort wieder geschlossen wird.
Und Sie sehen hier eine BVAR.
CI.
Dann sehen Sie hier I, das ist schon alles.
CI und CI-Ende.
Ende von BVAR.
Low-Limit.
Dann sehen Sie hier 0.
Up-Limit, 100.
Hier war so eine CN eingeschlossen.
Und Low-Limit, Up-Limit, hier war es beendet.
Und dann steht nochmal ein Apply.
Power, X, I.
Apply zu Ende und Apply insgesamt zu Ende.
Das war das eine Apply.
Hier oben ist noch ein anderes Apply.
Und darin hatten Sie halt diese verschiedenen Elemente.
Und das, was hier steht, ist etwas, was einfach so aussieht.
Summe, I gleich 0 bis 100, X, I.
Das wird durch, wenn man in MathML etwas schreibt, hat man die
Möglichkeit bei der Präsentation, wenn man das präsentieren möchte,
dann wird hieraus ein entsprechender Inhalt erzeugt auf dem
Bildschirm, der diese Formel darstellt.
Also, wenn Sie auf dem normalen Browser das darstellen, würden Sie nur
diese Tags sehen, diese Tag-Struktur.
Aber Sie können das einbetten in zum Beispiel XHTML und dann wird da
entsprechend diese Formel gezeigt.
Nur um darzustellen, man kann mit XML eben wesentlich mehr Dinge
machen.
Sie brauchen dann selbstverständlich eine geeignete Darstellung dieser
ganzen Bereiche.
Im Prinzip könnte man das auch mit HTML und diesen ganzen DIV
-Bereichen machen.
Sie könnten ja mit den DIV-Bereichen genau angeben, an welcher
Position auf Ihrem Fenster ein bestimmter DIV-Bereich angeordnet sein
soll.
Und da könnten Sie also die 100 hier genau angeben.
Das könnte man also machen.
Man könnte sagen, das hier wäre vielleicht dann ein solcher DIV
-Bereich.
Das wäre ein weiterer DIV-Bereich.
Das wäre ein DIV-Bereich.
Und dieses hier wäre ein DIV-Bereich.
Die könnten Sie so nebeneinander anordnen.
Kann man durchaus machen.
Und genau das wird bei der Umsetzung, wenn Sie also so ein MathML
-Element haben und das nach XHTML rüberschieben, werden genau solche
Bereiche explizit definiert und angeordnet.
Aber das per Hand zu machen, ist natürlich viel zu umständlich.
Das muss automatisch gemacht werden.
Und das wird eben über diesen MathML-Dialekt hier einem abgenommen.
Nochmal kurz zu XML im Electronic Commerce.
Ich hatte ja darauf hingewiesen, dass EDI alleine eigentlich einige
Anforderungen nicht erfüllt.
Ist zu unflexibel.
Hat nur diese sehr textlastige Definition über diese Directories, die
sich zweimal im Jahr ändern.
Und dazu gibt es halt dann Erweiterungen.
Zum Beispiel jetzt mit XML kann man beliebige Strukturen definieren
für einen speziellen Anwendungsbereich.
Man kann einfach hinschreiben.
Man bezieht sich auf Dokumententyp so und so.
Und jeder, der jetzt ein solches Dokument verarbeiten möchte, kann
zugreifen auf diese Dokumententyp-Definition und kann dann das Element
in sinnvoller Art und Weise überprüfen, ob es valide ist oder ob es
gültig ist und dann entsprechend weiter bearbeiten.
Also hier hat man einfach mehr Möglichkeiten.
Nochmal das Beispiel von EDIfact.
Da haben wir eben diese Folge von den Elementen von EDI-Nachrichten.
Hatte ich ja schon mal dargestellt.
Da sieht man zunächst mal gar nichts.
Hier ist das gleiche in XML angegeben.
Also praktisch eine EDI-Variante in XML formuliert.
Und da sehen Sie einfach, jetzt kommt hier ein Dokumententyp Orders
.dtd ins Spiel.
Hier wurde auch ein Bereich Orders eingesetzt.
Aber auf der linken Seite ist das ja ein Element von EDIfact.
Und rechts ist es halt einfach, da bezieht man sich auf eine DTD und
weiß dann, wie das strukturiert ist.
Da gibt es ein Orders-Element.
Da ist dieses Element.
Und da drin sehen Sie jetzt eine Reihe von Inhalten, die hier sehr
stark angelehnt sind an das, was hier auf der linken Seite steht, aber
in XML übersetzt.
Ein bisschen besser lesbar.
Einfach anders strukturiert.
Und hier steht eben die Definition der Strukturierung explizit in
einer DTD drin.
Während das auf der linken Seite rauszufinden war, über diese
Definitionen in diesen ganzen Verzeichnissen und diese ganzen
Dokumenten in verschiedensten Verzeichnissen, um zu sehen, was genau
diese einzelnen Abkürzungen bedeuteten.
Also hier diese 226 oder was auch immer.
Also, das ist einfach mit XML.
Da kann man Dokumente besser strukturieren, als das mit EDIfact der
Fall war.
Und so sieht es dann halt mit XML aus.
Jetzt habe ich Ihnen so ein bisschen was über die
Strukturierungsmöglichkeiten mit XML erzählt.
Ein kleines Beispiel angegeben.
Und jetzt sieht man, man kann ja alle möglichen Dokumente angeben in
XML.
Man kann sich die Tags beliebig definieren.
Und was passiert eigentlich, wenn jetzt mehrere Bereiche Tags
definieren und auf einmal habe ich gleichartige Tags mit
unterschiedlichen Dokumenten oder Dokumenttyp-Definitionen und wenn
das Ganze jetzt irgendwie zusammengebaut wird, kann es passieren, dass
Sie auf einmal nicht mehr wissen, worauf sich eigentlich ein Element
bezieht.
Schauen Sie sich dieses Beispiel an.
Ich habe hier ein Buch-Tag.
Da ist ein Buch-Tag.
Und in diesem Buch-Tag kommt jetzt ein Titel vor.
Der Titel ist hier gleich wieder beendet.
Internet-Algorithmen.
Und das Buch gibt es zwar nicht, aber das ist ja egal.
Hätte es eigentlich längst geben sollen.
Dann gibt es hier einen Autor.
Auch in Ordnung, hört da unten auf.
Und da drin gibt es Name, Adresse.
Da steht also ein Name.
Ein Vorname.
Und da steht hier drin noch ein Titel.
Schon wieder ein Titel.
Hier steht bei dem Tag Titel Professor Doktor.
Da oben stand Internet-Algorithmen.
Ist das jetzt das gleiche Tag?
Eigentlich meint man doch hier unten was ganz anderes.
Da unten meint man doch eigentlich ein Element, das einen Titel eines
Namens beschreibt und nicht ein Element, das den Titel eines Buches
angibt.
Insofern haben wir hier unterschiedliche Elemente drin.
Und das ist eigentlich etwas, was man nicht gerne möchte.
Da könnte es Zuordnungskonflikte geben zu den einzelnen Bereichen, die
hier angegeben sind.
Das Element Titel kann ja unterschiedlich interpretiert werden.
Das möchte man vermeiden.
Und dafür verwendet man so etwas wie Namespaces, Namensräume.
Und man könnte also einen Namensraum angeben für Bücher und einen
Namensraum für Adressen.
Jetzt haben wir hier zweimal zwei Namensräume.
xmlns sind jetzt hier weitere Spezifikationen in diesem Buch-Tag.
Da gebe ich also jetzt Namensraum an.
Und dieser Namensraum hat eine Bezeichnung.
Hier steht also jetzt eine URL.
Da muss nur eine eindeutige Kennzeichnung stehen.
Es könnte sein, dass an der Stelle bei dieser URL tatsächlich
Definitionen von irgendwelchen weiteren Attributen definiert sind.
Das muss aber nicht unbedingt der Fall sein.
Das kann aber sein.
Und jetzt verwende ich hier im Weiteren Book-Titel.
Also ein Anfangsteil, ein Präfix.
Book-Doppelpunkt und dann Titel.
Und da steht Internet-Algorithmen.
Und Book-Autor.
Book-Name, Adresse.
Und dann steht hier drin, jetzt verwende ich ein Element aus einem
Adress -Namensraum.
Adress-Name, Adress-Vorname, Adress-Titel.
Und hier ist also der Titel-Tag jetzt einer, der sich auf eine Adresse
bezieht und nicht auf ein Buch.
Und damit sind die beiden voneinander unterschieden.
Das Ganze soll andeuten, dass man in XML-Dokumenten in der Lage ist,
Elemente aus verschiedenen Dokumententyp-Definitionen zu verwenden.
Sie müssen nur entsprechend durch einen Präfix gekennzeichnet sein,
damit man sie richtig einordnen kann.
Und das geschieht also jetzt über diese Namensräume.
Namensräume im Prinzip bestehen nämlich die Namen in XML immer aus
zwei Teilen, aus einem Präfix und aus dem tatsächlichen Namen.
Bei dem, was ich Ihnen zu Anfang als Beispiel genannt hatte, haben wir
den Präfix immer weggelassen.
Also der Präfix bezeichnet immer einen eindeutig gegebenen Namensraum.
Bei dem Beispiel hatte ich keinen genannt.
Da ist der Präfix im Prinzip der DTD, auf den man sich bezieht.
Das wäre also... oder nur dieses Dokument.
Wenn ich gar keinen DTD angegeben habe, wäre es nur dieses Dokument.
Dann könnte es sein, dass man explizit auf eine DTD verweist, wie in
den Beispielen, die ich Ihnen kurz gezeigt hatte.
Dann wäre der Präfix, der dort implizit vorhanden ist, der Name dieses
Dokuments, dieser DTD.
Und es könnte eben auch sein, dass es ein spezieller Unique Resource
Identifier ist.
Den könnte ich hier reinschreiben.
Dann hätte ich explizit eine URI angegeben und dann wäre das der
implizite Präfix.
In den Fällen ist also der Namensraum implizit ein Teil des Namens.
Jetzt kann ich auch Kurzform angeben, wie auf dem Beispiel auf der
vorigen Seite.
Also wenn ich hier hingehe, nicht hier.
Was habe ich denn jetzt gemacht?
Das ist witzig.
Die Seitennummerierung spielt hier anscheinend keine Rolle.
Ich hatte eigentlich auf 50 getippt.
Dann gehe ich mal auf 20.
Dazu kommen wir noch.
Sehen Sie, ich bin wieder richtig zurück.
Hier hatten wir gesehen, BUC und ADDR waren hier oben angegeben als
Abkürzungen für die Namensräume.
Und diese Abkürzungen darf ich dann verwenden.
In einem Dokument, in dem diese Abkürzungen definiert waren, kann ich
also qualifizierte Namen angeben.
Die aus sogenannten zwei No-Kolon-Names beziehen.
Ein Kolon ist ein Doppelpunkt.
Ein No-Kolon-Name ist einer, der keinen Doppelpunkt enthält.
Der Präfix und der Name werden nämlich durch einen Doppelpunkt
getrennt voneinander.
Wenn ich in den Namen selber bereits einen Doppelpunkt hätte, könnte
ich das nicht richtig voneinander unterscheiden.
Also, das Beispiel ist hier BUC-Doppelpunkt-Title.
Das wäre ein möglicher qualifizierter Name.
Wobei der dann natürlich auch als Title mit LE angegeben sein muss und
nicht als Titel, wie vorher in dem Beispiel.
Aber das ist ja völlig egal.
Und ich kann hier also irgendeinen Namensraum angeben.
In dem Fall also hier diese BUCs.
Und habe dann hier diese Elementnamen drin mit dem Präfix BUC.
Und beziehe mich dann also auf den Namensraum.
So kann ich Namenskonflikte vermeiden.
Namensräume kann man verwenden innerhalb eines Elements ohne Kurzform.
Wenn ich Buch sage und dann BUCs, wird also hier von diesem Element
an, ich bin in meinem Baum hier von der Wurzel aus irgendwo
hingekommen, bin jetzt vielleicht bei Buch und verwende dann in allen
weiteren diesen Namensraum BUC oder diesen Namensraum, der hier steht,
http://mydomain.net BUCs.
Und das ist also hier hierarchisch so geschachtelt.
Ich könnte auch, wie in dem Beispiel vorher angegeben, mehrere
Namensräume definieren mit Abkürzungen und kann dann immer wechseln
zwischen dem BUC-Präfix und dem Adress-Präfix.
Auf diese Art und Weise kriegt man also das hin, dass man Namen
eindeutig macht, indem man geeignete Präfixe verwendet.
Das also zu den Namensräumen.
Und jetzt kommen wir zu den nächsten Dingen von XML.
Ich hatte Ihnen schon gesagt, es gibt XML als sehr allgemeine Sprache
und wir müssen natürlich nicht nur XML-Dokumente hinschreiben können,
wir müssen auch XML-Dokumente präsentieren können.
Um sie präsentieren zu können, brauchen wir gewisse weitere Formate.
Also das ist hier unser Basisstandard XML.
Dann brauchen wir weitere Formate, zum Beispiel hier XSL und XSLT als
XSL -Transformer.
Um in XSLT etwas hinschreiben zu können, brauchen wir XPath und
XPointer.
Um Dokumente verlinken zu können, brauchen wir XLink.
Eine neue Form von HTML ist völlig XML-basiert, ist XHTML.
Dann brauche ich die Möglichkeit, in XSL Formatting Objects zu
definieren.
Also was ähnliches wie diese Diff-Bereiche und ihre Präsentation.
Und ich brauche noch ein paar weitere Dinge, insbesondere hier dieses
XML -Schema.
DOM und SAX.
Simple Access Protocol.
Wenn ich mich überfrage, was das ist, ist es auch im Augenblick
irrelevant.
Die beiden erkläre ich Ihnen gar nicht.
XML-Schema ist etwas, was wir als Variante noch kennenlernen müssen.
Als Variante oder als Alternative zu den Dokumententyp-Definitionen
mit einer größeren Vielfalt an Ausdrucksmöglichkeiten.
Das sind Erweiterungen von diesem einfachen XML-Standard.
Dann gibt es sogenannte horizontale Anwendungen.
Horizontal über verschiedene Branchen hinweg.
Dinge, die man an einigen anderen Bereichen braucht.
Dieses MathML habe ich kurz erwähnt.
Das können Sie in verschiedenen Bereichen verwenden.
Liefert Ihnen ein Dialekt oder eine XML-Variante für bestimmte Zwecke.
Also EB-XML zum Beispiel.
Das ist dieses Business-XML.
Oder BizTalk.
Etwas, was mit Geschäftsprozessen zu tun hat.
Können Sie in verschiedenen Branchen einsetzen.
Und dann gibt es sogenannte vertikale Standards.
Das heißt, Sie gehen in eine Branche hinein.
Meinetwegen die Chemie-Branche.
Und haben dieses ChemML.
Eine spezielle XML-Variante mit Tags, die für die Beschreibung von
chemischen Formeln geeignet sind.
Oder irgendwelchen chemischen Sachverhalten.
Oder Papinet wäre etwas für die Papierindustrie.
Oder wer weiß was.
Oder OFX noch was anderes.
Dann gibt es sowas wie ML hoch 3.
Eine Sprache oder ein vertikaler Standard speziell für Lernobjekte.
Ist in einem Projekt auch hier in Karlsruhe mitentwickelt worden.
Also vertikale Standards beziehen sich auf speziellen
Anwendungsbereich.
Und diese horizontalen Standards beziehen sich auf Dinge, die Sie in
verschiedenen Anwendungen gut gebrauchen können.
Und das nächste, was ich Ihnen jetzt erzählen muss, ist etwas über XML
-Schemata.
Ich hatte Ihnen gerade zu Beginn heute erzählt, etwas über
Dokumententyp -Definitionen.
Und darauf hingewiesen, da gibt es gewisse Dinge, die man gerne hätte,
die aber dort nicht vorhanden sind.
Und etwas, was dazu zählt, was einen stört, ist, dass man nur sehr
rudimentäre Datentypen hat.
Man hätte gerne mehr Möglichkeiten, etwas auszusagen über die Inhalte,
die bei einem Tag erlaubt sind, damit man das in einem Dokument
überprüfen kann, ob tatsächlich solche Inhalte gegeben sind.
Hier haben wir nur den String oder eine explizite Aufzählung.
Also String, das war C-Data oder Past Character Data.
Dann habe ich hier keine Vererbungsmechanismen, ich habe keine
Datentypen, so verbrauche ich die auch nicht bei DTD.
Und ich habe bei den internen Strukturen eigentlich nur sehr einfache
Dinge, da sind keine komplexen internen Strukturen vorhanden.
Ich habe die einfache Liste, ich hatte die Möglichkeit über dieses
Fragezeichen, über einen Stern, über ein Plus und das
Alternativzeichen eine gewisse Spezifikation zu machen über die
Inhalte, aber das ist nur relativ wenig.
Und in der DTD ist das, was ich gerade eben erwähnt habe, diese
Möglichkeit Namensräume zu verwenden, gar nicht gegeben.
Dafür brauche ich XML-Schemata und die bieten einiges mehr.
Ich kann in der gleichen Syntax wie in XML-Dokumenten, also die Syntax
bei der DTD war ja ein bisschen anders als bei XML.
Bei XML-Schema habe ich die gleiche Syntax, das ist ein Vorteil.
Ich habe ein deutlich verbessertes System von Datentypen, das werden
Sie gleich sehen, dass man dort sehr, sehr viele Datentypen hat.
Es gibt hier Vererbungsmechanismen zwischen diesen verschiedenen
Datentypen.
Ich kann sogar eigene, das brauche ich nur, weil ich hier auch in der
Lage bin, neue Datentypen zu definieren.
Und es werden auch die Namensräume unterstützt.
Hier haben wir ein Schema.
Was steht in diesem Schema drin?
Da steht Adressen.xml und das wäre also ein Dokument.
Adressen.xml und jetzt möchte ich...
Also dieses Adressendokument soll sich beziehen auf ein Schema.
Jetzt wird über ein Schema definiert.
Und Sie sehen, hier stehen einige Dinge drin.
Oben erstmal die üblichen Kopfzeilen.
Und da sehen Sie, steht hier vorne xsd, ein Namensraum angegeben für
Schemata.
Da steht xmlns, xsd die Abkürzung.
Und hier ist der Namensraum für solche Schemata angegeben.
Und jetzt geht es los mit einem solchen SimpleType.
Also alle diese Elemente in so einem Schema müssen mit diesem xsd
vorneweg oder mit der Kurzform, die hier definiert ist, beginnen.
Der Präfix muss hingeschrieben werden.
Und dann sehen wir, haben wir hier ein SimpleType definiert.
Der Name heißt String 30.
String 30 wird also jetzt definiert und bezieht sich auf eine
Einschränkung, Restriction eines Basistypes.
Jetzt haben wir hier also ein Basistype.
Der Basistype ist String, Zeichenfolge.
Und diese Zeichenfolgen betrachte ich jetzt eingeschränkt.
Und zwar eingeschränkt dadurch, dass ich die einschränke auf eine
maximale Länge von 30.
Also maximal 30 Zeichen.
Das ist das Ende dieser Einschränkung.
Ich habe also jetzt einen Basistype genommen, den eingeschränkt.
Habe also nur Zeichenfolgen bis zu 30 Zeichen.
So was braucht man zum Beispiel, wenn Sie vorsehen, Sie müssen
tatsächlich eine Adressdatenbank machen.
Sie wollen Adressfelder aufschreiben.
Dann ist es wichtig, dass Sie in den einzelnen Feldern für
Adressetiketten...
Hier, Sie wollen irgendwie eine Adressetikette hinschreiben.
Dann haben Sie natürlich nur eine begrenzte Anzahl von Zeichen, die
auf so eine Adressetikette raufpassen.
Und dann müssen Sie sicher sein, dass das, was Sie dort rausziehen aus
so einem Adressdokument, vom Inhalt her auch passt.
Das kann man über eine solche Definition hinbekommen.
Da hätten wir hier, wenn es 30 Zeichen wären, hätten wir hier genau
diese solche String 30 Inhalte deklariert.
Und dann wären wir also in der Lage, sowas zu überprüfen.
Das ist jetzt das Ende der Deklaration dieses Simple Types.
Und dann steht hier unten drunter ein Complex Type.
Da.
Ein Complex Type definiert, der auch irgendeinen Namen bekommen soll,
nämlich Adresstyp.
Und dieser Adresstyp besteht aus einer Sequence.
Da steht Sequence, also wir wollen eine Folge haben.
Und in dieser Folge steht jetzt zunächst mal ein Ort.
Das ist also hier ein Element.
Diese Bezeichnung Element, das kennen Sie aus der DTD.
Hier kann ich also auch Elemente definieren.
Ein Element soll hier Ort heißen.
Darauf kann man sich also auch beziehen.
Das ist also ein, ich habe also hier diesen Namen Ort für dieses
Element.
Dann habe ich ein weiteres Element, das nennt sich Postleitzahl.
PLZ.
Und dahinter sehen Sie noch ein weiteres Attribut.
Das nennt sich MinOrCurse.
Da steht 0.
MinOrCurse hat also so etwas Ähnliches, ähnliche Bedeutung wie vorher
bei der DTD.
Da durften wir ein Fragezeichen hinschreiben.
Und das Fragezeichen stand dafür, es taucht maximal einmal auf.
Muss aber nicht auftauchen.
Das ist jetzt hier angegeben durch MinOrCurse gleich 0.
Der Standard für diese Attribute, MinOrCurse, ist 1.
Wenn ich also ein Wert oder Element hinschreibe, dann soll es
mindestens oder genau einmal auftauchen.
Wenn es nicht nur einmal auftauchen soll, sondern vielleicht überhaupt
nicht, muss ich MinOrCurse 0 hinschreiben.
Wenn es mehrfach auftauchen soll, dann schreibe ich das hin, dass es
halt mehrfach auftauchen darf.
Jetzt habe ich als nächstes eine weitere Struktur, da steht jetzt
Choice.
Ich kann auswählen zwischen zwei verschiedenen Inhalten, die danach
folgen sollen.
Dahinter steht entweder eine Folge, das ist dieses Element, das ist
die eine Alternative.
Und die andere Alternative ist diese hier.
Also die Folge besteht aus wiederum zwei Elementen, nämlich einer
Straße und einer Nummer.
Wobei die beide auch wegfallen dürfen.
MinOrCurse 0 steht dort.
Und das ist also so eine Folge, Straße, Nummer.
Und das andere Element, das alternativ da stehen könnte, wäre ein
Postfach.
Und Sie wissen, dass wir bei Adressen häufig als Alternative haben,
entweder eine Straße hinzuschreiben oder ein Postfach.
Deswegen ist hier eine Alternative angegeben.
Wenn Sie sowas als HTML-Dokument hinschreiben wollten oder auch in der
DTD, hatten Sie diese Möglichkeit gar nicht.
Da müssten Sie alles hinschreiben als Bestandteile der Adresse.
Und dann würden Sie halt Straße, Nummer und Postfach hinschreiben.
Das passt nicht so ganz.
Hier haben wir eine ganz klare Angaben.
Es kann entweder Straße, Nummer stehen oder nur Postfach.
Und dann haben wir hier unten, das ist also jetzt das Ende von Choice
hier.
Und dann steht hier das Ende von Sequence.
Das ist diese Folge, die ist damit beendet.
Jetzt sehen Sie hier noch ein Attribut.
Und da steht jetzt ein Idee, also ein Name.
Der soll sich... das ist also ein Attribut.
Wozu gehört das?
Zu... müsste zu dem Complex-Type gehören.
Genau, das ist der Complex-Type da oben.
Dieser Complex-Type soll also ein Id bekommen und die Verwendung ist
required.
Das heißt, ich muss hier eine Bezeichnung angeben für so eine Adresse,
wenn ich sie irgendwo verwende.
Und damit ist dieser Complex-Type beendet und unten drunter ist das
Schema beendet.
Sie sehen ganz andere Strukturierungsmöglichkeiten als bei einer DTD.
Aber etwas, was einem deutlich mehr Möglichkeiten gibt, die Inhalte
tatsächlich auf Gültigkeit zu überprüfen.
Hier ist nochmal das Beispiel.
Ich habe das gerade eben an dem Beispiel gezeigt.
Hier sind nochmal die einzelnen Elemente rausgezogen.
Das stand oben drin.
Da war also der Name ins Raum angegeben.
Und manchmal gibt man noch einen sogenannten Target-Namespace an.
Da könnte man also noch weitere Dinge reinschreiben, die man jetzt...
Also in diesem Schema kann man jetzt noch weitere Definitionen von
Elementen formulieren.
Und die würden dann in diesem Namespace gültig sein oder in dem
praktisch zugefügt werden, der hier steht.
Hier ist einfach nur irgendeine URL angegeben.
Und auf diese Art und Weise könnte man Elemente zu einem weiteren
Namensraum praktisch dazufügen.
Also das wäre Namensraum und URI des verwendeten Schemas.
So könnte ich also auf dieses Schema wieder Bezug nehmen.
Dann hatten wir...
Hier ist ein Beispiel.
Das hatten wir in dem Beispiel gar nicht drin.
Eine weitere Möglichkeit im Schemata.
Ich kann Annotationen vornehmen.
Ich kann Informationen angeben.
Im Prinzip so etwas Ähnliches wie ein Kommentar.
Ich kann dokumentieren, was in dem Schema gemacht werden soll.
Da wird also hier drin geschrieben.
Einfach nur eine Dokumentation einer Schema-Definition.
Wir hatten in dem Beispiel gesehen die Elemente.
Das entsprach also dieser Formulierung, dass ich diese Ausrufezeichen
Element hingeschrieben hatte in dem XML.
Oder bei der DTD.
Hier haben wir jetzt diese andere Definition, Element.
Der Name ist hier ein Attribut.
Das steht in dem Fall Comment.
Und Type gleich XSDString.
Hier wäre also ein Kommentar-Element angegeben mit einem Inhalt,
irgendeine Zeichenfolge.
Also hier war diese Schreibweise für die DTD, die Ihnen ja schon
bekannt ist.
Und diese einfache Möglichkeit, einen neuen Datentyp anzugeben, hatte
ich Ihnen bereits erläutert.
String 30.
Durch eine Einschränkung der Länge auf 30 bekommen wir hier eine
kürzere Zeichenfolge.
Und das ist hier nochmal dargestellt.
Genauso kann man auch Basistypen erweitern über die Möglichkeit, eine
Extension zu machen.
Also was für Möglichkeiten das alles gibt.
Ich kann nicht auf alles eingehen.
Ich wollte nur zum Prinzip sagen, dass man hier Datentypen
einschränken oder eben auch erweitern kann.
Und hier haben wir dann diesen Vererbungsmechanismus von dem Typ, auf
den man sich als Basistyp bezieht.
Und dann kommt dieser Complex-Type, bei dem ich Ihnen gezeigt habe,
die Folge.
Das war das eine.
In diesem Fall eine Folge von Ort und Postleitzahl.
Und dann gibt es natürlich noch andere.
Hier habe ich Choice.
Das war die alternative Straße mit Nummer oder Postfach.
Es gibt noch andere.
Es gibt eine Group.
Das heißt, ich kann Elemente zu einer Gruppe zusammenfassen und kann
dann auf diese Elemente zugreifen.
Ich kann mich auf die beziehen in anderen Teilen meines XML-Dokuments.
Dann habe ich All als Alternative zu Sequence.
Wenn ich andeuten möchte, dass die Reihenfolge der Elemente
gleichgültig ist.
Wenn ich also hier oben nicht Sequence geschrieben hätte, sondern wenn
ich hier All geschrieben hätte statt Sequence, dann könnte ich Straße
und Nummer oder auch Nummer Straße schreiben.
Mir die Reihenfolge egal.
Also manchmal ist es so, dass Sie einfach nur sagen wollen, es müssen
bestimmte Elemente auftauchen in einem Dokument, aber die Reihenfolge
ist Ihnen eigentlich völlig unwichtig.
Das kann man über All angeben.
Und das Choice hatte ich Ihnen ja bereits gezeigt.
Da darf nur eines der nachfolgenden Elemente ausgewählt werden.
Das war ja dieses Beispiel hier, Postfach oder Straße.
Jetzt haben wir hier noch dieses Attribut min.occurs.
Genauso kann man max.occurs angeben als explizite Obergrenze für eine
Anzahl von Elementen.
Bei beiden ist der Defaultwert 1.
Das heißt, wenn Sie 1 angeben, ohne dass min.occurs und max.occurs
drinsteht, dann tauchen die beide genau einmal auf oder müssen genau
einmal auftauchen.
Quatsch, dann muss das Element genau einmal auftauchen.
Und dann haben wir hier noch die Attributdefinition.
Ich kann also Attribute angeben.
In dem Fall hätte ich hier eine ID-Attribut.
Und hier musste das verwendet werden.
Da hatte ich schon aufhingewiesen, optional oder required.
Das kann optional sein, kann sein, dass es auftauchen muss.
Das kennen wir aus der DTD, ist hier auch übernommen worden.
Und das war nochmal unser Beispiel für das Schema.
Das gleiche wie vorher, hat sich nichts dran verändert.
Und hier ist jetzt nochmal angegeben, ein tatsächliches Dokument, das
sich auf eine DTD bezieht.
Entschuldigung, man soll gar nicht so schnell darüber gehen.
Ich habe jetzt hier eines übersehen.
Das hier ist eine neue DTD.
Äh, Quatsch, ein neues Schema.
Vorher hatten wir...
Das hätte ich eigentlich einheitlich machen sollen.
Tut mir leid, hätte ich noch vereinheitlichen wollen.
Hier ist jetzt ein anderes XML-Schema angegeben.
Es fängt wieder an.
Und das wird im Folgenden gleich dargestellt.
Es geht hier los mit einem Schema,
das also ein Namenselement hat.
Quatsch.
Doch, da ist ein Namenselement, ein E-Mail-Element.
Dann haben wir hier ein Titel drin.
Wir haben ein Kunde-Element dort drin.
Und einen komplexen Typ.
Da steht komplex type.
Mit einer Folge.
Sequence max-or-curse.
Hier steht unbounded.
Das entspricht dem Stern, den wir vorher hatten.
Da hier nur max-or-curse drin steht, entspricht es nicht dem Stern,
sondern dem Plus.
Weil wir für den Stern bräuchten min-or-curse null.
Das sehen Sie hier unten.
E-Mail.
Das steht jetzt ref e-mail.
Ja, das ist ja hier oben definiert gewesen.
Da oben steht Element name e-mail.
Da beziehe ich mich also jetzt auf dieses Element e-mail.
Das darf hier auftauchen.
Und zwar muss es nicht auftauchen.
Und es darf beliebig oft auftauchen.
Das heißt, hier darf ich also nach einem Namen eine beliebige Folge
von e-mail-Adressen angeben.
Und diese e-mail-Adressen selber...
Gut, was hier steht, das steht hier oben.
Die Definition des Elements war hier oben angegeben.
Type gleich xsd-string, also eine beliebige Zeichenfolge.
Und hier unten wird nur Bezug genommen auf das Element, das oben
bereits definiert worden war.
Und dann sehen wir hier noch ein Attribut zu dem Complex-Type.
Das wäre hier in dem Fall ein Titel.
Das ist halt hier einfach so angegeben.
Entschuldigung, hier ist also ein Attribut ref title.
Hier oben war die Definition.
Title type xsd-string.
Hier wird auch nur Bezug genommen darauf und hier soll das vorkommen.
Das ist also der Complex-Type.
Diese Sequenz hörte dort auf.
Der Name dieses Complex-Type ist der Titel dieses Complex-Types.
ref title muss also irgendein Titel angegeben werden.
Und title in dem Fall ist eine Zeichenfolge.
Und das ist das Ende dieses Complex-Types und das Ende eines Elements.
Entschuldigung, genau so ist es.
Das Element hat den Wert hier oben.
Das Element ist Kunde.
Und da haben wir also jetzt insgesamt dieses Element Kunde deklariert.
Und darunter steht noch ein weiteres Element, eine Liste.
Und in dieser Liste haben wir jetzt wieder ein Complex-Type drin.
Da steht wieder eine Folge drin.
Also, Complex-Type, eine Sequenz.
Dies darf beliebig oft auftauchen.
Und darin steht jetzt ein Element.
Das ist also irgendein Kunde.
Kunde war irgendwo oben schon definiert worden.
Da oben.
Das heißt, hier dürfen beliebige Kunden vorkommen.
Das war der Complex-Type.
Und damit habe ich diese Folge von Kunden in einer Liste deklariert.
Das ist das Ende von diesem Complex-Type.
Da ist es zu Ende.
Da unten.
Und auch hier haben wir ein Attribute-Title.
Kann man hier also auch angeben für diese Liste.
Wir werden gleich sehen, wie man das verwendet.
Hier unten kommt dann noch das Ende von Element, Ende von Schema.
Schauen wir doch, wie man das verwendet.
Hier geht es los mit einem Dokument.
Da steht jetzt ein XML-Dokument.
XML Version 1.0.
Liste.
Title gleich Kundenliste.
Title.
Das war genau dieses Attribut hier, was wir gerade gesehen hatten.
Und jetzt wird für die Liste ein Titel angegeben, der Kundenliste
heißt.
Da stand ja Type XSD String.
Also irgendeine Zeichenfolge.
Und jetzt steht hier als Nächstes...
Das ist hier nicht angegeben.
Das Nächste ist hier, enthält Kundenliste.
Das ist einfach nur eine Zeichenfolge, kann beliebig hier drin stehen.
Dann haben wir hier den Kunden.
Und Sie sehen, bei dem Kunden steht jetzt hier eine Folge von Name, E
-Mail.
Also bei dem Namen irgendeine Zeichenfolge.
Bei der E-Mail steht hier auch irgendeine Zeichenfolge.
Das heißt, die Struktur dieser Zeichenfolge ist gar nicht irgendwie
genauer angegeben.
Da wird jeder Text als E-Mail interpretiert.
Und in diesem Fall haben wir nur ein Kundenobjekt.
Es könnten aber auch mehrere Kundenobjekte hier drin vorkommen.
Das hier ist nochmal dieses Schema.
Das war der Namensraum dieses Schemas.
Hier haben wir die Referenzen.
Hier unten, da hatte ich drauf hingewiesen.
Das waren die beiden Referenzen auf Name und E-Mail.
Und die beziehen sich auf den Bereich hier oben, wo die beiden
Elemente definiert werden.
Dann haben wir diese Sequence.
Eine geordnete Gruppe von Elementen.
Also Name und E-Mail in dieser Reihenfolge auftauchen.
Wobei E-Mail eben beliebig oft auftauchen darf.
Da haben wir hier diese Min-or-Curse und Max-or-Curse-Angaben.
Null- oder Mehrfach.
Also etwas komplizierter aufzuschreiben, aber mit mehr
Variationsmöglichkeiten.
Weil Sie hier eben auch sagen können, dass etwas von 5 bis 17 Mal
auftauchen soll.
Auch das können Sie hier angeben.
In einer DTD war das gar nicht möglich, so etwas hinzuschreiben.
Und dann sind hier eben die anderen Elemente, die jetzt gar nicht mehr
genau angegeben sind.
Wir waren da ja durchgegangen, was dort alles aufgeschrieben war.
Und jetzt folgen noch so ein paar Folien, wo ich Ihnen etwas genauer
sage, welche Dinge vorkommen dürfen in einem Schema.
Ich hatte bereits gesagt, es können so eine Elementgruppe vorkommen
oder eine Attributgruppe.
Da können Sie jetzt explizit solche Aufzählungen von Elementen oder
Attributen machen.
Und die dann zusammenfassen, unter einem Namen darauf zugreifen.
Sie können Verknüpfungen machen, eine geordnete Folge von Elementen.
Oder, das war hier geordnet oder ungeordnet, Sequence oder All.
Beziehungsweise bei Choice, da haben Sie die Möglichkeit, ein Element
aus einer Liste von Elementen auszuwählen.
Dann gibt es die Möglichkeit, aus einem Basistyp etwas abzuleiten
durch Restriktion, Einschränkung, durch Erweiterung.
Sie können Datentypen vereinigen.
Stellen Sie sich vor, Sie haben zwei Listen, über die Sie irgendwas
definiert haben.
Sie können die vereinigen über dieses Union.
Sie können direkt einen Listen-Datentyp machen, wo Sie einfach nur
Listen durch Zwischenraum trennen.
Das kennen wir von DTD.
Da wurden solche Listen einfach aufgeschrieben, auch durch
Zwischenraum getrennt.
Und das sollte genau die Folge sein.
In der DTD gab es so ein paar dieser Dinge auch, aber eben wirklich
nur ein paar der Dinge.
Und jetzt gibt es eine ganze Reihe eingebaute Datentypen im XML
-Schema.
Da sind zunächst mal eine Reihe, so die Standard-Dinge von DTDs auch
enthalten.
IDs, ID-Refs, Entities, NM-Tokens hatte ich schon bei der DTD darauf
hingewiesen.
Und dann gibt es Namen, Qualified Name oder No-Kolon-Name, Qualified
Name bei der vollständigen Name mit Präfix und Namen.
No-Kolon-Name, wie gesagt, ein Name ohne Präfix und Doppelpunkt.
Und jetzt kommen die interessanten Datentypen.
Zunächst numerische Datentypen.
Ich kann also einen beliebigen Integer-Wert angeben.
Also irgendeine ganze Zahl.
Hier steht nicht, wie viele Dezimalstellen diese Zahl haben darf.
Es darf irgendeine Folge von Ziffern sein.
Und vorne darf ein Plus oder ein Minus stehen.
Wenn kein Zeichen Plus oder Minus steht, wird Plus angenommen.
Es darf natürlich kein Komma oder Punkt drin vorkommen, dann wäre es
kein Integer.
Dann kann ich einen Bereich Non-Positive Integer angeben, da wären
dann nur negative Zahlen ohne die Null erlaubt.
Ich kann angeben, nur negative Zahlen durch Negative Integer.
Das gleiche gibt es natürlich für Positiv.
Non-Negative Integer und Positive Integer, das sind diese Bereiche
hier.
Und ich kann den Integer-Bereich einschränken auf bestimmte
Wertebereiche, die darstellbar sind im Rechner.
Also in Ihrem Programm, wenn Sie aus einem XML-Dokument Inhalte
rausziehen wollen, um die einer Variablen in Ihrem Programm
zuzuweisen.
Dann müssen Sie wissen, was für Werte kommen denn da.
Sie können die Typprüfung explizit machen im Programm.
Sie können sich aber, wenn Sie das mit XML-Schema definiert haben,
dann können Sie überprüfen zunächst mal, ob das Dokument gültig ist.
Wenn es gültig ist, dann erfüllen die Inhalte die Anforderungen
bezüglich der Datentypen.
Und dann können Sie den Wert oder den Inhalt so eines Tags, bei dem
spezifiziert war, dass es jetzt halt irgendein Int- oder Short-Wert,
entsprechend den Variablen von dem entsprechenden Typ in Ihrem
Programm zuweist.
Also nach positiven und negativen Bereich.
Also hier 2 minus 2 hoch 63 bis 2 hoch 63 minus 1.
Das sind insgesamt 2 hoch 64 Werte und die kann man hier als negative
und positive Zahlen interpretieren.
Und im Unsigned-Bereich habe ich die natürlich insgesamt als im
positiven Bereich zur Verfügung.
Also das entspricht genau den Darstellungen in Java, die Sie dort
kennen von den Bezeichnungen der Datentypen long, int, short und byte,
sind genau dort die Datentypen für die entsprechenden Wertebereiche,
die sich auf die Wortlängen im Speicher beziehen.
So, dann haben Sie noch weitere Möglichkeiten bei den numerischen
Datentypen float, ist die einfache Darstellung von Gleitpunktzahlen,
nämlich 32-Bit, das ist die übliche, einfach lange Darstellung mit 8
-Bit für die Charakteristik und 23-Bit für die Mantisse.
Und dann haben wir noch Double für doppelt lange Darstellung mit 64
-Bit.
Und jetzt kommen hier noch, also Boolean kennen Sie auch, true und
false oder 1 und 0, decimal kennen Sie nicht, decimal ist eine
interessante Variante, da können Sie eine Dezimalzahl angeben, eine
Dezimalzahl kann sein, eine negative Zahl, minus 1, 2 oder einfach nur
eine Ziffer 8 oder kann irgendwas sein, also dieses 1, 9, 8, 5 hier
wäre auch etwas.
Es kann aber auch 3.13151592 sein oder es könnte hier vorne steht 1.0,
das heißt, plus 1.0, das heißt ich habe bei decimal die Möglichkeit
eine beliebige Zeichenfolge, beginnend mit plus oder minus oder auch
kein Vorzeichen, dann beliebige Dezimalziffern und es darf ein Punkt
drin vorkommen in dieser beliebigen langen Folge von Dezimalziffern.
Hier können Sie also zum Beispiel einen, meinetwegen Ihren Public Key
in der Kryptographie in Dezimalziffern angeben oder irgendeine
riesengroße Zahlen können Sie hier hinschreiben, ohne sich zu kümmern
um die Darstellung dieser Werte, die Darstellung in einem Programm.
Und das hat durchaus Vorteile, dann kann man eben beliebig große
Zahlen hinschreiben, ich kann aber überprüfen, ist das eine
Dezimalzahl, habe ich irgendeine Folge von Ziffern, dann ein Punkt und
dann noch eine weitere Folge von Ziffern.
Das sei genug für heute, das sind die numerischen Datentypen und
nächstes Mal geht es dann weiter noch ein bisschen mit mehr
Eigenschaften von XML und mehr Varianten.
Vielen Dank für heute.