Björn Klippstein

XML-Namespace

Klippstein IT Service

Aus 4webmaster.de

Wechseln zu: Navigation, Suche

XML-Namespaces werden benutzt, um in einem einzelnen Dokument mehrere ist Merkmal einer Instanz von::XML-Sprachen zu mischen. Ihre Funktionsweise ist mit Vorwahlen bei Telefonnummern zu vergleichen.

Zum Beispiel beschreibt das <p>-Element in ist Merkmal einer Instanz von::XHTML einen Absatz; in einer XML-Sprache für eine Personendatenbank könnte <p> ein Element für eine Person darstellen. Namespaces erlauben, diese Elemente eindeutig zu unterscheiden.

Der Namespace-Mechanismus für XML-Daten wurde vom W3C entwickelt und liegt derzeit in der Version 1.1 vor. Die erste Version der Spezifikation datiert auf den 14. Januar 1999, also etwa ein Jahr, nachdem die XML-Spezifikation verabschiedet wurde. Aus diesem Grund findet man z.B. in der Empfehlung zu MathML 1.0 noch keine Namespace-Angabe.

Die wichtigsten Namespaces finden sich in der Liste der XML-Namespaces.

XML-Namespaces sind URIs

Namespaces werden durch URIs dargestellt, denn URIs sind per Definition eindeutig. Meistens werden normale Webadressen verwendet. Die Adresse muss aber nicht unbedingt real erreichbar sein, es reicht die Angabe einer beliebigen URI (case-sensitive und ggf. mit URL-Kodierung, also z.B. %E4 statt ä). Wenn die URL einer existierenden Resource als Namespace verwendet wird, mag es sinnvoll sein, unter dieser Adresse zusätzliche Informationen zu der XML-Sprache anzubieten, z.B. eine DTD Document Type Definition oder ein XML-Schema.

Default-Namespace festlegen

Um nicht für jedes XML-Element einzeln den Namespace angeben zu müssen, wird zunächst der Standardnamespace festgelegt. Das ist der Default-Namespace, dem jedes Element automatisch angehört, wenn nicht explizit ein anderer Namensraum gewünscht wird. Der Standardnamespace wird meist im Document-Element angegeben. Hierzu wird das XML-Attribut xmlns verwendet, z.B.:

<html xmlns="http://www.w3.org/1999/xhtml">
   ... restliche HTML-Datei
</html>

Das Element html sowie alle seine Kind- und Kindeskindelemente usw. (also Elemente innerhalb von <html>...</html>) gehören jetzt zum Namespace http://www.w3.org/1999/xhtml.

Mehrere Namespaces im gleichen Dokument verwenden

Sollen mehrere Namespaces verwendet werden, so gibt es zwei Möglichkeiten. Die erste Möglichkeit ist, einem Kindelement einfach einen neuen Default-Namespace zuzuweisen, z.B.:

<html xmlns="http://www.w3.org/1999/xhtml">
   ... XHTML-Elemente
 
   <math xmlns="http://www.w3.org/1999/Math/MathML">
     ... MathML-Elemente
   </math>
 
   ... XHTML-Elemente
</html>

Die andere Möglichkeit ist die Verwendung von Präfixen. Damit können zwei Namespaces durchgehend parallel genutzt werden. Zunächst muss das Präfix definiert werden und damit an einen bestimmten Namensraum gebunden werden. Dafür bietet sich wieder das Document-Element an. Beispiel:

<html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:m="http://www.w3.org/1999/Math/MathML">
   ... XHTML-Elemente
 
   <m:math>
     ... MathML-Elemente mit m:-Präfix
   </m:math>
 
   ... XHTML-Elemente
</html>

In diesem Beispiel wird im <html>-Element mit der Angabe xmlns:m="..." das Präfix m an den MathML-Namespace gebunden. Danach können Elemente durch die Angabe

<m:Elementname>...</m:Elementname>

in den entsprechenden Namespace gesetzt werden. Im Unterschied zum Beispiel ohne Präfixe ist zu berücksichtigen, dass Kindelemente eines Elements mit Präfix nicht automatisch denselben Namespace besitzen. Sie müssen ebenfalls mit einem Präfix versehen werden:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:m="http://www.w3.org/1999/Math/MathML">
   ... XHTML-Elemente
 
   <m:math>
     <span>Hier steht XHTML. Variable x: <m:i>x</m:i></span>
   </m:math>
 
   ... XHTML-Elemente
</html>

Beispiel

Im folgenden Beispiel werden Elemente aus den XML-Sprachen XHTML (blau), MathML (rot) und SVG (grün) gemischt:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:svg="http://www.w3.org/2000/svg">
  <head>
    <title>Beispiel-Datei mit mehreren Namespaces</title>
  </head>
  <body>
    <h1>Eine Mathe-Formel:</h1>
    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <mi>x</mi><mo>=</mo><mn>2</mn>
    </math>
    <p>Und noch ein kleines Bild dazu:</p>
    <svg:svg>
      <svg:rect x="0" y="0" width="10" height="10" />
      <svg:text>
        <svg:tspan>Eine Formel in der Grafik:</svg:tspan>
        <svg:tspan>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <mi>y</mi><mo>=</mo><mn>1</mn>
          </math>
        </svg:tspan>
      </svg:text>
    </svg:svg>
    <p>Eine SVG Grafik kann auch ohne Präfix verwendet werden:</p>
    <svg xmlns="http://www.w3.org/2000/svg">
      <circle cx="10" cy="10" r="5" fill="red" />
    </svg>
  </body>
</html>

Siehe auch

Weblinks




Dieser Artikel basiert auf dem Artikel Namensraum_(XML) aus der freien Enzyklopädie Wikipedia. Er steht unter der GNU-Lizenz für freie Dokumentation. In diesem Wiki und / oder der Wikipedia ist eine Liste der Autoren verfügbar.


Wurde_publiziert_von::W3C