Websiteentwicklung: XML: Syntax

Wohlgeformte Dokumente

Bearbeiten

Ein XML-Dokument hat eine logische und eine physische Struktur. Beide sind durch XML festgelegt.

XML kennt folgende Sprachelemente für die physische Struktur:

  • XML-Deklaration
  • Entitäten

XML kennt folgende Sprachelemente für die logische Struktur:

  • Verarbeitungsanweisungen
  • Elemente
  • Attribute
  • Kommentare
  • Text

Dokumente, die gemäß XML korrekt aufgebaut sind, werden als wohlgeformt bezeichnet. Dafür sind sämtliche von XML spezifizierten Regeln sowohl die physische als auch die logische Struktur betreffend einzuhalten.

Als Analogie könnte man sagen, XML spezifiziert, wie Dateien aufgebaut sein können, so wie man sagen könnte, natürliche Sprache besteht aus Vokalen, Konsonanten und Worten verschiedener Wortarten. Darüber, welche Wortarten und welchen Wortschatz es gibt, entscheidet die jeweilige Sprache. Ebenso macht XML keine Aussage darüber, welche Elemente und Attribute es gibt, sondern lediglich, dass es sie gibt und aus welchen Zeichen ihre Namen zusammengesetzt sein dürfen und wie Elemente und Attribute zu notieren sind.

Im Beispiel: Ein wohlgeformter Satz besteht aus Worten. Er hält also die "allgemeinen Regeln" natürlicher Sprache ein. Er muss aber keinerlei Grammatik erfüllen, sich auf Worte einer bestimmten Sprache beschränken oder ähnliches.

Ein (zusätzlich zur Wohlgeformtheit) gültiger Satz wäre korrekt für eine bestimmte Sprache, zum Beispiel Französisch. Ein gültiger Satz muss sich auf den Wortschatz "Französisch" beschränken sowie die französische Grammatik einhalten.

Für gültige Dokumente wird eine Spezifikation über Elemente und Attribute benötigt; gemäß dieser Spezifikation kann die Gültigkeit eines XML-Dokuments geprüft werden.

Beispiel für ein wohlgeformtes, aber nicht gültiges Dokument:

<?xml version="1.0"?>
<bla>
    <blubb>qrtuz</blubb>
</bla>

Dieses Dokument ist zwar wohlgeformt, es folgt aber keiner Spezifikation, sondern enthält nur semantisch sinnlose Information - kein bekanntes Programm weiß mit den Elementen bla und blubb wirklich etwas anzufangen und es ist kein Hinweis notiert, woher eine Information über diese Elemente zu bekommen wäre.

Gültige Dokumente

Bearbeiten

Es gibt Möglichkeiten, der logischen Struktur des Dokuments zusätzliche Regeln aufzuerlegen. Im Wesentlichen definieren diese Regeln den Wortschatz und die Struktur von Elementen und Attributen, sowie verwendbare Datentypen. Die Definition einer solchen logischen Struktur nennt sich Schema. Ein Dokument, dass einem Schema folgt, heißt gültig bezüglich des angewandten Schemas.

Die bekanntesten Schemata sind:

Dokumente ohne Schema, wie auch Dokumente, die gegen die Regeln des Schemas verstoßen, werden als ungültig bezeichnet. Meist wird ein Schema nicht für ein einzelnes Dokument, sondern eine ganze Reihe von Dokumenten spezifiziert.

Es ist allerdings auch möglich, ein Schema in reiner Prosa zu spezifizieren. Derartige Schemata sind kaum dazu geeignet, ohne Beteiligung menschlicher Intelligenz eine Prüfung auf Gültigkeit zu ermöglichen, während obige formale Schemata dazu geeignet sind, Dokumente anhand des Schemas automatisch mit Programmen zu prüfen. Bei komplizierteren Formaten reichen die teils recht einfach angelegten Schema-Sprachen nicht aus, um die erwünschte Struktur komplett und präzise zu beschreiben. Gibt es also eine Prosa-Spezifikation und ein solches Schema für ein Format, ist meistens das Schema eine Vereinfachung oder Näherung der komplexeren, per Prosa normativ beschriebenen Struktur. Die Prüfung anhand eines Schemas ist dann natürlich auch immer nur approximativ und kann nicht endgültig automatisch die Gültigkeit eines Dokumentes feststellen. Solch eine Prüfung mit Programmen (Validatoren) anhand eines formalen Schemas ist also meistens nur eine gute Hilfe, um Fehler zu finden, aber das Ergebnis ist keine Garantie dafür, dass ein Dokument wirklich gültig oder ungültig ist. Es gibt natürlich auch die Möglichkeit, insbesondere bei einfacheren Formaten, die erlaubte Struktur normativ mit der formalen Schema-Sprache zu beschreiben und die Prosa nur informativ hinsichtlich der Struktur zu ergänzen, dann eben mit der Prosa primär die inhaltliche oder semantische Bedeutung der Sprache zu definieren, nicht die Sruktur.

