Werbung einblenden Werbung ausblenden


Home / Tutorials / xml, xsl, xpath Handbuch / XML Grundlagen


Was ist XML?
Das erste XML Dokument
Entities
CDATA Abschnitte

Was ist XML?

XML ist eine Markierungssprache, deren einziger Sinn und Zweck darin besteht, Daten strukturiert darzustellen. Damit ist schon klar, dass XML mit HTML nur Äußerlichkeiten gemein hat. Bei HTML geht es primär um die optische Darstellung der Daten. Mit XML alleine kann man nichts machen. XML ist aber ein Standard, der von sehr vielen Softwarepaketen und Programmiersprachen unterstützt wird, so dass er auf den unterschiedlichsten Medien, Browser, Handy, Drucker dargestellt werden kann. Mit XML ist es möglich durch eine Veränderung der Schnittstelle, also des Programms, das die Daten verarbeitet, die gleichen Daten auf unterschiedlichen Medien unterschiedlich darzustellen. Die zugrunde liegende Datenstruktur kann sogar erweitert werden, ohne dass dies einen Einfluss auf die Darstellung hätte. Da XML im Grunde lediglich eine Textdatei ist, kann sie auch problemlos kopiert, versendet, vervielfacht werden. Der eigentlich Inhalt der Datei ist hierbei leicht zu erfassen, da in der Regel, bei halbwegs sprechender Bezeichnung der einzelnen Komponenten, die Struktur des Dokumentes klar ist. Niemand wird ein Problem mit der Interpretation eines solchen Dokumentes haben.

<Adresse>
<Name>Andrés Ehmann</Name>
<Strasse>Hallandstrasse 2</Strasse>
<Ort>13189 Berlin</Ort>
<Telefon>030-47301390</Telefon>
</Adresse>


Was das bedeutet, ist jedem klar. Die Grundstruktur eines XML Dokumentes ist sozusagen selbsterklärend. Wundern kann man sich höchstens über die schliessenden Tags, aber ansonsten ist es das gleiche wie das.


Adresse
Name: Andrés Ehmann
Strasse: Hallandstrasse 2
Ort:13189 Berlin
Telefon:030-47301390

Entscheidend für XML ist, dass sich die hierarchische Struktur von Daten in beliebiger und intuitiv fassbarer Weise darstellen lassen. Ohne dass etwas dazu gesagt wird, ist jedem klar, was mit dem unten Stehenden gemeint ist.

<buecher>
<Sachbuecher>
<Autor>Prof.Dr. Wirrwarr</Autor>
<Titel>Kafka und Felice Bauer</Titel>
<Erscheinungsjahr>1987</Erscheinungsjahr>
</Sachbuecher>
<Romane>
<Autor>Hans Donnerknall</Autor>
<Titel>Ewig ruft der Berg</Titel>
<Erscheinungsjahr>1956</Erscheinungsjahr>
</Romane>
</buecher>

Es ist klar, dass wir die Struktur nach diesem Schema beliebig erweitern könnten, also die Sachbücher nochmal aufsplitten: Gesundheit, Sport, Philosophie etc. die Romane nochmal in spanische, französische, italienische Romane etc. etc. Wir könnten auch neue Gebiete hinzufügen, Lyrik, Lexika etc. etc. XML ist also einfacher als HTML, welches es ja in der Zwischenzeit auf eine stattliche Anzahl von Tags gebracht hat, deren Bedeutung man kennen muss, um HTML Dokumente zu erstellen. Bei XML muss man gar keine Tags kennen, man kann sie nämlich nach Belieben selber definieren. XML ist also sehr einfach. Um aber tatsächlich etwas mit XML-Dokumenten machen zu können, muss man sie in andere Formate, etwa HTML oder WAP transformieren können und hierfür, wie auch die für die Modifizierung von XML Dokumenten on the fly, bedarf es dann einiges an Erfahrung. Das bis jetzt Dargestellte, wird viele Leute nicht überzeugen. Sie werden sich auf den Standpunkt stellen, dass man all das auch mit einem trivialen Flatfile realisieren kann. Das ist teilweise richtig und teilweise falsch. Erstmal kann man diesem Einwand eine triviale Antwort entgegenhalten. Flatfiles sind in der Datenmenge, die man verarbeiten kann, begrenzt. Für XML gibt es Bibliotheken, wie Expat, wir kommen darauf noch zurück, die ein Auslesen auch sehr grosser Datenmengen ermöglichen. Weiter ist es mit einem Flatfile schwierig, die hierarchische Beziehung der Daten abzubilden. Flatfiles lassen sich weiter nur sehr schwerfällig modifizieren. Die Leistungsfähigkeit von XML wird aber erst deutlich, wenn man sich mit den Tools beschäftigt, die XML verarbeiten.

Das erste XML Dokument

