WEBVTT

00:00.700 --> 00:05.120
So, schönen guten Tag, ich begrüße Sie zur Fortsetzung von Angewandte

00:05.120 --> 00:06.000
Informatik 2.

00:06.340 --> 00:12.040
Wir hatten letztes Mal uns beschäftigt mit XML, wir sind ja im Kapitel

00:12.040 --> 00:12.960
2.2.

00:13.720 --> 00:17.080
Ich war natürlich schon viel weiter gekommen

00:22.020 --> 00:23.300
und zwar...

00:23.920 --> 00:25.180
wieso geht das jetzt nicht?

00:31.130 --> 00:33.390
Ich gehe jetzt mal auf

00:36.570 --> 00:38.050
Folie 32.

00:38.390 --> 00:41.910
Wir hatten uns letztes Mal zunächst HTML angeschaut, dann hatte ich

00:41.910 --> 00:46.310
Ihnen etwas erzählt über XML, die Extensible Markup Language.

00:46.630 --> 00:51.670
Wir sind hier natürlich dann schnell weitergegangen.

00:53.090 --> 00:58.030
Ich habe Ihnen ganz kurz den Vergleich gezeigt zwischen diesen drei

00:58.030 --> 01:03.370
Konzepten, SGML, Standard Generalized Markup Language, XML und HTML.

01:04.530 --> 01:09.950
Ich habe Ihnen ein paar Hinweise gegeben, wie man XML verwendet, wie

01:09.950 --> 01:15.830
man DTDs und XML Schemata einsetzen kann, so nur diese vom Prinzip

01:15.830 --> 01:23.270
her, um die Struktur eines Dokumentes zu validieren und dann halt

01:23.270 --> 01:28.170
entsprechend der Style Sheet Definition, die in XSL geschrieben ist,

01:28.730 --> 01:33.030
für unterschiedliche Zwecke Ausgaben zu erzeugen.

01:33.490 --> 01:37.130
Ich habe Ihnen Beispiele gegeben für XML Dokumente und dann ganz kurz

01:37.130 --> 01:41.230
so die einzelnen Bestandteile von XML Ihnen vorgestellt.

01:42.150 --> 01:46.870
Wie gesagt, ich gebe Ihnen hier keine ausführliche Einführung in XML,

01:47.130 --> 01:53.870
ich kann nur einige Dinge beleuchten und ich verweise deswegen ja auch

01:53.870 --> 01:59.430
immer wieder auf die Literatur, auf die verfügbare Information, die

01:59.430 --> 02:01.030
online da ist.

02:01.150 --> 02:03.450
Ich werde heute auch noch auf ein paar solche Dinge hinweisen.

02:03.970 --> 02:10.590
Wir hatten es dann angeschaut, die Definition der Wohlgeformtheit von

02:10.590 --> 02:11.750
XML Dokumenten.

02:12.010 --> 02:18.130
Da geht es generell darum, dass man mit der Definition der Syntax von

02:18.130 --> 02:19.970
XML halt richtig zurechtkommt.

02:20.270 --> 02:24.470
Das hat mit den anwendungsspezifischen Dokumententypen noch nichts zu

02:24.470 --> 02:24.750
tun.

02:24.950 --> 02:27.310
Da geht es nur darum, dass die Strukturen eingehalten werden.

02:27.770 --> 02:32.970
Wesentlicher Punkt, der hier in diesem Beispiel beleuchtet wurde, war,

02:33.090 --> 02:35.490
dass man halt eine vernünftige Schachtelung haben muss.

02:35.890 --> 02:41.150
Man darf nicht, wie das hier der Fall ist, solch ein, wie man hier

02:41.150 --> 02:49.450
sieht, solch ein falsch geschachtelte Struktur haben, dass innerhalb

02:49.450 --> 02:54.890
dieses Elementes Gruß auf einmal ein Element Antwort beginnt, aber

02:54.890 --> 02:58.990
nicht dort drin endet, sondern außerhalb endet.

02:59.150 --> 03:02.870
Das ist halt ein Fehler, deswegen war das nicht wohlgeformt.

03:04.290 --> 03:14.490
Und wir sind dann weitergegangen zur Gültigkeit von Dokumenten.

03:14.630 --> 03:18.610
Gültig kann ein Dokument nur sein in Bezug auf eine Dokumententyp

03:18.610 --> 03:19.390
-Definition.

03:19.390 --> 03:23.830
Da kann ich überprüfen, ob die Regeln, die definiert sind, tatsächlich

03:23.830 --> 03:27.630
eingehalten werden für die Elemente, die dort definiert sind.

03:28.370 --> 03:32.730
Hier also ein Beispiel, da wird ein Gespräch definiert mit

03:32.730 --> 03:33.770
verschiedenen Elementen drin.

03:33.830 --> 03:36.670
Wir haben uns das dann im Einzelnen angeschaut, wie man Elemente

03:36.670 --> 03:40.890
deklarieren kann und wir haben uns auch angesehen, wie man Attribute

03:40.890 --> 03:41.610
definiert.

03:42.190 --> 03:47.290
Attribute, die halt eine andere Möglichkeit geben, Inhalte in ein XML

03:47.290 --> 03:48.650
-Dokument reinzubringen.

03:49.450 --> 03:52.530
Da gab es verschiedene Möglichkeiten, sie müssen nicht unbedingt

03:52.530 --> 03:57.330
auftauchen, man kann aber spezifizieren, ob sie erforderlich sind, in

03:57.330 --> 04:02.010
dem Fall müsste dort eben stehen, required, oder ob sie optional sind,

04:02.110 --> 04:03.950
dann steht eben dort, implied.

04:05.110 --> 04:10.310
Und ich hatte dann Ihnen dieses... genau, dieses war die letzte Folie

04:10.310 --> 04:13.670
beim letzten Mal, deswegen gehen wir jetzt auf den Präsentationsmodus.

04:15.890 --> 04:21.530
Wir sehen uns nochmal dieses Beispiel jetzt hier genauer an.

04:22.410 --> 04:32.390
Ein Beispiel für ein Dokument, also dieses hier oben soll das Dokument

04:32.390 --> 04:39.850
sein, kann das auch, also dieser Bereich hier, das ist das Dokument.

04:43.370 --> 04:48.790
Und der Bereich hier unten, das sind im Prinzip DTD-Regeln.

04:53.490 --> 04:53.730
So.

04:54.390 --> 04:59.130
Und jetzt müssen wir uns anschauen, inwieweit dieses Dokument hier

04:59.130 --> 05:01.710
oben tatsächlich gültig ist.

05:01.930 --> 05:06.790
Dort stehen irgendwelche Tags, irgendwelche Marken.

05:07.530 --> 05:12.190
Und zum Beispiel steht hier oben Liste, Titel gleich, Kundenliste und

05:12.190 --> 05:12.630
so weiter.

05:13.410 --> 05:18.790
Das steht hier in Text, enthält Kundenliste, in irgendwas in Klammern.

05:19.430 --> 05:24.710
Und darunter steht dann Kunde, Anfangstag da drin, ein Name und eine E

05:24.710 --> 05:25.550
-Mail und wieder ein Kunde.

05:25.710 --> 05:27.670
Unten drunter stehen so ein paar Definitionen.

05:27.810 --> 05:30.430
Schauen wir uns das jetzt mal genauer an.

05:31.750 --> 05:38.930
Dann sehen wir hier dieses Element Kundenliste.

05:39.970 --> 05:45.530
Das ist, also der Titel ist Kundenliste, das Element ist eine Marke,

05:45.650 --> 05:46.450
die heißt Liste.

05:47.610 --> 05:51.590
Und dieses Element Liste ist hier definiert worden.

05:51.730 --> 05:53.410
Unten in der DVD, da steht Liste.

05:54.010 --> 06:00.870
Und Liste enthält eine beliebige Folge von anderen Elementen, entweder

06:00.870 --> 06:05.770
irgendwelchen Pass-Character-Data, also einer Folge von Zeichen, die

06:05.770 --> 06:11.150
durch den XML-Passer, auch nach weiteren XML-Konstrukten untersucht

06:11.150 --> 06:13.890
werden, oder einem Element Kunde.

06:14.770 --> 06:20.270
Was wir hier oben sehen ist, dass wir hier Pass-Character-Data haben.

06:20.350 --> 06:22.050
Da steht also nur eine Folge von Zeichen.

06:22.290 --> 06:25.930
Das ist also das Erste, was hier passieren konnte.

06:27.870 --> 06:29.690
Enthält Kundenliste in...

06:29.690 --> 06:32.770
Und nun sehen Sie hier etwas, das erstaunt im ersten Augenblick.

06:32.830 --> 06:34.450
Was soll dieses eckige Klammer?

06:34.810 --> 06:38.290
Sie wissen, das Ganze sollte ja Pass-Character-Data sein.

06:38.830 --> 06:44.690
Wenn es Pass-Character-Data ist, dann wird aber das hier

06:44.690 --> 06:46.570
interpretiert, was da steht.

06:47.570 --> 06:49.110
Das ist eine XML-Anweisung.

06:49.250 --> 06:52.710
Also ein XML-Passer, der guckt sich das an und stellt fest, aha, hier

06:52.710 --> 06:55.590
ist jetzt eine Anweisung, Ausdruck für Zeichen, wie ich letztes Mal

06:55.590 --> 07:00.710
erzählt, ist eine Anweisung für das Anwendungsprogramm.

07:01.650 --> 07:06.570
Und zwar sagt diese Anweisung, das was folgt, ist reines, also das was

07:06.570 --> 07:10.630
jetzt hier folgt, ist reine Character-Data und soll genau so übergeben

07:10.630 --> 07:13.290
werden und nicht weiter gepasst werden.

07:13.430 --> 07:17.010
Das heißt, jetzt soll hier nur dieses eckige Klammer auf,

07:17.090 --> 07:20.270
Fragezeichen, XML, Ausdruckbezeichen, eckige Klammer zu.

07:20.730 --> 07:24.750
Das ist allein eine Zeichenfolge, die soll so weitergegeben werden und

07:24.750 --> 07:25.970
wird nicht weiter interpretiert.

07:26.390 --> 07:27.670
Das heißt, das ist eine...

07:27.670 --> 07:31.590
Dieser Bereich, der hier zu sehen ist, ist praktisch ein

07:31.590 --> 07:35.570
Ausnahmebereich innerhalb des Pass-Character-Datas.

07:35.730 --> 07:41.310
Dieser Teil soll also nicht gepasst werden, entsprechend den XML

07:41.310 --> 07:42.570
-Regeln.

07:43.410 --> 07:46.370
Beziehungsweise, das soll nicht weiter interpretiert werden als XML

07:46.370 --> 07:47.730
-Konstrukt.

07:48.450 --> 07:49.430
Also dieser Teil hier.

07:49.950 --> 07:54.030
Das ist eine Anweisung an das Anwendungsprogramm und der Teil hier,

07:54.030 --> 07:57.110
der soll praktisch nur als Character-Data interpretiert werden.

07:57.110 --> 08:00.570
Gut, das ist also dieser eine Teil in der Liste.

08:01.870 --> 08:03.410
Und dann sehen wir hier noch einen anderen.

08:04.170 --> 08:04.710
Kunde.

08:06.030 --> 08:06.790
Ende-Kunde.

08:07.290 --> 08:09.630
Das ist halt das andere Element, das auftritt.

08:10.410 --> 08:14.450
Und das müssen wir natürlich weiter anschauen.

08:14.550 --> 08:15.550
Wir haben einmal Kunde.

08:16.850 --> 08:19.150
Kunde ist definiert als Element in der DTD.

08:19.810 --> 08:25.870
Da steht, ein Kunde besteht aus einem Name-Element und einem E-Mail

08:25.870 --> 08:29.990
-Element, wobei E-Mail auch noch beliebig oft auftreten kann.

08:30.050 --> 08:32.530
Muss nicht auftreten, kann aber beliebig oft auftreten.

08:33.850 --> 08:39.970
Und das Ganze kann auch noch mehrfach wiederholt werden.

08:40.130 --> 08:47.450
Also ich kann unter Kunde eine Folge von Namen und E-Mail-Angaben

08:47.450 --> 08:47.810
haben.

08:48.730 --> 08:51.290
Es muss aber mindestens ein Kunde dort auftauchen.

08:51.890 --> 08:53.190
Hier haben wir diesen Fall.

08:53.330 --> 08:55.010
Da tritt genau ein Kunde auf.

08:56.210 --> 09:01.270
Und zwar tritt dort ein Name auf und dahinter E-Mail.

09:01.370 --> 09:02.410
Genau wie das gefordert ist.

09:02.450 --> 09:04.610
Hier steht ja Name, E-Mail.

09:04.690 --> 09:07.570
Das heißt beide Elemente müssen auftreten in der Reihenfolge.

09:08.350 --> 09:11.330
Hier oben war dieses andere Konstrukt mit dem senkrechten Strich.

09:11.470 --> 09:16.770
Das hieß, es ist entweder PC-Data oder Kunde.

09:17.050 --> 09:18.130
Und davon beliebig viele.

09:18.130 --> 09:20.670
An diesem Fall hier haben wir eine Folge.

09:20.790 --> 09:24.710
Es muss auf jeden Fall ein Name auftauchen, gefolgt von einer

09:24.710 --> 09:27.350
beliebigen Folge von E-Mail-Adressen.