Um bei der Sprachanalogie zu bleiben, könnte man sagen, dass ein Schema wie eine konkrete akustische Sprache ist, zum Beispiel Deutsch oder Englisch. So wie eine Sprache Wortschatz, Wortarten und Satzbau für eine natürliche Sprache definiert, definiert ein Schema die Namen der Elemente und Attribute als Wortschatz und Datentypen und Strukturen als Wortarten und Satzbau.

Das Schema hat letztendlich zur Aufgabe sicherzustellen, dass das Dokument Wortschatz, Datentypen und Struktur verwendet, die von ein oder mehreren Programmen verstanden werden. Wenn ein Schema nicht als Prosa verfaßt ist, sondern in einer formalen Schema-Sprache, eignen sich oft recht allgemeingehaltene Programme, um Dokumente anhand solcher Schemata zu prüfen. Das ist insbesondere wichtig, wenn man mittels XML-Dokumenten Daten zwischen recht einfachen Programmen austausche will. Hier ist dringend zu empfehlen, ein recht einfaches XML-Format zu definieren (zu verwenden), bei welchem ein Dokument mit einem maschinenlesbaren Schema komplett ausreicht, um zu prüfen, ob das Schema eingehalten wird. Vor dem Versenden der Daten mit dem XML-Dokument kann so einfach und automatisch geprüft werden, ob die Struktur korrekt ist, also dem entsprechen wird, was der Empfänger braucht, um den Inhalt mit seinem einfachen Programm zu lesen und zu verarbeiten. Vor dem Verarbeiten kann der Empfänger natürlich ebenfalls anhand des Schemas automatisch prüfen lassen, ob das Dokument geeignet ist, um von seinem einfachen Programm verarbeitet zu werden. Dieses Vorgehen minimiert dann die Wahrscheinlichkeit von Fehlinterpretation bei der automatischen Verarbeitung von Daten, vorausgesetzt natürlich, das konkrete Programm hat nicht durch Fehler oder fälschlich implizierte Konventionen weitere Einschränkungen implementiert, was wie verarbeitet ist, ein in der Praxis ebenfalls sehr häufig auftretendes Problem.

Beispiel für ein gültiges Dokument (XHTML):

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
    <head>
        <title>Ein XHTML-Dokument</title>
    </head>
    <body>
        <h1>Ein XHTML-Dokument</h1>
        <p>
            Das ist ein XHTML-Dokument.
        </p>
    </body>
</html>

Dieses Dokument ist gültig. Es handelt sich um ein XHTML-Dokument. Weil XHTML lediglich ein Schema für XML ist, sind sämtliche XHTML-Dokumente gleichzeitig XML-Dokumente, sie sind also eine Untermenge von XML. Um ein XHTML-Dokument zu sein, muss ein Dokument in allererster Linie erstmal ein XML-Dokument sein. Es muss ein wohlgeformtes Dokument sein, das zusätzlich auch noch den Regeln eines XHTML-Schemas folgt. XHTML ist gleichzeitig ein Fall, bei dem nicht alle einzuhaltenden Regeln in der DTD notierbar sind, die DTD ist letztlich nur eine Näherung für die normative Spezifikation in Form von Prosa, welche zudem noch die inhaltliche oder semantische Bedeutung von XHTML-Strukturen festlegt. Zum Beispiel schreibt XHTML per Prosa zusätzlich vor, dass das Element a nicht selbst irgendein Nachfahre eines Elementes a sein darf, wohl aber einige andere Elemente beinhalten kann, deren Nachfahren a-Elemente sein dürfen, wenn es kein Element a als Vorfahren ist. Eine derart komplizierte Regel läßt sich leider in einer DTD nicht angeben, also auch mit einer DTD nicht automatisch prüfen, mit anderen Schema-Sprachen eventuell schon.

Dieses Dokument besitzt aufgrund der Spezifikation von XHTML auch semantisch wertvolle Informationen. Es ist von jedem Programm, das XHTML versteht, entsprechend darstellbar. Das Element title enthält den Dokumenttitel, der meist als Fenstertitel verwendet wird, aber auch gut verwendet werden kann, wenn in einer Diskussion des Dokumentes selbiges benannt werden soll. Das Element h1 ist eine Hauptüberschrift im Dokument. Das Element p umschließt einen Absatz, also einen abgeschlossenen Gedankengang, der zumeist aus mehreren Sätzen oder ähnlichen Strukturen besteht. Jedes der verwendeten Elemente ist durch XHTML definiert.