Die Beispiele oben waren eigentlich schon fast XML Dokumente. Es fehlt eigentlich nur noch eine Zeile, die angibt, welche Version von XML verwendet wird und welcher Zeichensatz. Es fehlt also lediglich eine Zeile, die diese Angaben enthält zu Beginn des Dokumentes. Ein vollständiges XML Dokument sehen wir hier.

<?xml version="1.0" encoding="ISO-8859-1"?>
<buecher>
<Sachbuecher>
<Autor Nationalität="Deutsch">Prof.Dr. Wirrwärr</Autor>
<Titel>Kafka und Felice Bauer</Titel>
<Erscheinungsjahr>1987</Erscheinungsjahr>
</Sachbuecher>
<Romane>
<Autor Nationalität="Schweiz">Hans Donnerknall</Autor>
<Titel>Ewig ruft der Berg</Titel>
<Erscheinungsjahr>1956</Erscheinungsjahr>
</Romane>
</buecher>

Wenn es sich um ein wohlgeformtes, wir kommen darauf gleich zurück, Dokument handelt, dann kann man sich das Dokument mit dem Internet Explorer anschauen. Man muss es also abspeichern unter irgendein_name.xml im Ordner irgendein_ordner und dann aufrufen. Man sieht dann sowas in der Art.

Wie man sieht, wird die hierarchische Struktur des Dokumentes dargestellt. Clickt man auf die Bindestriche, werden die Ebenen darunter weggeblendet. Schreibt man auf Deutsch, ist die Angabe des richtigen Zeichensatzes, "ISO-8859-1" sehr sinnvoll. Ohne diese Angabe würde das Dokument oben nicht dargestellt werden, weil das ä in Wirrwär ein unbekanntes Zeichen wäre under der XML Parser abbrechen würde. Dieser XML Quelltext entspricht bestimmten Minimalanforderungen, die in wohlgeformt sein lassen. Wenn diese Wohlgeformtheit nicht vorliegt, wird das Dokument nicht dargestellt. Damit ein Dokument wohlgeformt ist, müssen folgende Kriterien erfüllt sein.

1) Am Anfang muss eine Zeile stehen, die die XML Version angibt. Die Angabe eines Zeichensatzes ist optional
2) Das gesamte XML Dokument muss von einem Wurzelement (ähnlich dem HTML Tag in HTML) umklammert sein
3) Jeder öffnende Tag braucht einen schliessenden Tag ( HTML Tags wie <br> oder <p> oder <hr> sind nicht möglich
4) Die Elemente (Tags) müssen richtig verschachtelt sein. Bevor der äußere Tag geschlossen wird, muss der innere Tag geschlossen worden sein.
5) Elemente (Tags) sind case sensitiv. <Titel> öffnend und </titel> schliessend ist falsch
6) Attribute müssen in Anführungstrichen stehen
7) Elemente (Tags) dürfen nicht mit einer Zahl beginnen: 1Autor ist falsch
8) Elemente (Tags) dürfen keine Leerzeichen enthalten Au tor ist falsch (Unterstrichen, also _, sind erlaubt)
9) Elemente (Tags) müssen aus Zahlen oder Buchstaben bestehen. (Umlaute und scharf s sind möglich ).

Ein Element besteht aus einem öffnenden und dem dazugehörigen schliessenden Tag. Das Element kann leer sein, andere Elemente oder Text beinhalten. Auch eine Misch aus Elementen und Text ist möglich. Wie deutlich zu sehen, sind die Ansprüche an Wohlgeformtheit nicht besonders hoch. Gültige XML Dokumente müssen allerdings höheren Ansprüchen genügen. Sie müssen mit einer selbst definierten DTD (Document Type Definition) oder einem XML Schema entsprechen. Wir kommen darauf noch zurück. Kommentare in XML sind syntaktisch identisch mit Kommentaren in HTML. Das obige XML Dokument mit einem Kommentar sieht so aus.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Das ist ein Kommentar. Er gleicht syntaktisch einem HTML Kommentar -->
<buecher>
<Sachbuecher>
<Autor Nationalität="Deutsch">Prof.Dr. Wirrwärr </Autor>
<Titel>Kafka und Felice Bauer</Titel>
<Erscheinungsjahr>1987</Erscheinungsjahr>
</Sachbuecher>
<Romane>
<Autor Nationalität="Schweiz">Hans Donnerknall</Autor>
<Titel>Ewig ruft der Berg</Titel>
<Erscheinungsjahr>1956</Erscheinungsjahr>
</Romane>
</buecher>

