0251 / 590 837 15
info@a-coding-project.de

XML-Dateien schreiben

XML wird auch nicht anders geschrieben (man sagt notiert) als gewöhnliches HTML. Das heißt, die Datei ist eine reine Text-Datei, die Sie z.B. mit einem Text-Editor oder einem speziellen XML-Editor schreiben können. Die Dateiendung ist im Grunde frei gestellt, allgemein wird allerdings .xml verwendet.

Die XML-Deklaration

Zu jeder XML-Datei gehört, am Anfang der Datei, eine entsprechende Auszeichnung, dass es sich dabei um XML handelt: die XML-Deklaration. Sie besteht aus lediglich einer Zeile, die den folgenden Aufbau hat:

<?xml version="[Versionsnummer]" [weitere Attribute]?>

Dieser Aufruf besagt, dass es sich um eine XML-Datei handelt. Des Weiteren wird ausgesagt, dass der enthaltene Markup (~Text) der Definition von einer bestimmten Version ([Versionsnummer]) von XML entspricht. Derzeit ist die Version 1.0 aktuell. Außerdem können [weitere Attribute] enthalten sein, die das Dokument näher bezeichnen - diese sind allerdings nicht Pflicht. Diese sind:

  • encoding - Beschreibt den verwendeten Zeichensatz.
  • standalone - Beschreibt, ob externe DTD's verwendet werden (yes) oder nicht (no).

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Tags, Elemente und Attribute

Tags, Elemente und Attribute sind - neben dem Inhalt/Text - die Bestandteile einer jeder XML-Datei. Ein Element ist die Definition eines bestimmten Dinges. Bekannte Elemente aus HTML sind z.B. H1 oder P. Ein Tag wiederum ist das geschriebene Element. Jeder Tag wird durch zwei spitze Klammern (> und <) umschlossen. Darin enthalten sind der Elementname sowie etwaige Attribute. Beispiel:

<font color="red"> Dies ist Text. </font>

Zu jedem Tag kann/muss außerdem ein schließender Tag hinzugefügt werden. Diese wird durch einen Schrägstrich (/) vor dem Elementnamen verdeutlicht und besagt, dass hiermit der Geltungsbereich des Elements zu Ende ist.

