Canonical XML
# Canonical XML

Canonical XML bezeichnet die kanonische Form von XML-Dokumenten, welche die Vergleichbarkeit zweier solcher Dokumente vereinfachen soll. Aus diesem Grund entfernt die Canonical XML-Transformation unbedeutende Unterschiede zwischen den Dokumenten. Jedes XML-Dokument kann in die kanonische Form (Canonical XML) gebracht werden.

Beispielsweise erlaubt XML das Auftreten von Leerzeichen an bestimmten Stellen innerhalb des Start-Tags, und Attribute können in beliebiger Reihenfolge angegeben werden. Solche Unterschiede werden, wenn überhaupt, sehr selten mit einer Bedeutung versehen. Aus diesem Grund werden die folgenden beiden Formen allgemein als äquivalent angesehen:

Im Zuge der Umwandlung eines beliebigen XML-Dokumentes in kanonisches XML werden die Attribute ihrer nominativen Ordnung (ihrem Namen nach alphabetisch) sortiert und die Leerstellen und Anführungszeichen werden vereinheitlicht. Somit würde die zweite Form in die erste Form umgewandelt werden.

Canonical XML spezifiziert eine Reihe anderer Details, von denen einige hier aufgeführt werden:

* die UTF-8-Zeichenkodierung wird verwendet,
* Zeilenenden werden durch das Zeichen 0x0A (New Line = Zeilenvorschub) repräsentiert,
* Leerzeichen innerhalb der Attributwerte werden vereinheitlicht,
* Entitäts-Referenzen werden aufgelöst,
* als CDATA markierte Abschnitte werden aufgelöst,
* leere Elemente werden mit Start- und Endtags <leer></leer> kodiert, nicht durch Verwendung als Leertags <leer/>,
* Standardattribute werden explizit angegeben,
* überflüssige Namensraum-Deklarationen werden gelöscht.

Ein Dokument in Canonical XML zu konvertieren, ist idempotent. Das bedeutet, dass sich bei der ersten Umwandlung die dargestellten Zeichen im Vergleich zum Original ändern, jedoch bei weiteren Umwandlungen keine weiteren Änderungen vorgenommen werden.

Laut dem W3C können zwei Dokumente innerhalb des gegebenen Anwendungskontextes als logisch äquivalent angesehen werden, wenn diese die gleiche kanonische Form haben (außer Begrenzungen in Bezug auf einige selten vorkommende Fälle).

Allerdings könnten Nutzer in speziellen Umgebungen Wert auf spezielle Semantiken legen, welche sich außerhalb der allgemeinen logischen Gleichheit befinden, mit der Canonical XML assoziiert ist. Beispielsweise könnte ein Steganographie-System in einem XML-Dokument durch Veränderung von Leerzeichen, Anführungszeichen von Attributen und Anordnung dieser, die Verwendung von hexadezimalen vs. dezimalen Zeichenreferenzen usw. Informationen verbergen. Offensichtlich gehen durch die Umwandlung einer solchen Datei in Canonical XML diese speziellen Semantiken verloren. Allerdings können auch XML-Dateien, die sich in der Verwendung von Groß- vs. Kleinschreibung unterscheiden, bzw. solche, die alte vs. neue Rechtschreibung verwenden usw., als äquivalent für bestimmte Zwecke angesehen werden. Solche Kontexte sind außerhalb des Rahmens von Canonical XML.

## Software

Eine Implementierung von Canonical XML findet sich im Programm xmllint, das Bestandteil von gnome libxml2 ist und daneben für Microsoft Windows verfügbar ist.

Beispielanwendung:

