Einführung in XML

From NJH-Wiki

Jump to: navigation, search
Autor 
Volker Grabsch


Contents

Einführung

Grundbegriffe: XML, DTD, XSL

Die Extensible Markup Language (XML) ist ein universelles Dateiformat, um textbasierte, hierarchisch aufgebaute Daten zu erfassen. Es ist vom World Wide Web Consortium (W3C) standardisiert.

Wie die Hierarchie einer XML-Datei auszusehen hat, bestimmt die DTD. Es gibt für viele Standard-Probleme bereits vorgefertigte DTDs:

XHTML 
für Webseiten
WML 
für WAP-Seiten
SVG 
für Vektorgrafiken
RDF 
für Dokument-Metadaten
MathML 
für mathematische Formeln
SMIL 
für Multimedia-Präsentationen
XML
FO : für druckbare Dokumente (wird meist in PDF umgewandelt)
XSLT 
für XML-Stylesheets
DTD 
für XML-Format-Beschreibungen

Ja, wirklich: auch DTDs selbst sind wiederum XML-Dateien. Klingt komisch, ist aber so. :-)

Man kann sich auch sein eigenes XML-Format definieren. Das ist oftmals sinnvoll, falls einem die bestehenden Formate nicht genügen, oder falls diese einem zu kompliziert sind. Für eine solche selbst-definierte XML-Datei muss man nicht unbedingt eine DTD schreiben, aber es ist ratsam.

Mit XSLT beschreibt man einen sogenannten Stylesheet. Ein Stylesheet ist nichts weiter als eine Beschreibung, wie man aus einer XML-Datei eine andere Datei generiert. Dabei kann folgendes herauskommen:

  • XML
  • Text
  • HTML

Binärformate wie z.B. Word-Dokumente kann man also nicht mit XSLT erstellen.

XSLT erspart einem in vielen Fällen das Schreiben von Konvertierungs-Programmen. Da XSLT selbst wiederum ein XML-Format ist (siehe oben), kann ein Stylesheet selbst wiederum einen Stylesheet erzeugen. Dies ist aber nur begrenzt sinnvoll. ;-)

Beispiel: Anwendung von XML

Eine sinnvolle Anwendung wäre folgende: Man betrachte die Arbeit eines Kaninchenzüchters. Alle Tiere, die auf seinem Hof jemals das Licht der Welt erblickt haben, stehen in seinem Computer. Da läuft ein kleines nettes Verwaltungsprogramm, das ihm Stammbäume und ähnliches ausdrucken kann.

Ohne XML würde das Programm etwa so arbeiten:

           /-> Tierliste anzeigen
           |
           |-> Tierliste ausdrucken
           |
Programm --|-> Stammbaum anzeigen
           |
           |-> Stammbaum ausdrucken
           |
           |-> ...

Das Programm müsste sich um alles kümmern: Das Ansprechen des Druckers, Darstellen von Tabellen, und so weiter. Jede Erweiterung wäre eine neue programmtechnische Herausforderung. Und höchstwahrscheinlich wäre alles von der verwendeten Programmiersprache abhängig.

Will jemand anderes z.B. nur den Stammbaum-Ausdruck verschönern, müsste er dafür den Programmcode verstehen können. Das Erzeugen einer HTML- oder PDF-Version von einem Stammbaum wäre mit imenser Arbeit verbunden.

Mit XML könnte das Programm folgendes machen:

                                  /-> (Stylesheet anwenden) ---------------> HTML-Tierliste
                                  |
           /-> Tierliste in XML --|
           |                      |                                      /-> PDF-Tierliste
           |                      \-> (Stylesheet anwenden) --> XML:FO --|
           |                                                             \-> Tierliste ausdrucken
           |
Programm --|
           |
           |
           |                      /-> (Stylesheet anwenden) ---------------> HTML-Stammbaum
           |                      |
           \-> Stammbaum in XML --|
                                  |                                      /-> PDF-Stammbaum
                                  \-> (Stylesheet anwenden) --> XML:FO --|
                                                                         \-> Stammbaum ausdrucken

Hier ist das Programm nur für das Erzeugen von XML-Beschreibungen zuständig. Es müssen dann noch die 4 Stylesheets in XSLT geschrieben werden, und der Rest läuft automatisch. Denn das Umwandeln von XML:FO in PDF, sowie das Ausdrucken von XML:FO, sind Standardaufgaben. Um diese braucht sich der Programmierer im Idealfall gar nicht mehr kümmern.