XML definiert lediglich, wie Sprachen für Dokumente funktionieren können. XML ist eigentlich keine Auszeichnungssprache, sondern nur ein Konzept für Auszeichnungssprachen. Dabei kann man je nach Anwendungsfall entscheiden, ob man auf eine bestehende Auszeichnungssprache zurückgreift, zum Beispiel XHTML für Hypertext oder SVG für Vektorgraphik, oder selbst eine neue Auszeichnungssprache nach den eigenen Wünschen definiert. Auch die Kombination, Abwandlung oder Erweiterung bestehender Auszeichnungssprachen ist mit XML möglich.

Die Verarbeitung von Dokumenten auch ohne ein festgeschriebenes, computerverarbeitbares Schema ist auch möglich. Dies trifft etwa auf die XML-Variante von HTML5 zu, aber auch auf SVG tiny 1.2. Für derartige Formate gibt es teilweise spezielle Programme, die genau für dieses Format eine (näherungsweise) Prüfung durchführen können. Es ist jedoch sehr praktisch, mit allgemeinen Programmen nur anhand einer Schema-Datei prüfen zu können, ob ein XML-Dokument von der gewünschten Zielsoftware verarbeitbar ist, indem man es auf die Gültigkeit gemäß dem passenden Schema hin prüft.

Einige bekannte Formate für gültige Dokumente

Bearbeiten

Das wohl bekannteste Format für gültige Dokumente ist XHTML, das als Nachfolger von HTML für die Auszeichnung von Text bestimmt ist. Es wird eingesetzt für Projekte im Netz, aber auch in nur lokal verfügbaren Textdokumentationen, aber auch im Standardformat für digitale Bücher EPUB. Weitere Formate sind SVG für Vektorgraphik, DocBook für technische Dokumentation, XForms für Formulare, MathML für mathematische Formeln, SMIL für Multimedia. Es gibt viele Schemata und für die verschiedensten Anwendungsbereiche.

Hinweise zum Sprachgebrauch

Bearbeiten

Fehlerhaftes XML-Dokument

Bearbeiten

Ein Dokument, das gegen XML-Regeln verstößt, ist nicht wohlgeformt und damit kein XML-Dokument. Die Bezeichnung "fehlerhaftes XML-Dokument" ist gemäß der XML-Spezifikation also ein Oxymoron, da der Begriff XML-Dokument definitionsgemäß eigentlich impliziert, dass das Dokument korrekt ist. In Bezug auf die Wohlgeformtheit verwenden XML-Entwickler daher ausschließlich die Bezeichnung "nicht-wohlgeformtes Dokument" oder "fehlerhaftes Dokument", jedoch nie "fehlerhaftes XML-Dokument". Praktisch kann es allerdings Instanzen geben, die Metainformationen über Dokumente etwa in Form einer Angabe des Medientyps verbreiten, ohne den Inhalt des Dokumentes zu kennen oder zu prüfen, von daher kann von solchen Instanzen unabhängig vom tatsächlichen Sachverhalt natürlich auch fälschlich behauptet werden, es läge ein XML-Dokument vor, obgleich dies aufgrund solcher Strukturfehler gar nicht zutrifft. Solche Konfliktfälle sind dann in Form einer Fehlermeldung zu präsentieren.

Gültiges Dokument

Bearbeiten

Lediglich die Dokumenttypdefinition ist Bestandteil der XML-Spezifikation. Sämtliche anderen Möglichkeiten, Schemata zu spezifizieren, sind zusätzliche Spezifikationen. Dementsprechend bezieht sich die Bezeichnung "gültiges XML-Dokument" strenggenommen lediglich auf XML-Dokumente, die gemäß einer Dokumenttypdefinition gültig sind. Der allgemeine Sprachgebrauch verwendet "gültiges XML-Dokument" jedoch als Kurzform für "wohlgeformtes XML-Dokument, das nach einem Schema gültig ist". Weil, wie diskutiert Schemata oft nur Näherungen einer normativen Prosa-Spezifikation sind, ist ein gemäß Dokumenttypdefinition gültiges Dokument lediglich eines, welches diesem Schema entspricht. Die Prosa-Spezifikation kann allerdings weitere Einschränkungen machen oder leicht abweichende Möglichkeiten definieren, was es dann immer notwendig macht, nach einer Prüfung per Programm diese kritischen Abweichungen getrennt zu untersuchen.

Kurznotation EBNF

Bearbeiten

