Die Erweiterung zu XML1.1 - zur Integration der Entwicklung von Unicode

Globale Darstellung der Änderungen von Xml-1.0 zu Xml-1.1

Die zwischen 1996 und 1998 entwickelte XML-Version 1.0 ist seit der Veröffentlichung am 10.02.1998 unverändert, die aktuell gültige vierte Edition vom 16.08.2006 umfaßt lediglich redaktionell-erläuternde Korrekturen. Die grundlegenden Definitionen, welche entscheiden, ob ein Dokument ein wohlgeformtes Xml-Dokument ist, blieben jedoch konstant. Erst auf der Basis dieser Stabilität konnten all jene weiterführenden Definitionen wie Namespace-Deklarationen, XSLT, SOAP sowie hierauf aufbauende Anwendungen entwickelt werden.

Eine wesentliche Stärke von Xml besteht darin, daß von vornherein Unicode unterstützt wurde. Die Unicode Version 2.0 vom Juli 1996 legt die Regeln fest, auf welche in den Definitionen zu Xml Bezug genommen wurde. Damit ist dieser Unicode-Standard selbst ein Teil des Xml-Standards. Seither hat sich Unicode jedoch über die Varianten 3.0 (September 1999), 3.1 (März 2001), 3.2 (März 2002) bis zur aktuellen Version Unicode 4.0 (April 2003) weiterentwickelt. Der Unterschied zwischen dem bisherigen Xml-1.0 und dem seit dem 04.02.2004 festgelegten Xml-1.1 besteht darin, daß letzteres diese Weiterentwicklung von Unicode berücksichtigt.

Zeichen, die in Unicode 2.0 fehlen, mögen bereits als Zeichendaten in Xml-1.0 verwendet worden sein. Ihre Verwendung ist jedoch nicht gestattet in Element- und Attribut-Namen, aufzählenden Attribut-Werten, processing-instructions und ähnlichem. Da die zukünftige Entwicklung von Unicode sozusagen 'nach oben hin' offen ist, hat sich die das gesamte Xml durchziehende Philosophie der sehr vielfältigen Möglichkeiten, Namen zu definieren, von Xml-1.0 zu Xml-1.1 gewandelt. In Xml-1.0 ist alles verboten, was nicht explizit erlaubt ist. Dies wird mit Xml-1.1 umgekehrt dahingehend, daß alles erlaubt ist, was nicht explizit verboten wurde. Damit ist die auch für Namen erlaubte Zeichenmenge nach oben hin offen, falls das BOM zu Beginn des Xml-Dokuments bzw. der Wert des encoding-Attributes vom Xml-Parser verstanden und das korrekte Unicode-Transformation-Format (UTF) auf den Bytestrom angewandt wird.

Bei Xml-1.0 gab es eine Besonderheit bezüglich der Markierung des Zeilenendes. Zwar wurden die verschiedenen Konventionen zwischen Windows-, Unix- und Macintosh-basierten Rechnern berücksichtigt. Das spezielle NEL (#x85), welches bsp. in Windows-basierten Unicode-Zeichensätzen ohnehin nicht belegt ist, auf IBM-kompatiblen Mainframes für Textdateien jedoch das Zeilenende markiert, fehlt in dieser Auflistung. Eine Wirkung war, daß Xml-Dokumente auf Mainframes dort keine lokal gültigen Textdateien waren. Umgekehrt verletzen auf Mainframes erstellte Xml-Dokumente entweder die dortigen Line-End-Regeln oder sie müssen zwischen ihrer Erstellung und ihrem Geparst-Werden zusätzlich transformiert werden, so daß alle #x85 entfernt werden. Zum Beseitigen dieser Inkonsistenz wurden NEL (…) sowie das Unicode-Zeilentrenner-Zeichen (
) zur Liste der Zeilen-End-Zeichen hinzugefügt.

In Xml-1.0 waren alle Zeichen-Entities, welche die Steuerzeichen #x1 bis #x1F maskierten, verboten. Die neue Version 1.1 erlaubt diese Zeichen, allerdings ausschließlich als Zeichenentities, nicht direkt im Dokument. Um die Robustheit der Encoding-Erkennung von Zeichendaten sicherzustellen, müssen nun auch die Steuerzeichen aus dem höheren Bereich zwischen #x7F und #x9F als Zeichenreferenzen notiert werden, Xml-1.0 hat diese frei erlaubt. Theoretisch ist dies eine Verletzung der Abwärtskompatibilität. Praktisch spielt diese jedoch kaum eine Rolle, da die meisten Xml-Dokumente mit gewöhnlichen Texteditoren erstellt werden und diese Steuerzeichen damit nicht eingegeben wurden. Weiterhin vollständig verboten bleibt #x0, sowohl direkt als auch als Zeichen-Entity. Dieses Zeichen wird in allen an C/C++ angelehnten Programmierumgebungen als Ende eines Strings interpretiert, so daß das fortgesetzte Ausschließen dieses Zeichens nachvollziehbar ist.

Die Änderungen im Detail

Hinweise für die Praxis mit Xml-1.1


© 2003-2018 Jürgen Auer, Berlin.