XML-Namespaces

Namespaces erlauben das gleichzeitige Verwenden zweier XML-Applikationen.

Bei den XML-Namespaces handelt es sich um eine Technologie, mit der man verschiedene XML-Anwendungen in einem XML-Dokument kombinieren kann. Ein gutes Beispiel dafür ist die Kombination von MathML in XHTML. Dann kann ein geeigneter Browser mathematische Formeln auf einer Website anzeigen.

URLs können Ressourcen eindeutig beschreiben

Um dies zu ermöglichen, und um eventuelle Unklarheiten zu beseitigen, wenn in zwei verwendeten XML-Anwendungen die gleichen Elementnamen verwendet werden, wird jedem der XML-Applikationen eine eindeutige Identifikation in Form einer URL zugeordnet. Diese URL nennt man auch den Namespace. Diese URL können, aber müssen nicht Informationen zur jeweiligen XML-Anwendung enthalten, entscheidend ist es, dass die Anwendung eindeutig bestimmt ist.

Mit xmlns wird der Namespace definiert

Einem Element wird ein Namensraum zugeordnet, indem man das reservierte Attribut xmlns einfügt und als Wert den Namespace der XML-Applikation angibt. Alle Elemente unterhalb des Elements mit dem definierten Namespace haben jetzt diesen Namespace, bis ein untergeordnetes Element einen anderen Namespace definiert.

Beispiel 1.13. Namespace-Deklaration bei XHTML 1.0

<?xml version="1.0" encoding="UTF-8"?>
<html
                xmlns="http://www.w3.org/1999/xhtml" 
                lang="en"
                xml:lang="en">
        <head>
                <title>
                        MathML's Hello Square
                </title>
        </head> 
        <body> 
                <p>
                        This is a perfect square:
                </p>
                <math
                                xmlns="http://www.w3.org/1998/Math/MathML">
                        <mrow>
                                <msup>
                                        <mfenced>
                                                <mrow>
                                                        <mi>a</mi>
                                                        <mo>+</mo>
                                                        <mi>b</mi> 
                                                </mrow>
                                        </mfenced>
                                        <mn>2</mn> 
                                </msup>
                        </mrow>
                </math> 
        </body> 
</html>

In diesem Beispiel wird im Root-Element definiert, dass es sich um eine HTML-Datei handelt und im math-Element wird festgelegt, dass alle Elemente unterhalb MathML-Elemente sind.

Wenn nichts weiteres angegeben ist, haben alle Elemente den Default-Namespace

Damit kommt man zum Begriff des Default-Namespace (Standard-Namensraum). Dieser wird im Root-Element des Dokuments festgelegt. Außerdem kann man im Root-Element auch so genannte Namespace-Prefixes definieren. Namespace-Prefixes erlauben es, Elemente aus mehreren Namespaces zu verwenden, ohne jedes mal den Namespace mit den Attribut xmlns anzugeben.

Definition und Einsatz von Namespace-Prefixes

Die Verwendung von Namespaces wird durch Namespace-Prefixes erleichtert

Ein Namespace-Prefix wird definiert, indem im Root-Element des Dokuments ein Attribut der Form xmlns, Doppelpunkt, Name des Prefixes mit der gewünschten Namespace-URL als Wert des Attributs. Der Namespace-Prefix wird verwendet, indem für jedes Element, welches sich in diesem Namespace befinden soll vor den Elementnamen der Namespace-Prefix, durch einen Doppelpunkt getrennt geschrieben wird.

Beispiel 1.14. XHTML 1.0 & MathML mit Namespace-Prefix

Damit kann ich das vorhergehende Beispiel durch die Verwendung des Namespace-Prefixes mm abkürzen:

<?xml version="1.0" encoding="UTF-8"?> 
<html
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:mml="http://www.w3.org/1998/Math/MathML"
                lang="en" 
                xml:lang="en"> 
        <head>
                <title>MathML's Hello Square</title>
        </head>
        <body>
                <p>
                        This is a perfect square:
                </p> 
                <mml:math>
                        <mml:mrow>
                                <mml:msup> 
                                        <mml:mfenced> 
                                                <mml:mrow>
                                                        <mml:mi>a</mml:mi>
                                                        <mml:mo>+</mml:mo>
                                                        <mml:mi>b</mml:mi>
                                                </mml:mrow>
                                        </mml:mfenced> 
                                        <mml:mn>2</mml:mn>
                                </mml:msup> 
                        </mml:mrow>
                </mml:math>
        </body> 
</html>