In der offiziellen Empfehlung zu XML wie auch in zahlreichen Empfehlungen von XML-Formaten wird eine Kurznotation für Angaben verwendet, welche Strukturen in Dokumenten erlaubt sind oder wie Format-spezifische Strukturen zu definieren sind. Diese Kurznotation wird Erweiterte Backus-Naur Form genannt (englisch: Extended Backus-Naur Form; Abkürzung EBNF). Diese Form ähnelt auch teils regulären Ausdrücken, beziehungsweise nutzt diese. Mit dieser formalen Kurznotation läßt sich einfacher und präziser zum Ausdruck bringen, wie etwas zu notieren ist, deswegen wird sie auch in diesem Buch bisweilen verwendet, zudem ist ein Verständnis der Notation relevant, wenn man Details in offiziellen Empfehlungen nachlesen will, die in diesem Buch nicht präzise ausgeführt werden. Reguläre Ausdrücke sind ebenfalls weit verbreitet für die Beschreibung komplizierterer Textstrukturen, daher kann es ebenfalls wichtig sein, diese zu kennen, um Definitionen im Detail zu verstehen.

Definitionen sehen wie folgt aus:
Symbol ::= Ausdruck
Dabei wird die Struktur 'Symbol' durch den Ausdruck 'Ausdruck' definiert.

Zeichen und Zeichenfolgen:

#xN
dabei ist N eine hexadezimale (nicht negative) Zahl; damit ist das Zeichen gemeint, welchem per Unicode/ISO/IEC 10646 die hexadezimale Zahl N zugeordnet ist.
[a-zA-Z], [#xM-#xN]
Reguläre Ausdrücke für ein Zeichen aus dem angegebenen Bereich, im ersten Falle alle kleinen und großen Buchstaben von a bis z (ohne Sonderzeichen wie Umlaute etc, im zweiten Falle sind das alle Zeichen, die hexadezimale Repräsentationen zugeordnet haben, die zwischen den Zahlen M und N liegen, einschließlich dieser Grenzen.
[abc], [#xL#xM#xN]
Reguläre Ausdrücke für ein Zeichen genau aus den angegebenen Möglichkeiten, im ersten Falle also entweder a, b oder c, im zweiten Falle entspricht das einem Zeichen, repräsentiert entweder durch die Zahl L, M oder N.
[^a-z], [^#xM-#xN]
Reguläre Ausdrücke, dabei kennzeichnet das ^ einen Ausschluß, die dahinter angegebenen Zeichen sind also nicht erlaubt, sondern alle außerhalb des angegebenen Bereiches.
[^abc], [^#xL#xM#xN]
Die drei Zeichen hinter dem ^ sind nicht erlaubt, andere sind erlaubt
"Beispiel"
Bezeichnet eine Zeichenkette in doppelten Anführungszeichen, die in dieser Form zu notieren ist, hier also '"Beispiel"'.
'Beispiel'
Bezeichnet eine Zeichenkette in einfachen Anführungszeichen, die in dieser Form zu notieren ist, hier also "'Beispiel'".

Ausdrücke

(Ausdruck)
Runde Klammern fassen einfach Ausdücke zusammen, wie beim Rechnen ist zunächst das Ergebnis des Klammerausruckes zu bestimmen, bevor dieses gegebenenfalls mit anderen Ausdrücken verrechnet wird.
A?
A tritt entweder exakt einmal auf oder keinmal.
A B
B folgt auf A, gibt also die Reihenfolge an, zudem, dass sowohl A als auch B vorkommen müssen
A | B
Entweder A oder B; zur Priorität: A B | C D ist dasselbe wie (A B) | (C D)
A - B
Trifft auf jede Zeichenkette zu, die mit dem Ausdruck A beschrieben wird, aber nicht mit dem Ausdruck B
A+
A kommt mindestens einmal vor, dies hat höhere Priorität als |, also gilt: A+ | B+ ist dasselbe wie (A+) | (B+).
A*
A kann optional in beliebiger Häufigkeit vorkommen, also auch gar nicht, einmal oder mehrmals, dies hat höhere Priorität als |, also gilt: A* | B* ist dasselbe wie (A*) | (B*).

Validität und Wohlgeformtheit

[ wfc: ... ]
Der Ausdruck hinter dem : trifft zu für wohlgeformte Dokumente
[ vc: ... ]
Der Ausdruck hinter dem : trifft zu für valide Dokumente

Beispiel (mit Ausrücken A, B, C, D, E): (A? | B* | C+) | (D E)
Hier gibt es also zwei Alternativen, entweder man verwendet den ersten Klammerausdruck oder den zweiten.
Wählt man den den ersten, verwendet man entweder (A einmal oder keinmal) oder (B beliebig oft) oder aber (C mindestens einmal).
Wählt man den zweiten Klammerausdruck, so verwendet man exakt ein D gefolgt von exakt einem E.


  • - Der Validator der W3C - Er überprüft die Wichtigsten XML-Standards nach dem zugehörigen Schema
  • - Validome - Alternativer Validator für einige spezielle Schemata