09:27.710 --> 09:30.390
Was das ist, Name und E-Mail, wissen wir natürlich gar nicht.

09:31.090 --> 09:33.770
Das ist ja an anderer Stelle definiert.

09:34.690 --> 09:39.290
Und diese andere Stelle ist halt hier unten drin in dem in der DTD.

09:39.650 --> 09:43.630
Name ist wieder ein Element und das ist einfach eine Folge von

09:44.970 --> 09:50.330
Zeichen, die durchaus weiter XML-Anweisungen enthalten können, die

09:50.330 --> 09:52.810
dann auch beachtet werden sollen.

09:52.910 --> 09:54.190
Deswegen Pass-Character-Data.

09:55.910 --> 09:58.450
Und das andere ist halt E-Mail.

09:58.510 --> 10:02.970
Das andere Element auch nur eine Folge von Pass-Character-Data.

10:03.170 --> 10:07.970
Das heißt Zeichenfolge, die halt irgendetwas weiteres noch enthalten

10:07.970 --> 10:08.290
kann.

10:08.370 --> 10:09.870
Und sie enthält auch etwas weiteres.

10:10.370 --> 10:16.050
Nämlich zum Beispiel hier so ein und-Zeichen, AT-Semikolon.

10:16.350 --> 10:18.890
Das ist ja noch etwas, was interpretiert wird.

10:19.290 --> 10:25.470
Wenn hier bei E-Mail-C-Data gestanden hätte, dann würde dieses Zeichen

10:25.470 --> 10:28.250
und AT-Semikolon nicht interpretiert werden.

10:28.370 --> 10:32.390
Da würden das einfach Zeichen sein, die so als E-Mail-Adresse

10:32.390 --> 10:33.290
interpretiert werden.

10:33.830 --> 10:39.810
Aber da das, da kommen wir gleich drauf, da das hier an der Stelle ein

10:41.110 --> 10:44.370
da das Pass-Character-Data ist, wird es interpretiert.

10:44.670 --> 10:46.310
Das sehen wir gleich nochmal, wo das definiert war.

10:46.930 --> 10:52.470
Wir haben hier oben drin etwas, was ich eigentlich eher zunächst hätte

10:52.470 --> 10:53.230
beschreiben sollen.

10:53.650 --> 10:55.330
Hier wird ein Attribut beschrieben.

10:55.570 --> 11:02.670
Also hier haben wir bei der Liste ein Title Kundenliste.

11:03.350 --> 11:08.910
Und hier sehen Sie eine Definition, eine Attributliste für das Element

11:08.910 --> 11:16.630
Liste ist nur ein Attribut angegeben, nämlich Title und der Wert ist

11:16.630 --> 11:19.570
Character -Data, also irgendeine Folge von Zeichen.

11:20.510 --> 11:23.770
Das Ganze impleit, muss also nicht unbedingt auftauchen, kann

11:23.770 --> 11:24.490
auftauchen.

11:25.310 --> 11:27.690
Wenn es auftaucht, hat es halt den dort definierten Wert.

11:28.830 --> 11:32.110
Und jetzt kommt schließlich noch das, was ich vorhin schon

11:32.110 --> 11:33.070
angesprochen habe.

11:33.710 --> 11:39.070
Innerhalb der E-Mail-Adresse taucht hier eine weitere XML oder ein

11:39.070 --> 11:40.550
weiteres XML-Konstrukt auf.

11:40.730 --> 11:43.750
Nämlich diese Abkürzung, ein Entity.

11:44.410 --> 11:46.150
Das Entity wird hier unten definiert.

11:47.530 --> 11:54.590
Da wird das Entity at, oder at, halt definiert als dieses Zeichen.

11:54.710 --> 11:58.950
Das heißt das soll eigentlich dieses Zeichen sein, da dieser

11:58.950 --> 12:05.750
Klammeraffe nicht auf allen ja, nicht auf allen Tastaturen zur

12:05.750 --> 12:06.430
Verfügung steht.

12:06.430 --> 12:11.850
Hat man hier einfach sich so beholfen und hat hier gesagt, das soll so

12:12.470 --> 12:13.790
hier definiert werden.

12:15.690 --> 12:21.410
Okay, das ist also damit kann ich das wissen wir, kann ich, mit

12:21.410 --> 12:25.030
Entities kann ich halt häufig vorkommende Texte abkürzen.

12:26.250 --> 12:30.470
In diesem Fall wird halt allein nur dieser Klammeraffe abgekürzt.

12:30.930 --> 12:33.010
Man kann auch andere Dinge abkürzen, auf die Art und Weise.

12:34.330 --> 12:38.450
Man kann DTDs auf zwei verschiedene Arten und Weise einsetzen.

12:38.610 --> 12:41.750
Das ist die eine Art, das einzusetzen ist, dass man eine Grammatik

12:41.750 --> 12:45.350
oder eine DTD tatsächlich als Datei irgendwo ablegt.

12:45.450 --> 12:46.350
Das ist hier angegeben.

12:46.450 --> 12:52.630
Hier haben wir einmal das Dokument, liste.xml ist das XML-Dokument,

12:53.010 --> 12:59.910
das sich bezieht auf eine Dokumententyp-Definition und zwar grammar

12:59.910 --> 13:05.410
.dtd und diese grammar.dtd, die muss halt extra irgendwo stehen,

13:05.510 --> 13:10.150
enthält genau diese Definitionen, die wir gerade eben gesehen haben.

13:10.450 --> 13:14.110
Eine andere Möglichkeit ist, dass ich die Definition direkt mit

13:14.110 --> 13:16.750
einbaue in mein Dokument.

13:17.490 --> 13:22.850
Das heißt direkt nach dem Header hier oben steht dann erstmal die

13:22.850 --> 13:26.850
Folge der Regeln, der Definition von diesen Elementen.

13:26.850 --> 13:33.490
Also hier wird Dokumenttyp Liste definiert, kommt hier die eckige,

13:34.230 --> 13:40.310
öffnende Klammer und dann werden halt hier drin einzelne Elemente

13:40.310 --> 13:40.990
definiert.

13:42.350 --> 13:45.490
Liste, das Element, Sie erinnern sich, genau das, was auf der

13:45.490 --> 13:49.050
Folienfolie stand, also genau das gleiche, was hier oben in der

13:49.050 --> 13:54.130
Extradatei steht, kann ich auch einbetten in ein Dokument und damit

13:54.130 --> 13:58.130
enthält das Dokument selbst die Beschreibung seiner Struktur.

14:00.050 --> 14:00.410
Gut.

14:01.590 --> 14:04.470
Das war jetzt nur eine ganz kurze Einführung in das, was man mit DTDs

14:04.470 --> 14:05.050
machen kann.

14:05.730 --> 14:07.830
Wir werden natürlich noch mehr über XML hören.

14:08.690 --> 14:12.370
Nochmal kurz zum Vergleich XML und HTML.

14:13.330 --> 14:18.690
Wir haben in, was Sie jetzt gesehen haben, in HTML ja immer nur feste

14:18.690 --> 14:19.570
Bezeichner gehabt.

14:20.070 --> 14:24.070
Fest vorgegeben, nicht anwendungsspezifisch veränderbar und die

14:24.070 --> 14:31.210
Semantik, also die Bedeutung dieser Marken ist auch vordefiniert,

14:31.270 --> 14:35.530
insbesondere wenn es um die Visualisierung der Inhalte geht.

14:36.490 --> 14:41.690
Und bei XML haben wir halt freie Bezeichner zur Beschreibung von

14:41.690 --> 14:44.470
anwendungsspezifischer Syntax, die wir in der Dokumententypdefinition

14:44.470 --> 14:45.250
angeben können.

14:45.730 --> 14:49.390
Dieses hier zeigt noch einmal, wie unterschiedlich das ist.

14:49.390 --> 14:56.090
Sie können natürlich den Inhalt, zum Beispiel eine Wettermeldung, über

14:56.090 --> 15:03.190
Karlsruhe in der einen Art angeben in HTML und dort die Folge der

15:03.190 --> 15:08.310
Informationen selbstverständlich angeben.

15:08.750 --> 15:12.270
Also Ort Karlsruhe bewölkt, 28 Grad usw.

15:13.110 --> 15:18.370
Aber Sie sehen an der Struktur des Dokuments überhaupt nichts, was den

15:18.370 --> 15:21.670
Inhalt in irgendeiner Weise widerspiegelt, während Sie bei der XML

15:21.670 --> 15:30.610
-Version natürlich deutliche Hinweise bekommen, was eigentlich dieser

15:30.610 --> 15:32.750
Inhalt bedeuten soll, der dort steht.

15:33.370 --> 15:35.950
Es könnte immer noch irgendwas Beliebiges stehen, aber es wird durch

15:35.950 --> 15:41.170
die Marken, die dort angegeben sind, ein besserer Inhalt oder eine

15:41.170 --> 15:42.390
Bedeutung suggeriert.

15:43.230 --> 15:48.690
Hier steht, dass der erste Teil sich den Namen eines Ortes angeben

15:48.690 --> 15:53.490
soll und die zweite Information soll den Zustand des Himmels angeben,

15:54.170 --> 15:58.050
das nächste die Temperatur, das nächste die Windstärke, dann den

15:58.050 --> 16:01.270
Luftdruck, Luftfeuchtigkeit, Sicht usw.

16:02.010 --> 16:09.790
Das heißt, hier hat man eindeutig Angaben über die Bedeutung des

16:09.790 --> 16:11.990
Inhalts, der hier im Dokument drinsteht.

16:12.330 --> 16:17.750
Und wenn ich solche Dokumente habe, kann ich auch viel eher die

16:17.750 --> 16:23.430
Inhalte systematisch verarbeiten, weil ich dann nämlich in Dokumenten

16:23.430 --> 16:26.010
suchen kann nach Informationen z.B.

16:26.230 --> 16:29.710
über die aktuelle Situation am Himmel.

16:30.270 --> 16:33.010
Dann kann ich alle diese Möglichkeiten da raussuchen oder ich kann

16:33.010 --> 16:37.510
alle möglichen Temperaturen mir raussuchen und finde dann genau diese

16:37.510 --> 16:41.070
Stellen in den Dokumenten, wo Angaben über Temperaturen in dieser Art

16:41.070 --> 16:41.870
und Weise sind.

16:47.770 --> 16:52.210
Gut, das zu den Vorteilen von XML.

16:52.830 --> 16:54.250
Noch ein weiterer Vorteil.

16:55.570 --> 16:58.890
Sie wissen, dass wir in HTML nur sehr eingeschränkte Möglichkeiten

16:58.890 --> 17:01.650
haben, irgendetwas Formel-ähnliches zu schreiben.

17:01.650 --> 17:07.730
Wenn Sie jemals versucht haben, irgendwelche Formeln auf HTML-Seiten

17:07.730 --> 17:12.690
zu integrieren, da können Sie minimale Dinge machen wie Indices oder

17:12.690 --> 17:16.190
Superscripts oder so etwas, aber mehr auch nicht.

17:16.970 --> 17:20.070
Und Sie können keine wirklichen Formeln schreiben.

17:20.170 --> 17:22.430
Das müssen Sie dann schon irgendwie mit einem anderen Programm machen

17:22.430 --> 17:25.670
und die Formeln dann als GIFs irgendwie einbetten.

17:25.990 --> 17:27.870
Das geht natürlich auch, aber ist mühsam.

17:27.870 --> 17:33.410
Und Sie können insbesondere dann die Inhalte dieser Formeln, die Sie

17:33.410 --> 17:36.430
als Bilder eingebettet haben, nicht sinnvoll verarbeiten.

17:37.210 --> 17:42.710
In XML gibt es etwas, was sich die Mathematical Markup Language nennt,

17:42.770 --> 17:43.710
oder MathML.

17:44.530 --> 17:51.910
Und diese MathML erlaubt es, Formeln zu definieren, zu beschreiben, in

17:51.910 --> 17:54.410
einer wesentlich sinnvolleren Art und Weise.

17:55.770 --> 17:59.530
Also, dieses hier soll etwas beschreiben.

17:59.730 --> 18:01.770
Ich zeige gleich mal, was es ist.

18:02.370 --> 18:03.590
Solch eine Summe.

18:04.110 --> 18:06.090
Das sieht natürlich ziemlich kompliziert aus.

18:06.810 --> 18:10.010
Es ist ja auch etwas kompliziert, was man dort beschreiben will.

18:10.690 --> 18:15.490
Also, beschrieben werden muss, dass es natürlich erstmal sich hier

18:15.490 --> 18:17.410
handelt um ein Math-Objekt.

18:17.710 --> 18:18.430
Das steht da oben.

18:19.050 --> 18:21.410
Und dann soll man etwas anwenden.

18:22.470 --> 18:27.670
Also, ich muss eine Summe hier anwenden, Summenzeichen.

18:28.850 --> 18:33.930
Und ich habe da drin, bei dem Summenzeichen, eine Variable, eine

18:33.930 --> 18:38.250
Laufvariable, die I heißen soll.

18:38.870 --> 18:40.090
Das muss definiert werden.

18:40.570 --> 18:43.890
Ich habe eine untere Schranke von 0.

18:45.450 --> 18:49.030
Ich habe eine obere Schranke von 100.

18:50.850 --> 18:54.770
Und das ist also das, was hier bei dem Summenzeichen stehen muss.

18:56.230 --> 19:02.030
Und dann kommt wieder da drin eine weitere Anwendung.

19:02.850 --> 19:06.230
Ich soll jetzt eine Potenz bilden.

19:07.090 --> 19:08.850
Und zwar X hoch I.

19:09.690 --> 19:10.470
Da steht es.

19:10.590 --> 19:12.410
X hoch I.

19:14.110 --> 19:20.930
Und das ist dann das Ende dieser Anwendung.

19:21.370 --> 19:25.290
Also hier wird einmal dieses Power angewendet auf die beiden Dinge.

19:26.090 --> 19:34.790
Und hier wird Summe angewandt auf den ganzen Bereich.

19:37.310 --> 19:44.290
Und das ist halt dann das Ende von dieser Anwendung einer Funktion auf

19:44.290 --> 19:45.730
etwas anderes.

19:46.290 --> 19:46.470
Gut.

19:47.490 --> 19:52.010
Das zeigt also, man kann in XML, zumindest in diesem Mathematical

19:52.010 --> 19:53.930
Markup Language, Formeln beschreiben.

19:54.030 --> 19:56.590
Das sieht nicht gerade einfach aus, aber es ist möglich.

19:56.910 --> 20:00.210
Wenn Sie mehr Tech- oder LaTeX-Erfahrung haben, da kann man ja auch

20:00.210 --> 20:01.930
Formeln sehr schön beschreiben.

20:01.930 --> 20:06.830
Erinnert ein bisschen daran, aber es ist klar, man wird immer nur in

20:06.830 --> 20:12.850
dieser oder ähnlicher Form solche Formeln beschreiben.

20:13.810 --> 20:17.230
Es ist klar, dass man das auf diese Art und Weise machen wird.

20:18.150 --> 20:22.010
Und es gibt natürlich dafür auch Editoren inzwischen, die einem

20:22.010 --> 20:28.030
erlauben, das etwas eleganter zu machen, als explizit die ganzen Dinge

20:28.030 --> 20:28.670
hinzuschreiben.

20:30.170 --> 20:30.470
Gut.

20:30.470 --> 20:38.330
Dann ganz kurz eine Information oder eine Folie zur Anwendung von XML

20:38.330 --> 20:39.450
im elektronischen Handel.

20:39.590 --> 20:42.650
Sie erinnern sich, dass wir uns mit Edifact beschäftigt hatten.

20:43.210 --> 20:48.070
Da gab es diese schrecklichen Dokumente, die gebaut waren nach den

20:48.070 --> 20:53.830
Edifact -Vereinbarungen, entsprechend den jeweiligen

20:53.830 --> 20:54.450
Veröffentlichungen.

20:54.450 --> 21:00.090
Sie sehen hier den 96a, also hier ist eine Version aus dem Jahre 96

21:00.090 --> 21:01.010
verwendet worden.

21:01.470 --> 21:04.370
Die Artikelnummer, die dort definiert sind, tauchen hier also auf.

21:05.090 --> 21:07.010
Das Ganze kann man auch in XML darstellen.

21:07.150 --> 21:12.450
Man kann also EDI-Dokumente im Prinzip in XML überführen.

21:14.230 --> 21:20.650
Das heißt, wir formulieren die Edifact-Regel innerhalb von XML und

21:20.650 --> 21:26.350
haben dann auf einmal ein XML-Dokument, das auch die EDI-Regel

21:26.350 --> 21:26.890
enthält.

21:27.790 --> 21:32.130
Also, Sie sehen hier Doctype, Dokumententypdefinition wäre

21:32.130 --> 21:38.430
Bestellungen, entsprechend wie es definiert ist in dieser DTD-Orders

21:38.430 --> 21:39.290
.dtd.

21:39.290 --> 21:48.630
Und dieses Element Orders, also Bestellungen, enthält jetzt hier im

21:48.630 --> 21:52.850
Prinzip ähnliche Elemente wie auch bei Edifact, muss ja so sein.

21:53.150 --> 21:58.750
Aber die sind hier mit etwas mehr Erläuterung versehen als bei

21:58.750 --> 21:59.730
Edifact.

21:59.730 --> 22:05.930
Also, Sie finden selbstverständlich hier auch das UNH, genau wie auf

22:05.930 --> 22:06.770
der Seite.

22:07.210 --> 22:08.730
Sie finden die gleichen Einträge.

22:09.810 --> 22:18.570
Aber Sie finden hier eben dann auch die Versionsnummern von diesem

22:18.570 --> 22:20.750
Dialekt, der gerade verwendet wird.

22:21.470 --> 22:27.050
Sie sehen hier Nummern, die muss natürlich auch alles hier drin sein,

22:27.130 --> 22:28.710
die sind hier als Attribute definiert.

22:29.630 --> 22:34.170
Auf den ersten Blick sieht der rechte Teil hier, das in XML

22:34.170 --> 22:37.670
eingebettete EDI, nicht einfacher aus als das Edifact-Dokument.

22:38.290 --> 22:44.130
Aber der Vorteil ist, dass man halt jetzt das Ganze über XML-Parser

22:44.130 --> 22:45.630
halt auch verarbeiten kann.

22:49.710 --> 22:55.790
Wenn man sich überlegt, dass man in XML-Dokumenten über DTDs beliebig

22:55.790 --> 23:03.370
Elemente definieren kann und jetzt diese Dokumenttyp-Definitionen mit

23:03.370 --> 23:07.690
anderen austauschen möchte, Dinge gemeinsam verwenden möchte,

23:07.830 --> 23:14.510
vielleicht irgendeine DTD von einem Partner verwenden möchte, einbauen

23:14.510 --> 23:19.630
möchte in die eigene DTD, dann passieren sehr schnell Dinge, die

23:19.630 --> 23:22.750
Namenskonflikte bewirken.

23:22.750 --> 23:25.550
Wie in diesem Beispiel, wo es hier einen Namenskonflikt gibt.

23:25.590 --> 23:28.150
Wir haben hier ein Element Buch.

23:29.310 --> 23:37.490
Dieses Buch enthält einen Titel, einen Autor und beim Autor gibt es

23:37.490 --> 23:39.130
ein Name und Adresse.

23:40.170 --> 23:47.190
Der Name ist halt in dem Fall Schmeck, Vorname Hartmut, Titel.

23:47.930 --> 23:52.810
Und da sehen Sie, hier ist ein Titel, Professor Doktor, Ende Name,

23:52.950 --> 23:53.970
Ende Auto, Ende Buch.

23:54.090 --> 23:56.930
Okay, wir sehen natürlich, Titel taucht hier innerhalb von Name und

23:56.930 --> 23:59.890
Adresse auf, aber wir haben das Element Titel auch da oben schon

23:59.890 --> 24:00.270
gehabt.

24:00.890 --> 24:06.890
Das heißt, hier zwischen diesen beiden Auftreten von Titel gibt es

24:06.890 --> 24:07.390
Probleme.

24:07.950 --> 24:11.630
Und das ist so, wenn der Titel hier normal auftaucht, dann

24:11.630 --> 24:15.110
überschreibt diese Definition von Titel die Bedeutung des anderen

24:15.110 --> 24:15.610
Titels.

24:15.710 --> 24:16.970
Und das ist natürlich alles ganz schrecklich.

24:17.530 --> 24:18.690
Das sollte man nicht machen.

24:19.130 --> 24:21.030
Also muss man die irgendwie voneinander trennen können.

24:21.810 --> 24:23.350
Und dafür gibt es Namensräume.

24:24.530 --> 24:27.410
Man kann Namespaces definieren.

24:28.670 --> 24:34.750
Man kann Namensräume definieren, in denen durch Verwendung von

24:34.750 --> 24:38.430
Präfixinformationen, also von hervorgestellten Informationen,

24:38.610 --> 24:45.590
sichergestellt wird, dass die Elementnamen sich unterscheiden.

24:46.410 --> 24:50.550
Hier haben wir jetzt einen Namensraum, also der wird angegeben durch

24:50.550 --> 24:54.570
XML, Namespace, in diesem Fall bezeichnet mit Book.

24:55.190 --> 25:01.130
Und da sehen Sie eine sogenannte Uniform Resource Indicator.

25:01.690 --> 25:04.410
Das muss also ein eindeutiger Präfix sein.

25:05.710 --> 25:08.230
Diese Art und Weise kann man also jetzt sagen, ich nehme jetzt hier

25:08.230 --> 25:14.630
bei Book, da kommen Teile vor, Elemente vor, die sich auf den

25:14.630 --> 25:18.790
Namensraum beziehen und ich habe einen Namensraum Address, der sich

25:18.790 --> 25:20.890
auf einen anderen Namensraum bezieht.

25:20.890 --> 25:29.310
Und dann kann ich bei allen meinen Tags, diesen Marken, jeweils als

25:29.310 --> 25:31.890
Präfix diese Abkürzung davor schreiben.

25:32.030 --> 25:36.530
Also hier habe ich jetzt Book, Titel, Internetalgorithmen, Book,

25:36.790 --> 25:43.610
Autor, Book, Name, Adresse, und dann kommt hier unten, Address, Name,

25:43.890 --> 25:46.870
Adress, Vorname, Adress, Titel.

25:46.870 --> 25:52.370
Und dadurch habe ich jetzt durch diese Präfixangaben diesen Titel von

25:52.370 --> 25:58.130
dem Titel dort deutlich unterschieden und der Namenskonflikt tritt

25:58.130 --> 25:58.930
nicht mehr auf.

26:01.350 --> 26:08.450
Solche Namespaces hat man eingeführt, sie werden allerdings von den

26:08.450 --> 26:12.430
üblichen Dokumententyp-Definitionen gar nicht unterstützt, sondern

26:12.430 --> 26:17.750
erst von einem anderen Konstrukt unterstützt, nämlich von den XML

26:17.750 --> 26:21.670
-Schemata, auf die ich gleich noch eingehen werde.

26:21.670 --> 26:28.790
Dort kann man also darauf ausgerichtet, dass man verschiedene

26:28.790 --> 26:32.970
Dokumententyp -Definitionen im Prinzip kombinieren möchte und dann

26:32.970 --> 26:36.330
tritt eben vor allen Dingen das Problem mit den Namensräumen auf.

26:36.330 --> 26:41.690
Hier auf dieser Folie habe ich Ihnen einen Überblick gegeben über die

26:41.690 --> 26:44.650
verschiedenen XML-Standards, die es gibt.

26:44.790 --> 26:48.750
Es gibt einmal den Basis-Standard, das ist die Basis-Definition der

26:48.750 --> 26:53.770
Sprache XML und dann gibt es eine ganze Reihe von Erweiterungen, die

26:53.770 --> 26:58.930
für verschiedene Zwecke da sind, wie eben XML-Schema, um Strukturen zu

26:58.930 --> 27:01.550
definieren, als Alternative zu DTDs.

27:01.550 --> 27:09.990
Dann gibt es Sprachen, um mit Objekten umzugehen, mit Objekten, die

27:09.990 --> 27:12.050
also die XML-Dokumente sind.

27:12.290 --> 27:12.950
Das ist dieses DOM.

27:13.490 --> 27:19.330
Das SAX ist eine einfache Möglichkeit, um Anwendungsschnittstellen,

27:19.890 --> 27:24.550
also Anwendungsprogrammierende API für XML-Dokumente zu beschreiben.

27:24.550 --> 27:28.270
Das SAX-DOM erlaubt also, oder stellt programmiersprachliche

27:28.270 --> 27:31.030
Konstrukte zur Verfügung, um mit XML-Dokumenten umzugehen.

27:31.830 --> 27:35.170
Und hier oben noch eine Reihe anderer Dinge, wie XPath, XLink,

27:35.270 --> 27:35.850
XPointer.

27:36.750 --> 27:40.050
Auf die werde ich gleich noch eingehen.

27:40.050 --> 27:46.110
Das sind technische Erweiterungen, die gebraucht werden, um sinnvoll

27:46.110 --> 27:52.730
XML -Dokumente beschreiben zu können, also kompliziertere Systeme

27:52.730 --> 27:53.530
damit zu beschreiben.

27:53.530 --> 28:02.070
Dann gibt es Anwendungen in verschiedenen Bereichen, also hier das EB

28:02.070 --> 28:07.310
-XML, das wäre also Electronic Business-XML, die Einbettung von EDI in

28:07.310 --> 28:08.530
XML.

28:08.890 --> 28:11.550
Und so gibt es eine ganze Reihe weiterer solcher Dinge, auf die ich

28:11.550 --> 28:12.550
jetzt gar nicht eingehen will.

28:12.550 --> 28:19.670
Es gibt weitere Standards, individuelle Formate, auf die ich natürlich

28:19.670 --> 28:21.830
in dieser Vorlesung nicht eingehen kann.

28:22.830 --> 28:27.630
Ich werde Ihnen noch etwas erzählen hier beim Thema XML zu diesen

28:27.630 --> 28:34.370
technischen Erweiterungen und insbesondere zu den XML-Schemata.

28:36.030 --> 28:37.870
Warum werden die verwendet?

28:37.970 --> 28:43.750
Man guckt sich die DTDs an und stellt fest, dass diese DTDs es zwar

28:43.750 --> 28:47.450
erlauben, die Struktur von Dokumenten zu definieren, aber ich habe

28:47.450 --> 28:49.830
hier nur relativ einfache Datentypen zur Verfügung.