Attribute ihrerseits sind Eigenschaften eines Tags/Elementes. Jedes Attribut besteht aus dem Namen, einem Ist-Gleich-Zeichen sowie einem - in Anführungszeichen (") geschriebenen - Wert (siehe Beispiel).

Da die Namen von Elementen und Attributen in XML relativ frei festgelet werden können, gelten auch hier einige Einschränkungen. Alle Namen in XML dürfen grundsätzlich nur aus Buchstaben, Zahlen, dem Punkt, Unterstrichen und Bindestrichen bestehen. Des Weiteren müssen die Namen mit einem Buchstaben oder einem Unterstrich beginnen und dürfen keine Leerzeichen enthalten.

Leere Tags und Attribute

In HTML wurde mitunter etwas schlampig mit leeren Tags (also Tags ohne Inhalt, wie etwa img oder br) und Attributen umgegangen. Die Browser waren hier zumeist so gnädig die Fehler einfach zu überlesen und dennoch alles korrekt darzustellen. Aufgrund der strikteren Definition von XML geht das nun nicht mehr. Alle leeren Tags müssen nun entweder einen schließenden Tag erhalten oder besser noch als leerer Tag gekennzeichnet werden. Diese Kennzeichnung erfolgt durch einen Schrägstrich (/) am Ende des Tags. Beispiel:

<!-- falsch: -->
<meinElement meinAttribut=Wert>

<!-- richtig: -->
<meinElement meinAttribut="Wert" />

Auch bei Attributen ist XML etwas strikter: Hier müssen die Klammern unbedingt gesetzt werden (siehe Beispiel).

CDATA-Abschnitte

CDATA-Abschnitte sind vom Pinzip her ein Tag, der beliebige Zeichen enthalten kann. CDATA steht für Character Data (Zeichen Daten) und wird durch <![CDATA[ eingeleitet und ]]> beendet. Der gesamte Text dazwischen wird so dargestellt, wie er notiert wird. Beispiel:

<![CDATA[
Hier kann problemlos mit
    <Elementen>
gearbeitet werden.
]]>

Dokumenttyp-Deklarationen

Wie schon gesagt, beschriebt XML die eine Sprache definiert werden kann. Allgemein werden dazu DTD's (Document Type Definition) verwendet. Dies sind Beschreibungen der Elemente, Attribute und ihrem Verhalten zueinander. Um definierte Elemente und Attribute innerhalb eines XML-Dokumentes verwenden zu können muss innerhalb des Dokumentes definiert werden welche Definition (DTD) verwendet werden soll. Dies kann entweder durch eine interneDTDoder eine externeDTDgeschehen. Wie DTD's letztlich geschrieben werden, wird im späteren Verlauf der Dokumentation noch erläutert.

Interne DTD's werden direkt in das Dokument in einen bestimmten Bereich hinein geschrieben. Dieser Bereich wird durch <!DOCTYPE Name [ und ]> begrenzt, wobei Name der Name des root-Elementes (Haupt-Element; in HTML ist das z.B. das html-Element) ist. Innerhalb dieses Bereiches kann die gesamte Definition notiert werden. Beispiel:

<?xml version="1.0"?>
<!DOCTYPE Adressbuch [
 <!ELEMENT Adressbuch (Kunde*)>
 <!ELEMENT Kunde (Adresse+)>
 <!ATTLIST Kunde Name CDATA #REQUIRED>
 <!ELEMENT Adresse (Straße, PLZ, Ort)>
 <!ELEMENT Straße (#PCDATA)>
 <!ELEMENT PLZ (#PCDATA)>
 <!ELEMENT Ort (#PCDATA)>
]>
...

(Die im Beispiel verwendeteDTDentspricht der Definition für eines der vorangegangenen Beispiele.)

Neben internen DTD's können diese auch ausgelagert werden und in externen Dateien (.dtd) von mehreren Dokumenten verwendet werden. Um eine externeDTDinnerhalb eines Dokumentes zu verwenden wird die folgende Schreibweise notiert:

<!DOCTYPE Name SYSTEM "DTD-URL">
<!DOCTYPE Name PUBLIC "DTD-Name" "DTD-URL">

... wobei Name wiederum für den Namen des root-Elementes steht. Der Typ einerDTDkann entweder SYTEM oder PUBLIC sein, wobei SYSTEM für DTD's steht, die durch absolute oder relative Pfade (DTD-URL) auffindbar sind (sich also auf einem System befinden). DTD's die als PUBLIC gekennzeichnet sind sind öffentliche DTD's (wie z.B. die von HTML). Hierbei muss neben derURL(DTD-URL) auch die Bezeichnung (DTD-Name) definiert werden. Diese besteht aus einem String (~ Text) der Form ...

Typ//Besitzer//Beschreibung//Sprache

... wobei der Typ aus einem Plus- (wenn der Besitzer bei der ISO 9070 registriert ist) oder Minuszeichen (alle anderen Besitzer) besteht. Anstelle des Besitzers und der Beschreibung kann ein frei gewählter Name sowie eine Beschreibung derDTDeingetragen werden. Letztlich beschreibt der Wert Sprache die in derDTDverwendete Sprache (laut ISO 639). Beispiel:

-//MeineFirma//Adressbuch//de

Grundsätzlich ist es möglich verschiedene DTD's innerhalb eines Dokumnetes zu verwenden. Dazu können mehrere DOCTYPE's verwendet werden Beispiel:

<!DOCTYPE ABC SYSTEM "abc.dtd" [
 <!ELEMENT Text #PCDATA>
]>

Namespaces

Namespaces, oder zu deutsch Namensräume, benutzt man besonders dazu um verschiedene DTD's verwenden zu können, die gleiche Elementnamen oder Attributnamen verwenden. Um Elemente oder Attribute einer solchen DTD's verwenden zu können, bindet man eben diese an einen Namespace. Die Bindung kann entweder lokal oder über Standard-Namespaces geschehen. Lokal bedeutet, dass innerhalb eines XML-Dokumentes ein Namensraum erstellt wird. Alle Elemente und Attribute, die aus diesem Namensraum stammen, müssen dann einen Prefix der den Namensraum beschreibt, sowie einen Doppelpunkt vor den Namen erhalten (Prefix:Name). Die Definition eines lokalen Namensraumes erfolgt über das folgende Schema:

<Elementname xmlns:Namensraum="URI">

Elemente, die nun den Namensraum verwenden sollen müssen als Prefix ebendiesen Namen erhalten. DieURIbezeichnet eine eindeutige Quelle des Namensraumes:

<Elementname xmlns:html="http://www.w3.org/TR/REC-html40">
 <html:body>
  <html:p> Dies ist HTML-Text. </html:p>
 </html:body>
</Elementname>

Im Beispiel wurde der Namensraum html definiert. Elemente und Attribute innerhalb des Elementes, in dem der Namensraum definiert wurde, sowie dieses selbst, dürfen nun den Namensraum verwenden. Im Beisiel dürfen sie also Elemente und Attribute aus der HTML-DTD benutzen.

Bei Attributen ist das ähnlich. Allerdings braucht bei diesen der Namensraum als Prefix nur dann mitgeschrieben werden, wenn das Element, in dem das Attribut enthalten ist, nicht aus dem gleichen Namensraum stammt. Beispiel:

<Elementname xmlns:html="http://www.w3.org/TR/REC-html40">
 <html:body>
  <html:p align="right"> Dies ist HTML-Text. </html:p>
  <MeinElement html:align="center" />
 </html:body>
</Elementname>

Innerhalb eines XML-Dokumentes können problemlos verschiedene Namespaces verwendet werden.

Bei Standard-Namespaces brauchen keine Prefixe notiert werden (deshalb auch Standard). Sie besagen, dass alle Elemente ohne Prefix eben aus diesem Namensraum stammen und eben auch dieseDTDverwenden. Standard-Namespaces müssen im Root-Element (auch Haupt- oder Elternelement genannt) deklariert werden. Dies geschieht über das Attribut xmlns dem auch hierbei wiederum eineURIzugewiesen werden muss. Beispiel:

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/TR/REC-html40">
 ...
</html>

Bitte beachten Sie bei der Vergabe von Namensräumen, dass die Prefixe xml und xmlns bereits reserviert sind und daher nicht verwendet werden dürfen.

Kommentare

Kommentare, also Text der nicht zum eigentlichen Markup gehört, werden ebenso wie in HTML geschrieben. Sie werden durch <!-- eingeleitet und durch --> beendet. Alles was dazwischen steht gilt als Kommentar und wird von einem ausführenden Programm nicht interpretiert (bzw. nur als Kommentar interpretiert). Beispiel:

<!-- dieser Tag <abc> wird auch als Kommentar angesehen -->

Außerdem sollten Sie beachten, dass vor der XML-Deklaration keine Kommentare stehen dürfen. Sie ist das Erste was im Dokument steht. Auch dürfen Kommentare nicht in Tags oder Attributen enthalten sein.

Entity's

Entity's, Entity-Referenzen oder zu deutsch "Entitäten" sind Auszeichnungen die Sonderzeichen darstellen. Um Missverständnisse zwischen Text und Tags zu vermeiden, sollten innerhalb von Text-Abschnitte immer nur Entity's verwendet werden. Definierte Entity's sind z.B. &amp;, &lt; oder &gt; und stehen für Sonderzeichen (&, > und <). XML definiert zudem noch 2 weitere (&apos - Apostroph und &quot; - Anführungszeichen) und bietet darüber hinaus die Möglichkeit eigene Entity's zu definieren.

Eine Entity besteht dabei immer aus einem Kaufmanns-Und (&), dem Namen oder einer Referenz auf den Unicode-Zeichensatz sowie einem abschließenden Semikolon (;). Bei Referenzen auf den Unicode-Zeichensatz wird anstelle des Namens (z.B. amp) eine Raute (#) mit der anschließenden Zahl des Zeichens im Zeichensatz definiert. Einige Sonderzeichen lassen sich somit auf drei Arten darstellen:

Als Zeichen (&),
numerisch (&) oder mit einem allgemeinen
Entity (&amp;).

Wohlgeformtheit und Gültigkeit

Nicht zuletzt wird XML als schwerere Sprache als HTML angesehen (vom Syntax her) da hierbei auf vielmehr zu achten ist. Damit eine XML-Datei als gültig anerkannt wird müssen folgende Dinge gelten (einige wurden bereits beschrieben):

  • Leere Tags müssen mit /> enden.
  • Alle nicht leeren Tags müssen ein Anfangs- und End-Tag besitzen.
  • Alle Attributwerte müssen in doppelten Anführungszeichen (") stehen.
  • Am Anfang jeder XML-Datei muss eine XML-Deklaration stehen.
  • Jedes Dokument muss ein Element enthalten, dass alle anderen Elemente einschließt (wie z.B. in HTML das html-Element).
  • Elemente dürfen sich nicht überlappen (statt <a><b> ... </a></b> immer <a><b> ... </b></a>)
  • Die Namen von Anfangs- und End-Tag müssen untereinander und mit derDTDübereinstimmen (Groß- und Kleinschreibung beachten).

XML-Software

Derzeit existiert schon eine Menge an Software zum Erstellen und Anzeigen von XML-Dokumenten. Die Standard-Browser (Microsoft Internet Explorer, Netscape Navigator und Opera) unterstützen größetenteils recht gut das Anzeigen der Struktur einer XML-Datei (Internet Explorer ab 5.0) oder sogar das relativ korrekte Darstellen des Inhalts (Netscape Navigator ab 6.0) (siehe Beispiele weiter vorn). Spezielle Editoren für XML-Dokumente finden sich schon zu Haufe im Internet. Zu nennen wären da z.B. XMetal oder Microsoft XML Notepad.

  • http://msdn.microsoft.com/xml/notepad/intro.asp - Microsoft XML Notepad
  • http://www.xmetal.com/ - XMetal
  • http://www.iol.ie/~pxe - Peter's XML Editor