Dass der Explorer, im Gegensatz zu Netscape 6.0, diesen Kommentar zeigt, ist erstmal unerheblich. Bei einer Auswertung des XML Dokuments mit XSL oder DOMXML würde er nicht berücksichtigt. Will man XML Dokumente auswerten, ist es von zentraler Bedeutung zu verstehen, dass ein XML Dokument eine Baumstruktur hat. Man muss das sehen, weil XPATH, ein Teil von XSL, das Dokument als Baum sieht. Er sieht die Äste, die auf der gleichen Hierarchieebene liegen, sieht, die verschiedenen Hierarchiestufen, die Attribute etc. So kann er punktuell auf bestimmte Elemente zugreifen. Als Baumstruktur dargestellt, sähe das XML Dokument so aus.

Es ist wichtig, das zu sehen, weil ein XML Dokument mit XSL auslesen, vor allem bedeutet, durch diesen Baum zu hangeln.

Entities

Es ist ja denkbar, dass in einem XML Dokument immer wieder gleiche Textblöcke eingebaut werden sollen. In einem XML Dokument, dass z.B. den Buchbestand einer Bücherei hält, immer wieder der Satz "Beststseller: Dieses Buch ist unter den top five der Spiegel Liste" oder sonst irgendwas steht. Dann könnte man diesen Satz einmal speichern und immer wieder aufrufen. Man könnte jetzt vermuten, dass dies durch eine Variable geschieht, der ein Wert zugewiesen wird und die dann immer wieder eingesetzt wird. So kennt man das ja. Es funktionniert aber nur so ähnlich. Tatsächlich müssen solche Verweise auf z.B. Textblöcke (Details werden im Kapitel DTD behandelt) in der Document Type Definition deklariert werden. Das sieht dann so aus.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE buecher [
<!ENTITY test "nur so zum Spass">
]>
<buecher>
<!-- Das ist ein Kommentar. Er gleicht syntaktisch einem HTML Kommentar -->
<Sachbuecher>
<Autor Nationalität="Deutsch"> Prof.Dr. Wirrwärr </Autor>
<Titel>Kafka und Felice Bauer</Titel>
<Erscheinungsjahr>1987</Erscheinungsjahr>
</Sachbuecher>
<Romane>
<Autor Nationalität="Schweiz">Hans Donnerknall</Autor>
<Titel>Ewig ruft der Berg</Titel>
<Anmerkung>&test;</Anmerkung>
<Erscheinungsjahr>1956</Erscheinungsjahr>
</Romane>
</buecher>

Wir haben zu Beginn eine Document Type Definition mit einer gewöhnungsbedürftigen Syntax.

<!DOCTYPE buecher [ die eigentliche Definition ]>

Der Name der DTD in unserem Falle buecher, muss mit dem Namen des Wurzelelementes übereinstimmen. Nebenbemerkung: Dem Explorer ist das ziemlich egal, er prüft auch nicht die Gültigkeit der DTD. Immerhin stellt er aber unsere Entity noch dar. Unsere DTD hat nur eine einzige Deklaration, nämlich die Deklaration der Entity.

<!ENTITY test "nur so zum Spass">

Diese Entity können wir dann aufrufen indem wir vor den Entity Namen, in unserem Falle Test, ein kaufmännisches & Zeichen setzen.

&test;

Das ganze sieht dann so aus.

CDATA Abschnitte

CDATA Abschnitte kann man brauchen, wenn man z.B. nicht will, dass der XML Parser den Inhalt interpretiert. Das heisst, er soll ihn genauso lesen, wie er dasteht. Man kann das auch brauchen, wenn man Zeichen verwendet, die dem jeweiligen ISO Zeichensatz nicht entsprechen, was den XML Parser ja normalerweise zum Absturz bringt. Innerhalb von CDATA würde er diese problemlos anzeigen. Ein Beispiel mit CDATA.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE buecher [
<!ENTITY test "nur so zum Spass">
]>
<buecher>
<!-- Das ist ein Kommentar. Er gleicht syntaktisch einem HTML Kommentar -->
<Sachbuecher>
<Autor Nationalität="Deutsch"> Prof.Dr. Wirrwärr </Autor>
<Titel>Kafka und Felice Bauer</Titel>
<Erscheinungsjahr>1987</Erscheinungsjahr>
<Bemerkung><![CDATA[<komisch>Hat er den nix zu Kafka zu sagen</komisch>]]></Bemerkung>
</Sachbuecher>
<Romane>
<Autor Nationalität="Schweiz">Hans Donnerknall</Autor>
<Titel>Ewig ruft der Berg</Titel>
<Anmerkung>&test;</Anmerkung>
<Erscheinungsjahr>1956</Erscheinungsjahr>
</Romane>
</buecher>

Normalerweise würde nur erscheinen "Hat er den nix zu Kafka zu sagen". Da es aber innerhalb von CDATA steht, werden die Tags nicht interpretiert und so gezeigt wie sie dastehen. Das sieht dann so aus.

zum mysql Inhaltsverzeichnis