28:49.830 --> 28:55.210
Ich habe diese C-Data, PC-Data und ich habe eine explizite Aufzählung

28:55.210 --> 28:58.030
von Elementen, aber nicht mehr.

28:58.130 --> 29:03.370
Das ist eigentlich keine wirklich anspruchsvolle Strukturierung von

29:03.370 --> 29:04.650
Dokumenten.

29:04.650 --> 29:09.330
Ich habe nichts, was in irgendeiner Weise an objektorientierte Dinge

29:09.330 --> 29:09.950
herankommt.

29:10.090 --> 29:15.430
Ich kann in keiner Weise Vererbungsmechanismen verwenden.

29:18.450 --> 29:25.410
Ich habe keine Möglichkeit, komplexe interne Strukturen zu

29:25.410 --> 29:26.010
deklarieren.

29:26.010 --> 29:28.230
Wie gesagt, nur rudimentäre Datentypen.

29:28.790 --> 29:33.390
Und ich habe keine Unterstützung von Namensräumen in DTDs mit den

29:33.390 --> 29:35.570
Problemen, die ich gerade eben aufgeführt habe.

29:36.030 --> 29:39.030
Das wird durch XML-Schemata beseitigt, das Problem.

29:39.030 --> 29:47.230
Da habe ich die gleiche Syntax zur Verfügung wie in XML-Dokumenten.

29:47.610 --> 29:54.190
DTDs haben eine eigene Syntax, anders als die XML-Sprache eigentlich.

29:54.570 --> 29:58.510
XML-Schemata werden mit der gleichen Syntax geschrieben wie XML

29:58.510 --> 29:59.130
-Dokumente.

29:59.730 --> 30:02.690
Wesentlicher ist aber, dass ich ein stark verbessertes System von

30:02.690 --> 30:03.530
Datentypen habe.

30:03.610 --> 30:04.830
Wesentlich reichhaltiger.

30:05.490 --> 30:08.030
Hier gibt es Vererbungsmechanismen.

30:08.510 --> 30:10.950
Ich kann also Datentypen erweitern.

30:11.090 --> 30:12.330
Ich kann sie einschränken.

30:12.810 --> 30:16.930
All die Dinge, die wir von objektorientierten Sprachen kennen.

30:16.930 --> 30:22.650
Ich kann zusätzliche Datentypen einfügen, also definieren, auch

30:22.650 --> 30:24.070
komplizierte Datentypen.

30:24.750 --> 30:28.130
Und hier werden Namensräume explizit unterstützt.

30:29.810 --> 30:33.170
Wir fangen gleich mit einem etwas komplizierten Beispiel an.

30:34.350 --> 30:37.750
Ich hoffe, Sie können das einigermaßen lesen, auch von weiter hinten.

30:38.530 --> 30:41.290
Ich will nur mal die Struktur hier so ein bisschen andeuten.

30:41.890 --> 30:44.150
Also das hier ist ein Schema.

30:46.230 --> 30:48.750
XML-Schema-Definition.

30:48.990 --> 30:49.750
XSD.

30:50.710 --> 30:55.030
Und Sie sehen hier sofort einen Namensraum, der wird hier definiert.

30:55.410 --> 30:58.290
Wieder mit so einem Uniform Resource Locator.

30:58.290 --> 31:06.930
Hier werden also die Namen in dem Bereich, der bei W3Org2001.xml

31:06.930 --> 31:09.730
-Schema steht, die Namen können verwendet werden.

31:09.730 --> 31:12.810
So, dann haben wir hier ein SimpleType.

31:12.890 --> 31:16.530
Sie sehen schon eine Typ-Definition, was wir vorher eigentlich gar

31:16.530 --> 31:17.470
nicht konnten.

31:17.590 --> 31:18.290
Das geht jetzt.

31:18.350 --> 31:19.730
Wir können Typen definieren.

31:20.550 --> 31:23.170
Sie sehen hier also ein SimpleType.

31:23.170 --> 31:27.830
Dieser SimpleType hat den Namen String 30.

31:29.070 --> 31:34.610
Er ist, das steht hier drunter, eine Einschränkung eines Basistyps.

31:35.290 --> 31:38.150
Da kommt schon der Vererbungsmechanismus rein.

31:38.290 --> 31:40.790
Ich habe einen Basistyp String.

31:42.150 --> 31:46.350
Und dieser Basistyp, der wird verändert dadurch, dass ich die Länge

31:46.350 --> 31:49.250
einschränke auf 30 Zeichen.

31:50.970 --> 31:55.830
Und das ist also diese Einschränkung, die gemacht wird an dieser

31:55.830 --> 31:56.190
Stelle.

31:58.130 --> 32:01.590
Und dadurch habe ich einen neuen, einfachen Typ definiert.

32:02.690 --> 32:05.730
Basierend auf einem Typ, der zur Verfügung gestellt wird, nämlich

32:05.730 --> 32:06.090
String.

32:07.790 --> 32:11.290
Wir haben dann hier noch ein Komplexentyp.

32:11.370 --> 32:13.290
Also nicht nur einfache Typen kann ich definieren.

32:13.870 --> 32:16.070
Ich kann auch komplexere Typen definieren.

32:16.950 --> 32:19.490
Das ist dieser zweite Teil in der Definition.

32:20.930 --> 32:24.590
KomplexType mit dem Namen AdressTyp.

32:24.590 --> 32:31.170
Und hier drin sehen Sie einige wirklich kompliziertere Dinge,

32:31.450 --> 32:32.510
wirkliche Strukturen.

32:32.930 --> 32:36.250
Das geht schon los mit einem Wort Sequence.

32:37.310 --> 32:43.850
Diese Sequence ist definiert, ich male das mal wieder in dieser Form

32:43.850 --> 32:47.310
hier an, geht von da nach bis dorthin.

32:47.870 --> 32:50.210
Das ist die Folge, die definiert wird.

32:50.750 --> 32:52.470
Und was für eine Folge wird da definiert?

32:53.590 --> 32:57.230
Das steht drin, zunächst mal, also das soll eine Folge von Elementen

32:57.230 --> 32:57.550
sein.

32:58.010 --> 33:02.810
Das erste Element ist, da steht ein Element, da steht ja ein Ref,

33:03.110 --> 33:04.030
gleich Ort.

33:04.030 --> 33:08.310
Das heißt hier wird referenziert, wird Bezug genommen auf ein Element,

33:08.510 --> 33:11.550
das irgendwo anders definiert ist, das Ort heißt.

33:12.610 --> 33:15.750
Der Name wird hier verwendet, das ist hier also gar nicht drin, dieser

33:15.750 --> 33:19.670
Element Ort ist an dieser Stelle nicht definiert, wird aber hier

33:19.670 --> 33:22.550
referenziert, muss irgendwo anders definiert sein.

33:23.790 --> 33:28.190
Dann kommt als nächstes ein Element Postleitzahlen.

33:28.790 --> 33:33.310
Und dahinter steht, min occurs zero.

33:33.470 --> 33:39.530
Also das heißt, es muss nicht unbedingt da stehen, die minimale Anzahl

33:39.530 --> 33:42.630
von Postleitzahlen an der Stelle.

33:43.190 --> 33:48.290
Also dieses Element muss mindestens null mal auftreten, kann aber eben

33:48.290 --> 33:49.530
auch öfter auftreten.

33:50.050 --> 33:53.490
Auch das kann man spezifizieren, wie oft ein Element maximal auftreten

33:53.490 --> 33:53.910
darf.

33:55.710 --> 33:58.710
Und das sind also jetzt zwei Elemente, die nacheinander kommen sollen.

33:58.810 --> 34:00.710
Erst ein Ort, dann eine Postleitzahl.

34:01.570 --> 34:03.790
Eigentlich müsste man das andersrum machen, wenn das vernünftig

34:03.790 --> 34:05.690
strukturiert sein soll, aber das ist jetzt unwichtig.

34:05.690 --> 34:10.130
Und dann haben wir noch ein Element, das hier verwendet wird.

34:10.610 --> 34:12.250
Eine Auswahl.

34:12.390 --> 34:12.970
Choice.

34:14.630 --> 34:17.150
Auswahl zwischen verschiedenen Dingen.

34:18.930 --> 34:28.330
Und zwar eine Auswahl zwischen noch einmal einer Sequenz und einem

34:28.330 --> 34:29.290
Element.

34:30.930 --> 34:32.430
Das ist das hier.

34:32.850 --> 34:37.950
Also das ist die Auswahl zwischen zwei Elementen, die hier aufgelistet

34:37.950 --> 34:38.070
sind.

34:38.190 --> 34:40.410
Das eine ist eine Struktur, nämlich eine Folge.

34:40.790 --> 34:42.210
Das andere ist ein einfaches Element.

34:43.990 --> 34:48.150
Und das heißt also in dieser Folge, die hier als komplexer Typ

34:48.150 --> 34:51.530
definiert wird, beginnt das Ganze mit einem Ort, danach kommt eine

34:51.530 --> 34:54.970
Postleitzahl und dann kommt entweder eine Folge.

34:55.650 --> 35:01.190
Diese Folge ist ein Element, Straße.

35:03.390 --> 35:05.050
Min or Curse steht hier 0.

35:06.910 --> 35:08.590
Dann Hausnummer.

35:09.270 --> 35:10.930
Ebenso steht hier auch 0.

35:11.530 --> 35:14.750
Mal muss es mindestens auftreten, also muss es nicht unbedingt

35:14.750 --> 35:15.290
auftreten.

35:16.330 --> 35:17.790
Das ist das Ende dieser Folge.

35:17.930 --> 35:19.110
Kann auch öfter auftreten.

35:19.110 --> 35:22.010
Man kann natürlich auch andere Dinge hinschreiben, ganz wie einem das

35:22.010 --> 35:22.490
gefällt.

35:23.010 --> 35:26.970
Wenn man das nicht hinschreibt, Min or Curse, dann ist der Defaultwert

35:26.970 --> 35:27.510
1.

35:27.850 --> 35:30.110
Das heißt, da muss es mindestens einmal auftauchen.

35:32.250 --> 35:35.910
Und genauso Max or Curse ist auch 1 als Defaultwert.

35:36.430 --> 35:38.390
Dann hätte man also das genau einmal dort stehen.

35:40.010 --> 35:43.970
Und die Alternative dazu, Straße Hausnummer anzugeben, ist halt, dass

35:43.970 --> 35:45.330
man ein Postfach angibt.

35:47.050 --> 35:50.570
Und eins von den beiden wird halt ausgewählt.

35:50.770 --> 35:52.230
Das wird über Choice angegeben.

35:52.230 --> 36:00.350
Und damit ist dieser komplexe Typ vollständig spezifiziert.

36:00.830 --> 36:05.570
Also eine Folge, da drin zwei Elemente, das dritte Element entweder

36:05.570 --> 36:07.650
wieder eine Folge oder ein einzelnes Element.

36:07.650 --> 36:11.150
Und dann haben wir hier unten noch ein Attribut.

36:14.370 --> 36:20.090
Und da steht also eine ID, also eine Bezeichnung vom Typ.

36:20.470 --> 36:24.550
Das ist ein Datentyp, ID, eindeutige Bezeichnung, Sie erinnern sich,

36:24.650 --> 36:28.770
eindeutige Bezeichnung eines, also ein eindeutiger Identifier.

36:28.770 --> 36:31.510
Und der wird benötigt.

36:31.690 --> 36:40.650
Das Ganze ist dieser komplexe Typ, der damit vollständig definiert

36:40.650 --> 36:40.810
ist.

36:40.910 --> 36:45.410
Also das Attribut dieses komplexen Typs ist halt hier dieser

36:45.410 --> 36:48.090
Identifier.

36:48.090 --> 36:52.430
Gut, hier haben wir also in diesem Schema einen einfachen Typ, einen

36:52.430 --> 36:56.790
komplexen Typ und Sie sehen schon wesentlich mehr Möglichkeiten, als

36:56.790 --> 37:00.150
das bei einer DTD vorkam.

37:00.810 --> 37:04.770
Und sicherlich Möglichkeiten, die man bei der Strukturierung von

37:04.770 --> 37:07.010
Dokumenten ausnutzen wird.

37:07.010 --> 37:18.870
Und deswegen sind Schemata wesentlich besser geeignet, komplexere

37:18.870 --> 37:20.870
Dokumentstrukturen zu definieren.

37:22.210 --> 37:25.110
Nochmal zu den einzelnen Bestandteilen, die da vorkamen.

37:26.230 --> 37:30.850
Das eine ist eine Präambel für so ein Schema.

37:31.390 --> 37:33.350
Da werden die Namensräume definiert.

37:34.370 --> 37:35.990
Mindestens einer muss dort stehen.

37:36.430 --> 37:41.490
Für diese Schema-Definition, man kann auch noch mehr angeben, das muss

37:41.490 --> 37:42.850
aber nicht unbedingt der Fall sein.

37:43.590 --> 37:45.350
Dann kann man Annotationen angeben.

37:45.450 --> 37:48.810
Man kann das Ganze dokumentieren, was man hier aufschreibt.

37:49.270 --> 37:50.710
Das muss nicht sein, das ist optional.

37:50.710 --> 37:54.810
Man kann also hier in einer Annotationsmarke, in einem

37:54.810 --> 38:02.090
Annotationselement aufschreiben, dass etwas, was diesen Teil genauer