Will man nun die HTML-Tierliste verschönern, braucht man nur noch den einen Stylesheet umzuschreiben. Der Web-Designer braucht also keinen Programmcode anzufassen, stattdessen bearbeitet er eine XSLT-Datei, die seinem gewohnten HTML-Dateiformat sehr ähnlich ist.

Will der Züchter seine Tierliste als schickes LaTeX-Dokument, ist nur ein neuer Stylesheet nötig. LaTeX ist ein reines Text-Format, und kann daher direkt mit XSLT erzeugt werden. Praktisch kein Programmcode muss mehr angefasst werden.

Technische Beschreibung

Das XML-Dateiformat

TODO

Richtlinien für das eigene XML-Format

Der Text-Inhalt eines Elementes sollte direkt folgen, ohne Zeilenumbruch, ohne Leerzeichen:

schlecht besser
<person>
  <name>
    Rumpelstielzchen
  </name>
</person>
<person>
  <name>Rumpelstielzchen</name>
</person>

Dadurch erzeugt der Stylesheet keine unnötigen Leerzeichen, was uns einen Haufen Formatierungs-Probleme erspart.

Der XML-Code sollte für Einträge vom gleichen Typ auch gleichnamige Elemente enthalten, selbst wenn dies eine tiefere Hierarchie bedeutet:

schlecht besser
<anfang>24.01.2004</anfang>
<ende>24.01.2004</ende>
<anfang>
  <datum>24.01.2004</datum>
</anfang>
<ende>
  <datum>24.01.2004</datum>
</ende>

Dadurch vereinfacht sich der Stylesheet, da nun eigenständige Templates für Datumsangaben o.Ä. verwendet werden können.

Leere Elemente sollten ganz weggelassen werden:

schlecht besser
<zeitspanne>
  <anfang/>
  <ende>24.01.2004</ende>
</zeitspanne>
<zeitspanne>
  <ende>24.01.2004</ende>
</zeitspanne>

Dadurch vereinfacht sich der Stylesheet, da er i.A. mit weniger Fallunterscheidungen auskommt.

Bei Längeneinheiten, Zeitsangaben, Währungen, etc. sollten Attribute verwendet werden, welche die Einheit (Dollar, EUR, DM, ...) bzw. die Lokalisierung (GB, US, DE, FR, ...) angeben:

schlecht besser
<preis>
  <amount>12,00€</amount>
<preis>
<preis>
  <amount unit="EUR">12,00</amount>
</preis>

Das erspart Probleme mit Sonderzeichen und erlaubt einheitenlose Tabellen.

Die länderspezifische Formatierung (localisation, l10n) sollte im XML-erzeugenden Programm passieren:

schlecht besser
<geburt>
  <date>
    <year>2004</year>
    <month>01</month>
    <day>23</day>
  </date>
</geburt>
<geburt>
  <date locale="EN">01/23/2004</date>
  <date locale="DE">23.01.2004</date>
</geburt>

Boolesche Werte (wahr/falsch) sollten durch Vorhandensein bzw. Nichtvorhandensein des Elements dargestellt werden:

schlecht besser
<person>
  <name>Volker Grabsch</name>
  <child>no</child>
</person>
<person>
  <name>Baby Bruno</name>
  <child>yes</child>
</person>
<person>
  <name>Volker Grabsch</name>
</person>
<person>
  <name>Baby Bruno</name>
  <child/>
</person>

Informationen über das Geschlecht sind nicht boolesch.

Wiederkehrende, allgemeingültige Elemente und Attribute sollten englische Bezeichner erhalten:

schlecht besser
<zeitspanne>
  <anfang>
    <datum>22.01.2004</datum>
  </anfang>
  <ende>
    <datum>24.01.2004</datum>
  </ende>
</zeitspanne>
<period>
  <start>
    <date>22.01.2004</date>
  </start>
  <end>
    <date>24.01.2004</date>
  </end>
</period>

Dadurch werden sie leichter internationalisierbar und es entfallen Bezeichner-Probleme mit Sonderzeichen.

Weitere Positiv-Beispiele:

<tattoo>
  <right>D789</right>
  <left>6.8.11</left>
</tattoo>
<period>
  <start>
    <date locale="DE">25.01.2004</date>
    <time locale="DE">22:35</time>
  </start>
  <end>
    <date locale="DE">25.01.2004</date>
    <time locale="DE">23:15</time>
  </end>
</period>
<period>
  <end>
    <date locale="DE">25.01.2004</date>
  </end>
</period>



Siehe auch

Personal tools