Namensräume
In XML ist es möglich, für Elemente einen Namensraum festzulegen. Namensräume sind eigentlich dazu gedacht, Namenskonflikte zu vermeiden. Zu so einem Konflikt kann es immer dann kommen, wenn in einem XML-Dokument unterschiedliche XML-Varianten gemischt werden.
Ein Beispiel: Sie haben eine eigene XML-Datei geschrieben, in welcher es das Element article
gibt. Ein
bestimmter Teil Ihrer XML-Datei soll nun aber HTML-Code enthalten. In HTML gibt es aber ebenfalls das Element article
.
Sie haben einen Namenskonflikt.
Genau für solche Zwecke bzw. grundsätzlich, wenn Sie Elemente aus einer anderen XML-Variante (wie z. B. von HTML) verwenden,
sollten Sie einen Namensraum angeben. Die Definition des Namensraums erfolgt mittels des Attributs xmlns
,
einem Präfix und einer URI (meist in Form der URL). Hinter der angegebenen URL muss in der Realität nichts existieren, sie muss
sich lediglich unterscheiden. Es empfiehlt sich jedoch, hinter der URL eine Spezifikation zu hinterlegen (bzw. auf die Spezifikation
z. B. vom W3C zu verlinken). Die vollständige Angabe eines Namensraums lautet xmlns:Präfix="URI"
. Alle Elementnamen,
welche diesem Namensraum angehören, müssen nun mit dem Präfix erweitert werden. Aus einem Element mit dem Namen article
und dem Präfix mit dem Namen h
würde also h:article
werden. Die Angabe des Namensraums kann entweder
im Wurzelelement oder im ersten Element, in welchem der Namensraum benötigt wird, erfolgen.
Im folgenden Beispielcode ist das oben beschriebene Szenario mittels Namensraumangabe gelöst:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <article> <info> <autor>Max Mustermann</autor> <datum>15.01.2017</datum> </info> <inhalt> <h:article xmlns:h="http://www.w3.org/TR/html5/"> <h:h1>XML Namensräume</h:h1> <h:p>Dies ist ein Newsletter zum Thema Namensräume in der Auszeichnungssprache XML.</h:p> </h:article> </inhalt> </article>
Übrigens: Wenn alle Elemente, welche einem bestimmten Element untergeordnet sind, einem anderen Namensraum angehören, so
kann auf den Präfix verzichtet werden. Das Attribut lautet dann lediglich xmlns
. Im Beispiel oben wäre dies möglich.
Wichtig: Alle Elemente, bei denen kein Namensraum explizit angegeben wurde, gehören dem Standardnamensraum an.