38:02.090 --> 38:07.050
beschreibt, einfach als Text, wird in eine Dokumentation übernommen.

38:08.210 --> 38:10.610
Oder kann in eine Dokumentation übernommen werden.

38:11.690 --> 38:18.970
Und dann gibt es halt die Elemente, zum Beispiel ein Element könnte

38:18.970 --> 38:22.930
den Namen Comment haben, und der Typ in dem Fall wäre einfach eine

38:22.930 --> 38:23.770
Zeichenfolge.

38:25.570 --> 38:30.010
Und so etwas kann man natürlich genauso in DTDs machen.

38:31.350 --> 38:35.930
Da wäre es halt das Ausrufezeichen-Element bei der DTD-Regel.

38:36.610 --> 38:39.790
Das ist eine einfache Möglichkeit, ein Element zu definieren.

38:39.790 --> 38:44.370
Und dann hatten wir hier das, was wir ein Simple-Type nennen.

38:45.150 --> 38:52.350
Da gab es in dieser einen DTD ein Beispiel für, genau dieses Beispiel

38:52.350 --> 38:56.570
für String 30, also eine Zeichenfolge der Länge 30.

38:56.570 --> 39:07.610
Und in diesem Fall wurde dieser String eingeschränkt, basierend auf

39:07.610 --> 39:13.650
dem String-Datentyp, der standardmäßig verfügbar ist, wird die Länge

39:13.650 --> 39:18.770
eingeschränkt auf 30 und damit habe ich einen neuen Typ zur Verfügung.

39:21.290 --> 39:25.310
Gut, also dieser Simple-Type ist halt definiert über eine

39:25.310 --> 39:30.810
Einschränkung des Basistyps String und dass es eben eine Einschränkung

39:30.810 --> 39:34.330
ist, wird durch das Schlüsselwort Restriction hier angegeben, mit dem

39:34.330 --> 39:37.670
Attribut Base, dann weiß man worauf sich das bezieht.

39:38.670 --> 39:43.290
Man kann einfache Typen definieren, entweder als Einschränkung von

39:43.290 --> 39:46.870
Typen oder auch als Erweiterung von Basistypen.

39:48.010 --> 39:52.070
Dann haben wir die komplexen Typen, auch da hatten wir ein Beispiel

39:52.070 --> 39:56.230
gesehen, nämlich zum Beispiel hier die Folgen.

39:56.790 --> 40:03.210
Wenn ich eine Folge verwende, dann werden die Elemente, die zwischen

40:03.210 --> 40:07.490
dem Beginntag von Sequence und dem Endtag von Sequence stehen, genau

40:07.490 --> 40:12.330
in der Reihenfolge auftreten.

40:14.650 --> 40:19.150
Und wie gesagt, da gab es halt dieses Attribut Min or Curse, das halt

40:19.150 --> 40:25.370
die Anzahl des Auftretens dieses Elements hier nochmal beschreibt.

40:27.150 --> 40:32.550
Ich darf innerhalb eines komplexen Typs eben noch weitere Elemente

40:32.550 --> 40:36.130
oder Attribute da drin haben, beim Simple-Type war das nicht möglich,

40:36.830 --> 40:37.950
deswegen heißt er ja auch Simple.

40:39.670 --> 40:43.250
Ist also nicht nur eine Einschränkung oder Erweiterung eines

40:43.250 --> 40:47.010
Basistyps, sondern deutlich mehr, es ist noch eine Struktur da drin.

40:48.090 --> 40:53.330
In diesem Fall ist es halt die Folge von Elementen definiert durch

40:53.330 --> 40:56.350
dieses Element Sequence.

40:57.750 --> 41:07.810
Und der Vorteil einer Referenz, hier haben wir zwei Referenzen drin,

41:08.010 --> 41:11.250
Ref gleich Ort, Ref gleich Postleitzahl, Ort und Postleitzahl sind

41:11.250 --> 41:14.910
irgendwo anders definiert in einem Schema und da kann ich halt drauf

41:14.910 --> 41:19.590
mich beziehen und dann die an anderer Stelle wieder einsetzen.

41:20.450 --> 41:24.890
Und dann gibt es Möglichkeiten, noch weitere Möglichkeiten zu

41:24.890 --> 41:28.770
strukturieren, Sequence war das eine, Choice haben Sie auch schon

41:28.770 --> 41:31.170
gesehen, es gibt noch andere Dinge wie Group und All.

41:31.170 --> 41:40.030
Also bei Choice ist diese Möglichkeit gegeben, dass man auswählt

41:40.030 --> 41:42.990
zwischen den beiden Möglichkeiten, die hier stehen.

41:43.410 --> 41:48.750
Beide Möglichkeiten waren entweder Sequence oder das Element, das dort

41:48.750 --> 41:49.090
steht.

41:49.490 --> 41:54.070
Eins von den beiden muss gewählt werden, insofern kann man dort

41:54.070 --> 41:59.650
Alternativen für Elemente in einem komplexen Typ angeben.

41:59.650 --> 42:04.710
Dann gibt es noch Group, das heißt die nachfolgenden Elemente sind

42:04.710 --> 42:07.810
halt zusammengefasst zu einer Gruppe und können damit über diesen

42:07.810 --> 42:11.990
Gruppennamen referenziert werden, das kann ich dann an anderer Stelle

42:11.990 --> 42:12.890
auch wieder verwenden.

42:14.770 --> 42:22.730
All kann man auch einsetzen, das heißt nur, ich kann eine Folge von

42:22.730 --> 42:27.810
Elementen aufschreiben, die von der Art sind, wie sie anschließend

42:27.810 --> 42:30.100
aufgeführt ist, aber die Reihenfolge ist unwichtig.

42:30.850 --> 42:34.610
Bei Sequence war die Reihenfolge wichtig, bei All ist die Reihenfolge

42:34.610 --> 42:36.970
unwichtig, da kann ich die Reihenfolge im Dokument auch ändern.

42:36.970 --> 42:42.930
Bei Choice war bereits definiert, da wird genau eines der aufgeführten

42:42.930 --> 42:44.010
Elemente ausgewählt.

42:45.190 --> 42:49.210
Und dann gibt es eben noch das Attribut minOccurs, das die minimale

42:49.210 --> 42:55.550
Anzahl eines Elements festlegt und maxOccurs gibt die maximale Anzahl

42:55.550 --> 43:01.210
der Elemente an und damit kann ich dann eben noch weitere

43:01.210 --> 43:03.190
Strukturierung beschreiben.

43:04.110 --> 43:10.210
Ich kann Attribute angeben, auch das kam vor in dem Beispiel Attribut

43:10.210 --> 43:12.170
zu einem z.B.

43:12.330 --> 43:18.830
Komplex-Typ, da kam das vor, in diesem Fall wird also der Name des

43:18.830 --> 43:27.190
Attributs ID sein, der Typ ist ein eindeutiger Identifier und in dem

43:27.190 --> 43:32.790
Fall wird die Verwendung required spezifiziert, d.h.

43:33.330 --> 43:36.870
dieses Attribut muss auf jeden Fall vorkommen, ist nicht optional.

43:37.490 --> 43:39.670
Andere Möglichkeit wäre eben optional dorthin zu schreiben.

43:41.370 --> 43:46.650
Und das ist jetzt nochmal ein Beispiel für ein Schema, hier ein

43:46.650 --> 43:51.970
bisschen anders, nochmal eine Kundenliste, also wenn man das hier

43:51.970 --> 43:55.690
einmal kurz analysieren will, was steht hier eigentlich alles?

43:55.690 --> 44:00.450
Da steht wieder so eine Namensraumdefinition, dann steht hier ein

44:00.450 --> 44:08.270
Element Name, ein Element und zwar ist das einfach vom Typ String, ein

44:08.270 --> 44:17.050
Element E-Mail, also mit Namen E-Mail vom Typ String, dann steht hier

44:17.050 --> 44:24.410
ein Attribut, Title und auch wieder ein String.

44:24.410 --> 44:30.490
Das wäre also einfach nur ein Attribut für dieses Schema.

44:31.650 --> 44:37.670
Dann haben wir Element Name Kunde und das ist jetzt ein bisschen

44:37.670 --> 44:38.070
länger.

44:38.070 --> 44:50.510
Dieses Element dieser Kunde geht bis da unten hin, das müsste es

44:50.510 --> 44:51.730
eigentlich sein.

44:53.330 --> 45:03.670
Also wir haben hier Komplex Type, das ist von dort bis dort und genau,

45:04.230 --> 45:04.630
d.h.

45:04.710 --> 45:09.730
der Kunde ist hier als Komplex Type definiert.

45:11.350 --> 45:19.870
Hier steht also, dass wir hier eine Folge haben können, die beliebig

45:19.870 --> 45:21.230
oft auftreten darf.

45:24.450 --> 45:33.230
Dann steht hier eine Folge, wovon von einem Namen und einer E-Mail

45:33.230 --> 45:37.690
Adresse, auch hier kann es also zu einem Namen mehrere E-Mail Adressen

45:37.690 --> 45:39.410
geben, unbegrenzt viele sogar.

45:40.470 --> 45:44.150
Und das ist also das Ende dieses komplexen Typs.

45:44.650 --> 45:50.450
Und dann haben wir hier unten noch eine Liste, auch das hier, dieses

45:50.450 --> 45:56.270
Element in dem Fall, ist ein komplexer Typ und da sehen Sie eine Folge

45:56.270 --> 46:00.550
von einfach nur Kunden.

46:00.550 --> 46:05.210
Da steht eigentlich nur ein Element drin, Ref gleich Kunde, kann also

46:05.210 --> 46:09.430
eine beliebig lange Folge von Kundennamen hier stehen.

46:10.590 --> 46:18.930
Und das Attribut hierzu ist noch, da wird Ref Title, es wird

46:18.930 --> 46:22.650
referenziert, also hier stand Element Ref Kunde.

46:24.630 --> 46:28.990
Wenn ich referenziere Kunde, muss ich also schauen, Kunde ist da oben

46:28.990 --> 46:29.930
definiert, d.h.

46:30.090 --> 46:33.550
dieses Element kann dort unten drin stehen, genauso hier wird

46:33.550 --> 46:38.570
referenziert Title, Title war da oben definiert, das ist also dieses

46:38.570 --> 46:39.930
Attribut.

46:40.650 --> 46:46.310
Und das ist dann das Ende dieses komplexen Typs und halt das Ende

46:46.310 --> 46:46.930
dieses Schemas.

46:47.590 --> 46:53.790
Sie sehen hier, wie man so in etwa die Elemente eines Schemas

46:53.790 --> 46:56.950
verwenden kann, die Möglichkeit eines Schemas einsetzen kann, um

46:56.950 --> 46:59.550
Dokumente zu beschreiben.

47:00.770 --> 47:08.450
Also nur nochmal hier zu der Kunden, zu diesem Titel, das wäre halt

47:08.450 --> 47:13.510
eine Liste, also ein Dokument, das man konkret beschreibt, basierend

47:13.510 --> 47:15.810
auf diesem Schema.

47:16.970 --> 47:22.370
Dann taucht hier bei Liste halt auf ein Titel Kundenliste, das

47:22.370 --> 47:26.950
entspricht genau dieser Definition, die hier angegeben ist.

47:26.950 --> 47:33.330
Schauen wir nochmal dieses Beispiel an, da sind ja einige Dinge hier

47:33.330 --> 47:40.490
aufgetreten, das eine war der Namensraum, das andere waren die

47:40.490 --> 47:46.110
Referenzen, also hier kam Name und E-Mail vor, oben definiert als

47:46.110 --> 47:48.210
Elemente, hier unten wurden sie referenziert.

47:51.450 --> 47:55.570
Dann kommt hier dieser komplexe Typ vor, eine geordnete Gruppe von

47:55.570 --> 48:01.470
Elementen, also hier Name und E-Mail nacheinander und es steht etwas

48:01.470 --> 48:06.810
über die Häufigkeit des Auftretens.

48:08.710 --> 48:11.810
Das also zu der Struktur solcher Schema-Definitionen.

48:13.330 --> 48:19.930
Noch einmal Angaben zu den einzelnen Möglichkeiten, die hier bestehen,

48:20.370 --> 48:24.590
Gruppen zu definieren, da wird also eine Elementgruppe angegeben, ich

48:24.590 --> 48:28.250
kann Attributgruppen definieren, ich kann nicht Verknüpfungen, sondern

48:28.250 --> 48:31.390
Verknüpfungen, da fehlt also ein kleines P,

48:34.480 --> 48:40.280
Verknüpfungen definieren oder Compositors, das waren Sequence, All,

48:41.580 --> 48:48.160
Choice, wir haben Ableitungen, also diese objektorientierten Elemente,

48:48.240 --> 48:51.780
ich kann ableiten durch Einschränkung, ableiten durch Erweiterung, ich

48:51.780 --> 48:56.500
kann Datentypen vereinigen und ich kann Listen von Elementen angeben.

48:58.140 --> 49:04.320
Dann die Datentypen, die in SchemaTAR vorhanden sind, zunächst einmal

49:04.320 --> 49:10.940
die gleichen Datentypen, wie sie auch in XML vorkommen, sind natürlich

49:10.940 --> 49:12.780
bei SchemaTAR auch verfügbar.

49:14.260 --> 49:18.060
Wesentlich interessanter sind die Dinge, die hier stehen, ich kann

