Namensräume

(Auszug aus "Perl & XML" von Erik T. Ray & Jason McIntosh)

Manchmal ist es nützlich, seine Elemente und Attribute in Gruppen zu ordnen. Dazu verwendet man die sogenannten Namensräume (Namespaces). Ein Namensraum läßt sich ganz gut mit dem Nachnamen einer Person vergleichen. Sie kennen drei Jungs namens Mike, aber die Nachnamen sind unterschiedlich. Das Dokument im folgenden Beispiel veranschaulicht das Konzept:

Beispiel: Ein Dokument mit Namensräumen

<?xml version="1.0" encoding="iso-8859-1"?>
<report>
  <title>Fisch und Fahrräder: Gibt es einen Zusammenhang?</title>
  <para>Ich habe eine überraschende Beziehung zwischen Fisch und Fahrrädern
    gefunden, die man grob durch die Gleichung <equation>f = kb+n</equation>
    ausdrücken kann. Die Ergebnisse meines Experiments werden im folgenden
    Graphen dargestellt:</para>
  <chart xmlns:graph="http://mathstuff.com/dtds/chartml/">
    <graph:dimension>
      <graph:axis>fish</graph:axis>
      <graph:start>80</graph:start>
      <graph:end>99</graph:end>
      <graph:interval>1</graph:interval>
    </graph:dimension>
    <graph:dimension>
      <graph:axis>bicycle</graph:axis>
      <graph:start>0</graph:start>
      <graph:end>1000</graph:end>
      <graph:interval>50</graph:interval>
    </graph:dimension>
    <graph:equation>fish=0.01*bicycle+81.4</graph:equation>
    </graph:chart>
</report>

Dieses Beispiel verwendet zwei Namensräume. Der erste ist der Standardnamensraum (Default-Namespace), d. h., Element- und Attributnamen enthalten keinen Doppelpunkt. Die Elemente, deren Namen mit graph: beginnen, stammen aus dem Namensraum »chartml« (den wir gerade erfunden haben). graph: ist das Präfix eines Namensraums. Besitzt ein Element- oder Attributname dieses Präfix, dann wird er zu einem qualifizierten Namen . Im Beispiel gibt es zwei <equation>-Elemente, sie spielen aber eine völlig verschiedene Rolle innerhalb des Dokuments. Das eine, das im Standardnamensraum liegt, wird verwendet, um eine Gleichung verbatim wiederzugeben. Das andere, im Namensraum"http://mathstuff.com/dtds/charml/" liegende Element, dient dem Grafikprogramm zur Generierung einer Kurve.

Wird ein Namensraum verwendet, muß er in irgendeinem umgebenden Element deklariert sein. Die Deklaration geschieht durch ein Attribut in der Form xmlns:präfix=URI. Dabei ist präfix das innerhalb dieses Dokuments gültige Präfix, im obigen Beispiel ist das graph:. Die URI ist ein eindeutiger Bezeichner, meist in Form einer URL, aber das muß nicht sein. Die URL wird gerne verwendet, weil es damit relativ einfach ist, die Eindeutigkeit zu sichern. Außerhalb des deklarierenden Elements gilt der Namensraum nicht – es sei denn, er wird erneut deklariert. In diesem Fall gelten das (möglicherweise unterschiedliche) Präfix und sein Namensraum auch innerhalb des zweiten deklarierenden Elements.

Namensräume bieten die Möglichkeit, ähnliche Element- oder Attributtypen einfach zu unterscheiden. Davon abgesehen, spielen sie aber eine enorm wichtige Rolle bei der Verarbeitung eines XML-Dokuments durch einen Prozessor. Ein Wechsel des Namensraums signalisiert zum Beispiel oft, daß der Standardformatierer durch einen anderen ersetzt werden soll, der mit diesen spezifischen Daten besser umgehen kann. Im Beispiel war das ein Programm zur Darstellung eines Graphen. In anderen Fällen dient der Namensraum zur Hervorhebung bestimmter Anweisungen, die dann gewissermaßen Meta-Markup sind. Ein typisches Beispiel dafür ist XSLT.

Die Bedeutung der Namensräume als nützliches XML-Werkzeug nimmt stetig zu. Leider entsteht hier ein Problem im Zusammenhang mit DTDs. Wir werden später noch näher auf DTDs eingehen, für den Augenblick sei gesagt, daß eine DTD Deklarationen enthält, die die gültigen Elemente und Attribute limitieren und strukturieren. In einer DTD gibt es aber keine Deklaration eines Namensraums, insbesondere also auch keine Zuweisung von Elementen oder Attributen zu einem Namensraum (vom Standardnamensraum einmal abgesehen). Das ist auf den ersten Blick schwer verständlich, aber die DTD stammt noch aus den Urzeiten von SGML, Namensräume sind dagegen ein sehr neues Konzept. Namensräume und DTDs sind also inkompatibel. Dieses Problem ist noch nicht gelöst, obwohl es in den verschiedenen Standardisierungsgremien einige Bemühungen diesbezüglich gegeben hat.

Strategien des Programmierers behandelt einige praktische Fragen, die bei der Arbeit mit Namensräumen auftauchen.

  

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Perl & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Perl & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de