www.stefanheymann.de

Stefan Heymann

Home | Fotografie · Hasselblad · Galerie | Ruler · XML · HomePump · HomeGallery

Einführung in XML

XML ist – wie die bekanntere Sprache HTML – ein Abkömmling von SGML. XML-Dokumente sehen daher ähnlich aus wie HTML: Sie enthalten in spitze Klammern eingefasste "Tags" (<br>), Entity-Referenzen (&amp;) und andere von HTML her bekannte Auszeichnungs-Elemente.


Inhalt


Funktionsweise

XML ist die Spezifikation einer Meta-Sprache. XML selbst stellt keine Sprache zur Definition von Inhalten dar, sondern lediglich die Grundlage für die Definition einer solchen Sprache. Daher ist bei XML auch kein einziger Element-Typ ("Tag") von der Bedeutung her definiert. XML definiert lediglich den Aufbau derartiger Dokumente.

  +--------------------------+
  | XML-Spezifikation        |      W3C XML 1.0
  +--------------------------+
             |
             |
  +--------------------------+
  | Applikations-spezifische |      Definition von Element-Typen,
  | Definitionen             |      Attributen, Dokument-Struktur
  +--------------------------+
             |
             |
  +--------------------------+
  | Dokument                 |      Datei(en) [Entities], die das
  +--------------------------+      Dokument bilden
             |
             |
  +--------------------------+
  | XML-Parser               |      Der XML-Parser zerlegt das Dokument
  +--------------------------+      in seine Bestandteile
             |
             |
  +--------------------------+      Die Applikation interpretiert die vom
  | Applikation              |      Parser gemeldeten Teile und behandelt
  +--------------------------+      sie entsprechend ihrer Aufgabe

Physikalische Struktur: XML-Files (Entities)

Logische Struktur: Vorgegeben durch Deklarationen, Elemente, Kommentare, Zeichen-Referenzen, Prozessor-Instruktionen

XML ist ein Datenformat zur Abbildung beliebig strukturierter Informationen.

XML-Bausteine

Zeichen

XML-Dokumente sind aus Unicode-Zeichen aufgebaut. Jeder Parser muss die Unicode-Repräsentationen UTF-8 und UTF-16 verarbeiten können.

Prolog, Text-Deklaration

Mit dem Prolog sollte jedes XML-Dokument beginnen:

        <?xml version=“1.0“ encoding=“iso-8859-1“ standalone=“yes“ ?>

Die "Attribute" encoding und standalone sind optional, die Versionsnummer muss angegeben werden. Der minimale Prolog sieht also so aus:

        <?xml version="1.0" ?>

Die Default-Zeichencodierung ist UTF-8. Es empfiehlt sich also, die XML-Versionsnummer und wenigstens das Encoding anzugeben:

        <?xml version=“1.0“ encoding=“UTF-8“ ?>

Text-Deklaration: Dateien, die Externe Entities oder Externe DTD-Deklarationen enthalten, sollen mit einer sog. "Text-Deklaration" beginnen. Diese unterscheidet sich vom XML-Prolog lediglich dadurch, dass die Standalone-Anweisung fehlt.

Elemente

Elemente bestehen aus Inhalt (Content), der durch Tags umrahmt wird. Elemente müssen immer korrekt (=vollständig ineinander) geschachtelt sein. Tags beginnen mit einem "kleiner als"-Zeichen < und enden mit einem "größer als"-Zeichen >.

Alle Bezeichner (Element-Namen, Attribut-Namen) bei XML sind case-sensitiv! (Begründung: die Namen dürfen internationale Zeichen enthalten, zu denen es oftmals keine einheitlichen Groß-/Kleinbuchstaben gibt.)

Allgemeine Form eines Elements:

        <TAG>Content</TAG>

Start Tag

Ein Element beginnt mit einem Start-Tag. (Der Begriff "Tag" stammt von an Waren angebrachten Preis- und Informationsschildchen.) Dieser enthält den Namen des Element-Typs und ggf. Attribute (=weitere Merkmale)

Beispiele für Start-Tags:

        <P>
        <para disttop="8" distbottom="8">
        <emph>
        <BR>

Der Element-Typ-Name (also der Name des Tags) wird von der Applikation vorgegeben. XML selbst gibt keine Element-Namen vor.

Attribute bestehen aus einem Attribut-Namen, gefolgt von einem Gleichheitszeichen, gefolgt von einem Literal. Literale müssen immer mit 'einfachen' oder "doppelten" Anführungszeichen eingeschlossen sein. Die Anführung darf innerhalb des Literals nicht mehr vorkommen, auch nicht gedoppelt. Das Literal darf Entity-Referenzen enthalten (z. B. &amp; oder &quot;).

End Tag

Ein End-Tag schließt ein Element ab. Direkt nach dem "kleiner als"-Zeichen steht ein Schrägstrich. Es folgt der Name des abzuschließenden Elements. End-Tags enthalten keine Attribute.

        </P>
        </para>
        </emph>
        </BR>

Content

Der Inhalt zwischen einem Start-Tag und einem End-Tag kann sein:

Im Text dürfen sich Entity-Referenzen befinden.

Beispiele:

<Autor>
  <Vorname>Clifford</Vorname>
  <Nachname>Stoll</Nachname>
</Autor>
  <Absatz>Ende <zeitangabe>September 1986</zeitangabe>
  erschien der Hacker jeden zweiten Tag. Oft fuhr er sein
  Periskop aus, sah umher und verschwand nach ein paar Minuten
  wieder. Nicht genügend Zeit zur Verfolgung, und kaum einer
  Aufregung wert.</Absatz>