49:18.060 --> 49:24.860
speziell auch Zahlenbereiche hier spezifizieren als Datentypen, also

49:24.860 --> 49:29.520
beliebig Integer, ich kann nicht positive Integers angeben, also

49:29.520 --> 49:35.780
negativ oder Null, ich kann explizit negative Integer definieren, ich

49:35.780 --> 49:42.880
kann den Zahlenbereich Long definieren, das wären 64-Bit-Zahlen, also

49:42.880 --> 49:50.780
das Zahlenbereich von minus 263 bis 263 minus 1, halt in

49:50.780 --> 49:56.900
Komplementdarstellung, und dann habe ich den Integer-Bereich einfach

49:56.900 --> 50:04.600
lang, 32-Bit-Wort, Short wäre halt ein 16-Bit-Wort als 16-Bit-Zahl,

50:05.520 --> 50:10.080
Wide wäre ein Wide zur Verfügung, um Zahlenbereich zu spezifizieren,

50:10.160 --> 50:14.640
das kennen Sie alles aus Java, ich kann nicht negative Integers

50:14.640 --> 50:21.340
angeben, positive Integers, ich kann auch unsigned Long angeben, also

50:21.340 --> 50:28.240
nur positive Dualzahlen, dann natürlich bis 263 minus 1, entsprechend

50:28.240 --> 50:32.880
unsigned Int, unsigned Short, unsigned Wide, Floating-Point-Zahlen

50:32.880 --> 50:39.140
einmal einfach lang, entsprechend dem 32-Bit-IEEE-Format, oder Double,

50:40.320 --> 50:45.300
ich kann auch Festpunkt- oder überhaupt Dezimalzahlen praktisch

50:45.300 --> 50:49.040
angeben, das heißt, da kann irgendeine Zahl stehen, in dieser Art und

50:49.040 --> 50:55.300
Weise, entweder so als Zahl aufgeschrieben, oder auch mit einem Punkt

50:55.300 --> 51:01.300
da drin, 3.13 und so weiter in dem Fall, oder plus 1,0, oder 1.0, sind

51:01.300 --> 51:05.080
also Dezimalzahlen, ich kann auch boolische Werte angeben, also

51:05.080 --> 51:12.720
wesentlich ausführlichere Datentypen, und dadurch habe ich natürlich

51:12.720 --> 51:16.840
wesentlich mehr Möglichkeiten, auch den Inhalt eines Dokuments und die

51:16.840 --> 51:19.200
Bedeutung des Inhalts fortzufrukturieren.

51:21.280 --> 51:28.140
Weitere Dinge, String ist klar, Date speziell, Datumsformat kann ich

51:28.140 --> 51:33.220
angeben, Zeit, verschiedene Zeitangaben, also ein Zeitpunkt, eine

51:33.220 --> 51:38.580
Zeitperiode, 7 Monate Periode, das wäre ein Monatsperiode hier, ein

51:38.580 --> 51:45.020
Jahresperiode, ein Jahrhundert, dann kann man angeben, dass ein Datum

51:45.020 --> 51:53.080
regelmäßig wiederkommt, ich kann eine Zeitdauer explizit angeben, also

51:53.080 --> 52:00.120
Stunden tatsächlich auch über Stundenzeitraum definieren, und weitere

52:00.120 --> 52:05.200
Dinge, ich glaube ich brauche auf die Einzelheiten nicht mehr so sehr

52:05.200 --> 52:06.420
explizit einzugehen.

52:07.300 --> 52:13.500
Gut, das war alles, was ich dazu sagen wollte.

52:14.200 --> 52:19.480
Ich empfehle Ihnen, sich eines dieser Tutorials anzuschauen zu XML

52:19.480 --> 52:24.500
-Schema, damit Sie, wenn Sie tatsächlich einen Dokumententyp

52:24.500 --> 52:31.540
definieren wollen, dann alle Einzelheiten auch kennenlernen können, um

52:31.540 --> 52:32.720
ein Schema zu definieren.

52:32.720 --> 52:36.660
Das würde zu weit führen, wenn man das alles in dieser Vorlesung

52:36.660 --> 52:39.420
machen würde, dann hätten wir eigentlich das Hauptthema XML und nichts

52:39.420 --> 52:39.840
anderes.

52:40.700 --> 52:44.060
Und das ist nicht Ziel dieser Vorlesung.

52:44.800 --> 52:48.860
Ich will noch auf einen anderen Bereich von XML eingehen, das ist

52:48.860 --> 52:49.520
xlink.

52:50.120 --> 52:52.100
Sie erinnern sich, diese technischen Erweiterungen.

52:53.000 --> 52:57.240
Ich kann in XML-Dokumenten Links angeben, das können wir bei HTML ja

52:57.240 --> 53:01.060
auch, aber hier kann ich noch andere Typen von Links angeben.

53:01.060 --> 53:07.100
Ich kann sie verwenden, um natürlich Beziehungen zwischen Objekten zu

53:07.100 --> 53:14.120
bezeichnen, aber wesentlich interessanter, als wir das kennen aus

53:14.120 --> 53:14.480
HTML.

53:16.020 --> 53:20.780
Und zwar gibt es hier einmal die einfachen gerichteten Hyperlinks von

53:20.780 --> 53:26.380
HTML, aber auch kompliziertere Links mit mehreren Endpunkten und

53:26.380 --> 53:27.920
getypte Links.

53:28.920 --> 53:33.640
Also, das eine sind die einfachen Links.

53:34.220 --> 53:39.680
In HTML, da erinnern sich, war das so etwas wie so eine Anchor

53:39.680 --> 53:45.840
-Definition, irgendein Link, der URL war angegeben, zum Beispiel URL

53:45.840 --> 53:51.700
meiner Forschungsgruppe, mit der Bezeichnung dahinter für den Namen,

53:52.880 --> 53:56.280
der mit diesem Link verbunden werden soll.

53:56.280 --> 53:59.440
In XML sieht das etwas anders aus.

54:00.740 --> 54:11.720
Da kann ich eine Adresse angeben, hier noch den Namensraum dazu

54:11.720 --> 54:12.860
definiert.

54:12.860 --> 54:20.440
Und ich gebe jetzt einen X-Link, also einen Link an, vom Typ einfach,

54:20.540 --> 54:27.520
also simple Link, einfachen Link, der einfach nur dieses hier

54:27.520 --> 54:28.520
enthalten soll.

54:28.700 --> 54:32.520
Hier ist mir ein Zwischenraum reingerutscht, der natürlich nicht da

54:32.520 --> 54:34.000
sein darf, der muss raus.

54:38.540 --> 54:39.800
Das ist also dieser Link.

54:41.280 --> 54:43.800
Und auch hier hinter ist ein Zwischenraum reingerutscht und der muss

54:43.800 --> 54:44.220
raus.

54:45.220 --> 54:52.820
Und dann kommt dazu der Name dieses Links, in dem Fall

54:52.820 --> 54:54.900
FGEffizienteAlgorithmen.

54:56.020 --> 55:02.380
Das wäre dann in dem Dokument mit FGEffizienteAlgorithmen verbunden,

55:02.520 --> 55:03.660
dieser Link.

55:03.660 --> 55:09.180
Das ist hier ähnlich, hier ist mit FGEffizienteAlgorithmen der Link

55:09.180 --> 55:10.920
bezeichnet, der hier oben drüber steht.

55:11.780 --> 55:15.900
Also von der Bedeutung her ähnlich, aber etwas anders definiert und

55:15.900 --> 55:19.260
man sieht, man hat schon andere Möglichkeiten Links hier zu

55:19.260 --> 55:19.760
beschreiben.

55:19.760 --> 55:25.100
Man kann auch angeben, wie dieser Link erscheinen soll.

55:26.380 --> 55:34.740
Soll er beim Laden des Dokuments schon angegeben werden oder erst on

55:34.740 --> 55:38.880
request zum Beispiel, also muss ich den erst explizit anklicken, damit

55:38.880 --> 55:42.640
dieser Link auftaucht oder wird er schon beim Laden des Dokuments

55:42.640 --> 55:44.940
automatisch mit eingebunden an diese Stelle.

55:47.140 --> 55:50.820
Also andere Möglichkeit, einen Link zu bezeichnen.

55:51.220 --> 55:54.860
Ich kann also hier im beliebigen, das ist halt eine Definition, so

55:54.860 --> 55:58.360
eine Adresse, also eines Tags, da hätte ich irgendwas hinschreiben

55:58.360 --> 56:01.800
können, das Wesentliche war die Beschreibung der Links, des einfachen

56:01.800 --> 56:02.460
Links, das da stand.

56:02.460 --> 56:04.820
Also noch einmal zum SimpleLink.

56:08.620 --> 56:12.280
xLinkType in dem Fall hat den Wert Simple erhalten.

56:13.260 --> 56:18.040
Ich kann angeben, ob New oder Replace dort stehen soll.

56:18.900 --> 56:26.760
Replace heißt, es wird der Name, der dort steht, ersetzt durch das,

56:27.140 --> 56:31.520
worauf jetzt dieser Link zeigt.

56:32.680 --> 56:40.720
Ich kann angeben, wann der Link tatsächlich aktiv werden soll,

56:40.860 --> 56:45.540
entweder auf Anforderung des Benutzers oder er wird automatisch

56:45.540 --> 56:46.020
geladen.

56:47.980 --> 56:50.160
Das ist etwas, was wir bei HTML nicht kannten.

56:50.160 --> 56:54.980
Dann, wie gesagt, title liefert die Beschreibung des Links.

56:56.540 --> 57:01.740
Dieser Name muss nicht unbedingt genutzt werden, kann aber genutzt

57:01.740 --> 57:02.000
werden.

57:04.200 --> 57:04.640
Gut.

57:05.100 --> 57:07.860
Jetzt gibt es die Extended Links und die sind eben interessant.

57:08.460 --> 57:12.160
Da kann ich noch weitere Dinge angeben.

57:12.260 --> 57:16.700
Ich kann die Positionen beschreiben, die in einem erweiterten Link

57:16.700 --> 57:17.460
beteiligt sind.

57:17.560 --> 57:18.920
Da gebe ich gleich noch ein Beispiel zu.

57:20.640 --> 57:26.520
Man kann explizit die Verbindung zwischen zwei Positionen definieren.

57:27.380 --> 57:31.120
Vorher hatten wir nur innerhalb eines Dokumentes einen Link definiert,

57:31.180 --> 57:32.020
der einen Namen hatte.

57:32.180 --> 57:35.420
Das heißt, da verweise ich von dieser Stelle im Dokument auf irgendwas

57:35.420 --> 57:39.660
anderes, auf einen anderen Ort und habe dann die Information von dort

57:39.660 --> 57:41.520
geholt und eingebettet in das Dokument.

57:41.520 --> 57:48.380
Jetzt kann ich hier explizit eine Kante praktisch ziehen zwischen zwei

57:48.380 --> 57:49.560
Positionen.

57:49.840 --> 57:52.480
Ich kann das mit arg machen, das wird gleich noch in einem Beispiel

57:52.480 --> 57:53.580
erläutert.

57:53.580 --> 58:02.440
Die beiden Enden einer solchen Kante werden festgelegt mit TO und

58:02.440 --> 58:05.820
FROM, Endpunkt und Startpunkt des Links.

58:07.180 --> 58:14.500
Und dann kann man noch angeben, welche Funktion dieser Link eigentlich

58:14.500 --> 58:17.440
haben soll, welche Rolle er spielen soll in dem Dokument.

58:19.600 --> 58:24.440
Und das Beispiel, das ich Ihnen hier angeben wollte, sehen Sie hier.

58:26.100 --> 58:33.720
Hier wird ein Link beschrieben, ein erweiterter Link, der einen

58:33.720 --> 58:41.340
Locator hat, also eine Position, in dem Fall otto.mustermann.xml.

58:41.340 --> 58:43.340
Irgendein Dokument ist hier angegeben.

58:44.300 --> 58:51.160
Die Rolle in dem Fall soll sein Elternteil und der Titel otto

58:51.160 --> 58:51.700
.mustermann.

58:52.160 --> 58:57.780
Das heißt, diese Position des Links soll den Namen otto.mustermann

58:57.780 --> 59:01.620
tragen, bezieht sich auf Informationen, die in der Datei otto

59:01.620 --> 59:03.800
.mustermann.xml steht.

59:04.900 --> 59:11.340
Dann gibt es eine weitere Position, Locator, katja.mustermann.xml.

59:11.940 --> 59:19.900
Die Rolle von katja.mustermann ist Kind und in dem Fall hätte

59:19.900 --> 59:23.860
eigentlich nicht otto.mustermann stehen müssen, sondern katja

59:23.860 --> 59:24.460
.mustermann.

59:24.580 --> 59:26.300
Also da hätte ich hier was anderes schreiben müssen.

59:27.200 --> 59:34.070
Da hätte ich also eher katja.mustermann geschrieben.

59:34.970 --> 59:45.090
Und dann wird der Knoten definiert, arc from Elternteil to Kind.

59:46.890 --> 59:48.810
Show is replace.

59:49.450 --> 59:56.590
Das heißt, es soll Elternteil durch Kind ersetzt werden und actuate on

59:56.590 --> 59:57.070
request.

59:57.790 --> 59:59.210
Das ist alles, was hier steht.