(Aus Clifford Stoll: Kuckucksei, Fischer Verlag)

CDATA-Sections

Textabschnitte, die viele Sonderzeichen (<, >, ", ') enthalten, können als CDATA-Section geschrieben werden:

        <![CDATA[Hier steht beliebiger Text]]>

Die Zeichenfolge ]]> schließt die CDATA-Section ab, sie darf also selbst nicht im Text vorkommen. Ansonsten vorkommende Markup-Zeichen werden hier ignoriert.

<HtmlBeispiel>
 <![CDATA[ <HTML><Head><Title>Dies ist der Titel</title>
                 </Head> <Body> </BODY> </HTML> ]]>
</HtmlBeispiel>

Empty-Element Tags

Elemente mit leerem Inhalt (z. B. Zeilenumbruch, Image, ...) können entweder als direkt aufeinanderfolgende Start- und End-Tags oder als spezieller Empty-Element-Tag (Schrägstrich vor schließender spitzer Klammer) geschrieben werden:

        <BR></BR>               <!-- Start+EndTag direkt hintereinander -->
        <BR/>                   <!-- Empty-Element-Tag                  -->
        <img src="./portrait.gif" alt="Fratze" />

Kommentare

Kommentare beginnen mit der Zeichenfolge <!-- und enden mit -->. Dazwischen dürfen sich beliebige Zeichen befinden, allerdings keine aufeinanderfolgenden Bindestriche.

        <!-- Dies ist ein Kommentar -->
        <!-- Kommentare dürfen selbstverständlich
             über mehrere Zeilen gehen -->

Prozessor-Anweisungen (Processing Instructions)

PIs werden direkt (ungeparst) an die Anwendung weiter gegeben. Sie haben kein spezifisches Format. So können Anwendungs-spezifische Funktionen realisiert werden.

Format:

        <?name ... ?>

Beispiele:

        <?ORDER formatEQ1 ?>
        <?CAT url="http://appserver/process.xml" key="1287182" ?>

Entity-Referenzen

Hiermit können im Text-Teil von Elementen und im Inhalt von Attributen ganze Entities (Text-Teile) eingesetzt werden. Der Aufruf geschieht durch &name; wobei "name" der eindeutige Name der Entity ist (case-sensitiv!).

Es gibt lediglich diese 5 vordefinierten Entities:

        &lt;    <
        &gt;    >
        &amp;   &
        &quot;  "
        &apos;  '

Eigene Entities können nur innerhalb einer Document Type Declaration (DTD) deklariert werden. Dort können auch "externe" Entities deklariert werden; ein ganzes File wird also zu einer Entity. Dadurch kann ein "Include" realisiert werden (!).

Jedes XML-Dokument ist ein Unicode-Dokument, es können also beliebige Unicode-Zeichen verwendet werden. (Unicode ist der Standard, der für praktisch alle Schriftzeichen der Welt einen Code definiert.) Einzelne Unicode-Zeichen können durch &#n; bzw. &#xh; referenziert werden (n=Unicode-Zeichencode dezimal, h=Unicode-Zeichencode hexadezimal)

Document Type Definitions

Über Document Type Definitions (DTD) können die erlaubten Elemente, Attribute, Entities definiert werden. Weitere Informationen befinden sich im Paper über DTDs.

XML-Beispiel

Dieses Beispiel stellt ein XML-Dokument dar, das eine Online-Bestellung für diverse Artikel enthält. Das Dokument enthält im Kopf-Teil Angaben zum Besteller und im Datenteil die bestellten Waren. Der Kunde bestellt offensichtlich eine komplette Rollfilm-Kamera.

Dieses Beispiel soll zeigen, dass XML nicht nur zur Darstellung von Online-Dokumenten, sondern auch zur strukturierten Datenübertragung hervorragend eingesetzt werden kann. Die Kommentare wurden zur besseren Lesbarkeit dieses Beispiels eingefügt; in einem "echten" Dokument werden sie eher fehlen.

<?xml version="1.0" encoding="iso-8859-1" ?>        <!-- XML-Prolog            -->

<ORDER>                                             <!-- Beginn der Bestellung -->

  <HEAD>                                            <!-- Beginn des Kopf-Teils -->
    <lastname>Heymann</lastname>                    <!-- Nachname des Kunden   -->
    <firstname>Stefan</firstname>                   <!-- Vorname               -->
    <address>Adenauerstraße 123</address>
    <city>00000 Neustadt</city>
    <phone>+49-7071-689639</phone>
  </HEAD>                                           <!-- Ende des Kopf-Teils           -->

  <DATA>                                            <!-- Beginn den Daten-Teils        -->

    <item>                                          <!-- Beginn einer Bestell-Position -->
      <orderno>10238</orderno>                      <!-- Bestell-Nr. bzw. Artikel-Nr.  -->
      <count>1</count>                              <!-- Bestellmenge                  -->
      <name>Hasselblad 501 CM body</name>           <!-- Artikelbezeichnung            -->
      <price>2355</price>                           <!-- Preis                         -->
    </item>                                         <!-- Ende der Bestell-Position     -->

    <item>                                          <!-- Nächste Bestell-Position      -->
      <orderno>20032</orderno>
      <count>1</count>
      <name>Carl Zeiss Planar Lens CB 2.8/80 mm</name>
      <price>1233</price>
    </item>

    <item>
      <orderno>30212</orderno>
      <count>1</count>
      <name>Roll Film 120 Magazine A12</name>
      <price>917</price>
    </item>

  </DATA>                                           <!-- Ende des Daten-Bereichs -->

</ORDER>                                            <!-- Ende der gesamten Bestellung -->

Stefan Heymann

Letzte Änderung: 2005-09-14