59:59.310 --> 01:00:04.270
Also hier wird angegeben durch diese Definition, von welcher Position

01:00:04.270 --> 01:00:08.450
zu welcher anderen Position diese Kante zeigen soll.

01:00:08.450 --> 01:00:18.910
Das ist etwas, was man natürlich in html überhaupt nicht zur Verfügung

01:00:18.910 --> 01:00:24.790
hatte, was einem wesentlich bessere oder vielfältigere

01:00:24.790 --> 01:00:26.290
Strukturierungsmöglichkeiten gibt.

01:00:26.430 --> 01:00:30.470
Ich kann halt hier noch verschiedene Dateien miteinander verknüpfen.

01:00:31.470 --> 01:00:34.310
Das nächste ist xpath.

01:00:35.310 --> 01:00:40.890
Ich hatte xlink, da kann ich Verknüpfungen zwischen Positionen

01:00:40.890 --> 01:00:41.610
beschreiben.

01:00:42.350 --> 01:00:43.970
Jetzt gibt es xpath.

01:00:44.870 --> 01:00:49.910
xpath dient dazu, Teile eines XML-Dokuments zu adressieren.

01:00:51.310 --> 01:00:53.830
Da steht noch ein englischer Satz.

01:00:54.130 --> 01:00:57.330
Designed to be used by both xslt and xpointer.

01:00:57.590 --> 01:01:04.910
Also xpath wird verwendet in xslt.

01:01:04.910 --> 01:01:07.810
xslt, xsl ist die Style Sheet Language.

01:01:09.710 --> 01:01:15.150
Und warum muss ich bei dem Teil, in dem ich mich mit der Präsentation

01:01:15.150 --> 01:01:20.330
eines XML-Dokuments beschäftige, Teile eines XML-Dokuments

01:01:20.330 --> 01:01:21.070
adressieren?

01:01:21.610 --> 01:01:25.310
Und wenn es darum geht, ein XML-Dokument darzustellen, dann will ich

01:01:25.310 --> 01:01:28.690
ja sagen, wie die Teile, die alle beschrieben sind, jetzt auf dem

01:01:28.690 --> 01:01:30.590
Bildschirm auftauchen sollen.

01:01:30.590 --> 01:01:34.410
Dann muss ich in der Lage sein zu sagen, an dieser Stelle auf dem

01:01:34.410 --> 01:01:38.010
Bildschirm soll der Bereich aus dem Dokument dargestellt werden.

01:01:39.150 --> 01:01:42.490
Das kann man über xpath machen.

01:01:43.730 --> 01:01:46.510
Das muss ich Ihnen jetzt ein bisschen genauer erläutern.

01:01:47.370 --> 01:01:54.710
xpath ist also eine eigene Sprache, die nicht der XML-Syntax folgt,

01:01:54.770 --> 01:01:56.010
sondern eine eigene Syntax hat.

01:01:56.010 --> 01:02:06.310
Ich kann bestimmte Bereiche anhand von Mustern suchen und kann also

01:02:06.310 --> 01:02:08.390
meine Dokumente durchsuchen.

01:02:10.010 --> 01:02:11.910
Wie funktioniert das?

01:02:12.750 --> 01:02:17.630
Ich muss sogenannte Achsen spezifizieren.

01:02:18.590 --> 01:02:24.510
Also so ein xpath-Ausdruck, mit dem ich einen Bereich im Dokument

01:02:24.510 --> 01:02:29.270
spezifizieren will, besteht aus einem Triple Achse-Knoten-Test

01:02:29.270 --> 01:02:29.950
-Prädikate.

01:02:30.310 --> 01:02:32.350
Ich muss Ihnen jetzt genauer erläutern, was das ist.

01:02:34.130 --> 01:02:41.110
Diese Achse definiert die Startumgebung für den Knoten-Test, also den

01:02:41.110 --> 01:02:44.970
Bereich, in dem man jetzt etwas suchen möchte.

01:02:49.330 --> 01:02:55.590
Ich bin in irgendeinem Bereich in einem Dokument und kann jetzt

01:02:55.590 --> 01:03:03.650
entweder zum Nachfolger gehen, zum darüber liegenden Element in der

01:03:03.650 --> 01:03:05.730
XML -Struktur.

01:03:07.110 --> 01:03:10.430
Ich kann auch irgendein Attribut hier angeben, das wird gleich etwas

01:03:10.430 --> 01:03:11.250
deutlicher werden.

01:03:11.250 --> 01:03:20.170
Und ich kann durch die Knoten-Tests, die dort angegeben sind, einige

01:03:20.170 --> 01:03:24.210
spezielle Elemente innerhalb dieser sogenannten Achse spezifizieren.

01:03:26.030 --> 01:03:32.750
Also der Name Achse ist nach meiner Auffassung nicht so glücklich

01:03:32.750 --> 01:03:39.290
gewählt, ist aber so festgelegt worden und deswegen taucht er hier

01:03:39.290 --> 01:03:39.810
halt auch auf.

01:03:39.810 --> 01:03:46.790
Sie werden gleich sehen, wie er zu interpretieren ist.

01:03:47.490 --> 01:03:50.790
Das Prädikat, das hier auftaucht, ist ein burscher Ausdruck, also

01:03:50.790 --> 01:03:55.970
irgendein Test, der ausgeführt wird für jeden Knoten aus dem Bereich,

01:03:56.130 --> 01:03:59.890
der durch diese Achse definiert wird.

01:03:59.970 --> 01:04:01.070
Schauen wir uns das mal genauer an.

01:04:02.010 --> 01:04:06.110
Ich habe hier einige Elemente.

01:04:06.210 --> 01:04:08.050
Sie sehen, das baut sich hier so nacheinander auf.

01:04:09.990 --> 01:04:12.930
Ich lasse es jetzt einfach mal ganz sich aufbauen und dann werde ich

01:04:12.930 --> 01:04:14.790
das nochmal erläutern, was hier passiert.

01:04:16.130 --> 01:04:20.510
Wir haben einmal ein Dokument, hier sehr stark vereinfacht.

01:04:21.250 --> 01:04:28.870
Das ist ein XML-Dokument, das besteht aus einer geschachtelten

01:04:28.870 --> 01:04:29.390
Struktur.

01:04:29.990 --> 01:04:33.810
A ist der Wurzelknoten, da oben geht es mit A los, A hört da unten

01:04:33.810 --> 01:04:34.310
auf.

01:04:35.310 --> 01:04:44.890
Dann gibt es hier ein Element B, das endet da unten, da endet das B.

01:04:45.730 --> 01:04:48.570
Und danach beginnt hier ein Element L, das endet dort.

01:04:49.290 --> 01:04:52.250
Und das sehen Sie hier als Baum aufgemalt.

01:04:52.370 --> 01:04:54.170
Die Wurzel ist das Element A.

01:04:54.910 --> 01:04:59.510
Da drunter haben wir zwei Elemente, das sind die beiden Kinder, B und

01:04:59.510 --> 01:04:59.830
L.

01:05:01.650 --> 01:05:07.490
Und da drin kommt jetzt wieder vor, unter B, kommt einmal vor ein

01:05:07.490 --> 01:05:11.270
Element C, das nicht weiter aufgeteilt wird.

01:05:11.390 --> 01:05:14.470
Dann haben wir hier ein Element D, da drin kommt nochmal ein E vor.

01:05:15.850 --> 01:05:20.330
Innerhalb von E kommt das F vor, usw.

01:05:20.450 --> 01:05:24.950
Die Struktur, die Sie hier sehen, als Folge von solchen Marken, ist

01:05:24.950 --> 01:05:26.790
hier angegeben als Baumstruktur.

01:05:28.770 --> 01:05:33.250
Und jetzt befinden wir uns in dem Dokument an der Stelle D, also hier

01:05:33.250 --> 01:05:36.650
an dieser Stelle D, in dem Baum so dargestellt.

01:05:37.710 --> 01:05:41.530
Kann man als Achse definieren, das ist Self.

01:05:42.150 --> 01:05:47.490
Das ist also nur dieser eine Knoten in dem Dokument Baum.

01:05:48.410 --> 01:05:52.610
Dann kann ich zu Self auch angeben, Parent.

01:05:53.290 --> 01:05:56.470
Parent von Self in dem Fall wäre natürlich B.

01:05:57.670 --> 01:06:00.030
Ich kann auch Child angeben.

01:06:01.170 --> 01:06:04.710
Child von D ist sowohl E als auch G.

01:06:05.590 --> 01:06:05.770
D.h.

01:06:05.850 --> 01:06:07.030
da werden E und G spezifiziert.

01:06:07.710 --> 01:06:12.310
Ich kann auch Descendant angeben, das sind also alle Nachfolger des

01:06:12.310 --> 01:06:15.630
aktuellen Knotens, an dem ich mich befinde.

01:06:16.110 --> 01:06:18.050
Das wären E, G und auch das F.

01:06:19.370 --> 01:06:24.070
Wenn wir hier an der Stelle B wären, wären Descendant von B, wäre also

01:06:24.070 --> 01:06:28.310
dieser ganze Bereich hier unten drunter, der ganze Teil Baum unterhalb

01:06:28.310 --> 01:06:34.490
von B, wäre spezifiziert, wenn ich Descendant sage und ich bin bereits

01:06:34.490 --> 01:06:35.390
an der Stelle B.

01:06:36.170 --> 01:06:39.110
Jetzt bin ich aber an der Stelle D und da sind es halt nur die

01:06:39.110 --> 01:06:40.250
Elemente E, F und G.

01:06:40.650 --> 01:06:41.550
Dann habe ich z.B.

01:06:41.710 --> 01:06:43.690
zur Verfügung Descendant or Self.

01:06:44.610 --> 01:06:46.190
Da wäre halt das D noch mit drin.

01:06:48.030 --> 01:06:52.350
Oder Ancestor, das Pendant zu Descendant.

01:06:53.410 --> 01:06:58.430
Das sind also alle Knoten auf dem Weg zur Wurzel, B und A.

01:06:58.930 --> 01:07:02.290
Natürlich nicht L, L ist kein Ancestor von D, kein Vorgänger.

01:07:04.810 --> 01:07:18.230
Preceding in dem Fall ist nicht der Elternknoten B, sondern Preceding

01:07:18.230 --> 01:07:23.430
ist auf der gleichen Ebene wie der Knoten, an dem ich bin, das davor

01:07:23.430 --> 01:07:25.730
liegende Element, in dem Fall also C.

01:07:28.890 --> 01:07:36.450
Und Preceding Sibling wäre also in dem Fall auch C.

01:07:37.130 --> 01:07:41.010
Das sind also alle möglichen Geschwister hier, die hier drin auf der

01:07:41.010 --> 01:07:41.550
Ebene sind.

01:07:42.350 --> 01:07:43.790
Aber eben für die Vorgänge.

01:07:43.790 --> 01:08:02.190
Following in dem Fall wären H, I, dann H folgt, I folgt, J und K

01:08:02.190 --> 01:08:03.070
natürlich auch.

01:08:03.790 --> 01:08:08.610
Und L und M folgen auch dahinter in dem Dokument.

01:08:09.170 --> 01:08:10.170
Die stehen alle dahinter.

01:08:12.930 --> 01:08:19.670
Und Following Sibling wären die darauf folgenden Geschwister.

01:08:19.790 --> 01:08:20.930
Das sind nur H und I.

01:08:21.910 --> 01:08:25.370
Das sind die Geschwister, die den gleichen Elternknoten haben.

01:08:26.510 --> 01:08:29.930
Da sind L und M nicht dabei, natürlich auch J und K nicht, weil das

01:08:29.930 --> 01:08:34.930
nicht Geschwister sind, sondern in dem Fall wären das Nichten oder

01:08:34.930 --> 01:08:35.230
Neffen.

01:08:36.970 --> 01:08:41.710
Gut, auf diese Art und Weise kann man Bereiche im Dokument angeben, in

01:08:41.710 --> 01:08:45.030
denen man Operationen ausführen möchte.

01:08:45.550 --> 01:08:47.210
Das ist also der Begriff der Achse.

01:08:49.370 --> 01:08:53.430
Also, wenn ich jetzt sage, Ancestor of Self, ist das die Beschreibung

01:08:53.430 --> 01:08:54.570
einer Achse.

01:08:55.550 --> 01:09:00.010
Und die beschreibt also einen bestimmten Bereich in dem Dokument.

01:09:02.450 --> 01:09:08.330
So, dann gibt es, wir haben jetzt gesehen, so kann man Achsen

01:09:08.330 --> 01:09:08.950
definieren.

01:09:09.510 --> 01:09:12.870
Wir haben gesehen, dass ein Dokument als Baum von solchen Knoten

01:09:12.870 --> 01:09:15.470
definiert wird oder repräsentiert wird.

01:09:16.050 --> 01:09:18.590
Da drin kommen eine ganze Reihe verschiedener Knoten vor.

01:09:18.590 --> 01:09:31.690
Einmal der Wurzelknoten, dann die einzelnen Elementknoten, ich habe

01:09:31.690 --> 01:09:37.850
Attributknoten da drin, Textknoten, Processing Instruction Node,

01:09:38.190 --> 01:09:38.890
also...

01:09:42.580 --> 01:09:47.040
Sie erinnern sich an die Processing Instructions, öffnen den Klammern

01:09:47.040 --> 01:09:49.580
mit dem Ausführungszeichen, das wäre dann die Character Data, die

01:09:49.580 --> 01:09:50.300
dahinter steht.

01:09:52.380 --> 01:09:54.020
Kommentare, Namespace Node und so weiter.

01:09:54.120 --> 01:09:56.300
Das sind die verschiedenen Knotentypen, die vorkommen können.

01:09:57.600 --> 01:10:00.180
Und was für Tests kann ich jetzt ausführen?

01:10:01.880 --> 01:10:08.540
Ich kann jetzt innerhalb der Achse spezifische Elemente von

01:10:08.540 --> 01:10:10.380
Knotentypen spezifizieren.

01:10:10.760 --> 01:10:15.760
Ich kann zum Beispiel sagen, ich möchte alle Book Tags suchen

01:10:15.760 --> 01:10:17.340
innerhalb dieser Achse.

01:10:20.700 --> 01:10:25.120
Und ich kann da drin wie üblich mit so einem Sternzeichen angeben,

01:10:25.220 --> 01:10:28.200
dass ich alle Elemente innerhalb der Achse meine.

01:10:29.100 --> 01:10:33.160
Es kann sein, dass ich alle Knoten innerhalb der Achse haben möchte.

01:10:33.880 --> 01:10:36.780
Ich möchte alle Elemente mit reinem Text haben, oder alle

01:10:36.780 --> 01:10:44.560
Kommentarelemente, oder alle Anweisungen, alle Prozessanweisungen in

01:10:44.560 --> 01:10:46.200
diesem Achsenbereich.

01:10:47.740 --> 01:10:54.480
Beispiel dafür, ich möchte alle Attributknoten definieren.

01:10:54.480 --> 01:11:01.180
Oder alle Kinderknoten, die Textknoten sind.

01:11:02.280 --> 01:11:07.260
Oder ich möchte alle Kinderknoten ansprechen.

01:11:07.980 --> 01:11:09.280
Unabhängig vom Typ.

01:11:09.360 --> 01:11:11.620
Nicht nur Textknoten, sondern beliebige Knoten.

01:11:14.280 --> 01:11:20.740
Dann gibt es Prädikate, die ich aufschreiben kann.

01:11:20.840 --> 01:11:23.580
Sie erinnern sich, da waren buche Ausdrücke, die ich da aufschreiben

01:11:23.580 --> 01:11:25.920
kann, die bei jedem Knoten ausgewertet werden.

01:11:27.100 --> 01:11:30.900
Da kann ich für jeden Knoten halt solch einen Test auswerten.

01:11:30.980 --> 01:11:34.160
Da stehen dann zum Beispiel Vergleichsoperatoren drin.

01:11:34.280 --> 01:11:36.700
Da kann ich feststellen, ob dort irgendein Wert drin ist, der

01:11:36.700 --> 01:11:39.920
vielleicht kleiner, größer oder kleiner gleich oder größer gleich

01:11:39.920 --> 01:11:41.180
irgendeinen festen Wert ist.

01:11:41.620 --> 01:11:50.720
Und damit kann ich also durch ein XML-Dokument sehr ausführlich oder

01:11:50.720 --> 01:11:55.880
sehr genau durchsuchen.

01:11:56.060 --> 01:12:02.000
Ich kann komplizierte Suchen definieren in solchen XML-Dokumenten.

01:12:04.420 --> 01:12:09.760
Hier kommen nochmal solche Abkürzungen vor.

01:12:10.200 --> 01:12:16.600
Also man kann einige dieser Dinge, die hier stehen, verkürzt

01:12:16.600 --> 01:12:17.180
ausschreiben.

01:12:17.440 --> 01:12:20.380
Also self oder no, da schreibt man nur den Punkt hin.

01:12:20.860 --> 01:12:23.520
Das kennen Sie aus anderen Bereichen, dass man mit dem Punkt den

01:12:23.520 --> 01:12:26.280
aktuellen Ort in einem Baum bezeichnet.

01:12:26.400 --> 01:12:28.700
Mit Punkt Punkt die Ebene oben drüber.

01:12:28.700 --> 01:12:33.600
Dann kann ich hier mit zwei Schrägstrichen angeben descendent or self,

01:12:33.720 --> 01:12:37.480
also irgendwelche Knoten in dem darunterliegenden Bereich.

01:12:40.400 --> 01:12:47.580
Und hier sehen Sie, da kann ich also statt position number nur die

01:12:47.580 --> 01:12:50.080
Zahl in eckigen Klammern angeben, wenn Sie zum Beispiel eine Liste

01:12:50.080 --> 01:12:50.460
haben.

01:12:51.240 --> 01:12:54.560
Sie haben also eine Liste von Items oder eine Sequence oder irgend

01:12:54.560 --> 01:12:54.960
sowas.

01:12:56.280 --> 01:13:00.780
Sie haben eine Folge von Elementen und Sie wollen das dritte Element

01:13:00.780 --> 01:13:01.240
angeben.

01:13:01.300 --> 01:13:03.860
Dann können Sie einfach eine eckige Klammer und 3 dahinter schreiben,

01:13:04.260 --> 01:13:07.960
dann haben Sie das dritte Element in dieser Liste spezifiziert.

01:13:09.540 --> 01:13:11.180
Nochmal ein paar Beispiele.

01:13:11.440 --> 01:13:18.320
Hier child book position kleiner gleich 3 heißt, hier werden die

01:13:18.320 --> 01:13:22.080
ersten drei Kind-Elemente von book angesprochen.

01:13:23.020 --> 01:13:31.420
Position ist also die Position des Knotens innerhalb dieser Kinder und

01:13:31.420 --> 01:13:34.800
wenn da steht kleiner gleich 3 heißt es halt, nur die ersten drei

01:13:34.800 --> 01:13:35.960
werden angesprochen.

01:13:35.960 --> 01:13:43.400
Oder address wählt halt den Elementknoten mit dem Namen Adresse.

01:13:44.820 --> 01:13:52.020
Dann wird hier der Name Knoten direkt unter dem address Elementknoten

01:13:52.020 --> 01:13:52.540
gewählt.

01:13:54.060 --> 01:14:01.540
Oder hier werden nur solche Knoten gewählt bei denen der Name John Doe

01:14:01.540 --> 01:14:02.040
ist.

01:14:04.460 --> 01:14:12.280
Oder ich wähle hier unterhalb von book alle Namen aus.

01:14:13.680 --> 01:14:16.200
Also irgendwo unterhalb von book Elementknoten.

01:14:16.260 --> 01:14:20.480
Das waren ja diese beiden Schrägstriche nacheinander.

01:14:20.720 --> 01:14:24.660
Das hieß irgendetwas nachfolgendes und dort überall die Namen

01:14:24.660 --> 01:14:27.220
Elementknoten und so weiter.

01:14:28.140 --> 01:14:29.560
Weitere Beispiele.

01:14:30.980 --> 01:14:32.760
Ich kann absolute Ausdrücke angeben.

01:14:33.060 --> 01:14:37.420
Ich kann die Wurzel definieren.

01:14:38.020 --> 01:14:40.460
Also ich kann auf die Wurzel ansprechen.

01:14:42.700 --> 01:14:50.920
Ich kann hier also wie gesagt auf Name Elementknoten ansprechen.

01:14:51.100 --> 01:14:54.040
Irgendwo im Dokument verschiedene Arten das zu definieren.

01:14:55.880 --> 01:14:59.380
Ich kann Attribute ansprechen.

01:14:59.480 --> 01:15:05.340
Attribute werden angesprochen mit dem Add Zeichen da drin.

01:15:07.140 --> 01:15:13.080
Und in dem Fall würde ich also ein Type Attribut unterhalb von Address

01:15:13.080 --> 01:15:14.340
Elementknoten ansprechen.

01:15:14.960 --> 01:15:21.140
Und in diesem Fall nur solche Type Attribut Knoten mit Wert E-Mail.

01:15:22.880 --> 01:15:27.680
Sie sehen damit, dass ich hier Möglichkeiten habe verschiedene Art und

01:15:27.680 --> 01:15:36.360
Weise Teile von XML Dokumenten zu identifizieren und damit dann zu

01:15:36.360 --> 01:15:36.900
verwenden.

01:15:37.740 --> 01:15:42.460
Zum Beispiel in den XSL Definitionen, wenn ich angeben möchte, dass

01:15:42.460 --> 01:15:45.960
irgendwelche Teile eines Dokuments in einer bestimmten Art und Weise

01:15:45.960 --> 01:15:47.240
dargestellt werden sollen.

01:15:48.240 --> 01:15:52.980
Hier nochmal weitere Beispiele Address Name.

01:15:53.740 --> 01:15:58.380
Da werden Address Elementknoten ausgewählt mit einem direkten Name.

01:15:59.420 --> 01:16:04.620
Sub Elementknoten, also darunter liegenden Knoten, muss direkt

01:16:04.620 --> 01:16:05.480
darunter sein.

01:16:05.480 --> 01:16:08.980
Hier nur solche, bei denen John Doe steht.

01:16:09.800 --> 01:16:16.820
In diesem Fall wieder Address Elementknoten, die direkt ein Type

01:16:16.820 --> 01:16:18.340
Attribut mit Wert E-Mail haben.

01:16:21.020 --> 01:16:23.720
Und das war alles zu XPath.

01:16:24.600 --> 01:16:26.940
Wir kommen dann zu XPointer.

01:16:31.180 --> 01:16:36.060
XPointer erlaubt ähnliche Dinge wie das, was Sie bei HTML kennen.

01:16:36.640 --> 01:16:43.040
Da kann ich Positionen in einem Dokument definieren und kann dann

01:16:43.040 --> 01:16:43.940
darauf zugreifen.

01:16:45.440 --> 01:16:46.640
Ähnliche Dinge gibt es hier.

01:16:46.740 --> 01:16:50.460
Es wird auf die Stelle gezeigt im Dokument, auf die so ein Pointer

01:16:50.460 --> 01:16:50.940
verweist.

01:16:53.660 --> 01:16:59.560
Und der Link, also dieser Pointer, das Ziel, können in irgendeinem

01:16:59.560 --> 01:17:00.880
anderen Dokument auch stehen.

01:17:01.980 --> 01:17:06.340
Also zum Beispiel kann es sein, dass ich hier ein Inhaltsverzeichnis

01:17:06.340 --> 01:17:10.320
habe und das über so eine Reihe von Pointern definiere.

01:17:10.440 --> 01:17:12.920
Und wenn ich dann auf diesen Pointer gehe, komme ich automatisch zu

01:17:12.920 --> 01:17:15.600
dem Ort in dem Dokument.

01:17:15.600 --> 01:17:18.680
Und sowas ähnliches gibt es ja auch bei HTML.

01:17:22.540 --> 01:17:27.560
Und hier kommt jetzt noch eine Folie oder ein paar Folien auf

01:17:27.560 --> 01:17:32.880
Englisch, die ich nicht mehr geschafft habe, jetzt auf Deutsch zu

01:17:32.880 --> 01:17:33.200
verführen.

01:17:33.300 --> 01:17:34.320
Das stört Sie aber glaube ich nicht.

01:17:38.420 --> 01:17:46.680
Diese Pointer-Sprache von XML erlaubt halt genau das, was ich gesagt

01:17:46.680 --> 01:17:46.940
habe.

01:17:47.020 --> 01:17:52.720
Hier wird angegeben, wie ich auf bestimmte Bereiche zugreifen kann.

01:17:53.500 --> 01:17:59.720
Hier sehen Sie eben so einen Uniform Resource Identifier.

01:18:00.400 --> 01:18:04.040
Und am Ende wird dieses Hash-Symbol und dann mit der Marke, wo hier,

01:18:04.900 --> 01:18:08.660
genau angegeben, wo man halt, also welche Stelle in den Dokument man

01:18:08.660 --> 01:18:10.180
gehen möchte.

01:18:14.060 --> 01:18:19.910
Gehen wir hier mal kurz genauer durch.

01:18:21.110 --> 01:18:22.990
Das kann ich ganz zeigen.

01:18:29.140 --> 01:18:30.680
Na, das war eins zu weit.

01:18:31.620 --> 01:18:40.320
Also, das hier ist halt eine solche Adresse.

01:18:40.320 --> 01:18:46.320
Und hier haben wir die Adresse angegeben.

01:18:47.580 --> 01:18:52.480
Jetzt muss ich gestehen, dass ich an dieser Stelle am besten aufhöre,

01:18:52.640 --> 01:18:58.740
weil ich hier mit der Vorbereitung etwas Schwierigkeiten hatte und

01:18:58.740 --> 01:19:02.620
diese Folien zwar eingefügt habe, aber ich halte es nicht für

01:19:02.620 --> 01:19:04.780
sinnvoll, die Ihnen im Augenblick zu erzählen, die muss ich noch

01:19:04.780 --> 01:19:05.380
überarbeiten.

01:19:05.380 --> 01:19:06.740
Ich höre für heute auf.

01:19:06.820 --> 01:19:09.320
Wir sind bei 5 vor 1 angelangt.

01:19:09.460 --> 01:19:13.700
Es sollten noch 3 Folien folgen, das machen wir nächstes Mal und dann

01:19:13.700 --> 01:19:16.140
erzähle ich Ihnen etwas genaueres zu X-Pointer.

01:19:16.680 --> 01:19:18.300
Vielen Dank für die Aufmerksamkeit für heute.

