Sonntag, 12. Februar 2012


Kolumne

Montag, 17. September 2007 | Kolumne

Naked XML: Namensraumverwirrung

(Link zum Artikel: http://www.entwickler.de/jaxenter/kolumnen/038134)
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share

Martin Szugat

Namen sind Schall und Rauch. Namen sind das Unterscheidungsmerkmal von XML. Denn im Unterschied zu den meisten Binärformaten benennt ein XML-Format die Daten: das ist eine Postleitzahl, das eine Kontonummer. Und: Namen sind nicht eindeutig. Eine Bank ist ein Geldinstitut. Eine Bank ist eine gute Gelegenheit, sich auszuruhen.

Bank in der Bank
Eine Bank in der Bank ist – für XML zu viel. XML ist eine Metasprache. Sie kennt nur spitze Klammern, also Syntax, aber keine Semantik, also Bedeutung. Die Bedeutung liegt wie so oft im Auge des Betrachters, sprich in der Verantwortung des Programmes, das die XML-Daten verarbeitet. Wie ein Programm ein Element interpretiert, hängt von zweierlei ab: von dessen Kontext und Namen.

Es kommt auf den Kontext an. Wer diesen Satz hört, weiß: jetzt wird es kompliziert. Damit es einfach bleibt, sollte der Name entscheiden. Doch was, wenn der nicht eindeutig ist? Dann muss er in einen Namensraum verpackt werden.

Namensräume sind abstrakte Gebilde. Sie bieten Platz für Namen, sofern diese eindeutig sind. Es gibt also eine Bank im Namensraum der Finanzen und eine Bank im Namensraum der Einrichtungsgegenstände. Damit sich beide Namensräume unterscheiden, erhält jeder einen eindeutigen Bezeichner:

<fin:bank xmlns:fin="http://finanzen.de">
  <ein:bank xmlns:ein="http://einrichtung.de" />
</fin:bank>
Nachzügler
Namensräume sind ein universelles Konzept. Java nutzt es in Form von Packages, .NET nennt es einfach Namespaces. Und XML? XML kennt keine Namensräume. Wer wiederum XML kennt, weiß: das stimmt so nicht. Zwar sind in der Spezifikation "Extensible Markup Language (XML) 1.0" keine Namensräume definiert, aber deshalb gibt es das Add-On "Namespaces in XML 1.0" – eine weitere Spezifikation aus dem Hause W3C.

Diese erweitert XML um das Konzept der Namensräume und bestimmt die Uniform Resource Identifiers (URI) als eindeutige Bezeichner für Namensräume. URIs sind Ihnen bekannt. Nein? Aber natürlich! Blicken Sie Ihren Bildschirm entlang nach oben und Sie werden eine Zeichenfolge beginnend mit "http://" entdecken. Das ist ein URI!

URLs (Uniform Resource Locators) sind eine Form der URIs. URNs (Uniform Resource Names) sind eine weitere Spielart. Sie haben die Form "urn:entwickler:webtech:naked-xml" und sind kaum gebräuchlich.

In der Auflösung
Entscheidend bei einem URI ist der Scheme-Bezeichner. Er bestimmt das Format des URI und das Protokoll, wie der URI aufzulösen ist. "Auflösen" meint hier nicht Auflösen im Sinne einer Versammlung, sondern den Prozess der Interpretation des URI, der Lokalisierung der Ressource über den URI und der Übermittlung der Ressource über die Internetleitung.

Doch welche Ressource adressiert ein Namensraum-URI? Die einfache Antwort: gar keine. Namensräume sind eben ein rein abstraktes Konzept, und so sind es die Namensraum-URIs. Es findet sich zwar unter http://www.w3.org/1999/XSL/Transform, dem Namensraum-URL der XSLT-Elemente, ein XML-Schema-Dokument, das enthält aber nur Platzhalter und ist auch sonst völlig überflüssig.

Ein Namensraum-URI dient allein der Identifikation eines Namensraumes. Eine Auflösung des URI durch den XML-Parser findet bei Namensraum-URIs nicht statt. So erklärt es sich auch, dass die Namensraum-URIs http://www.aboutxml.de/ und http://www.aboutxml.de, obgleich sie dieselbe Ressource referenzieren, zwei unterschiedliche Namensräume bezeichnen. Denn merke: Namensraum-URIs werden zeichenweise verglichen! Auch Groß- und Kleinschreibung spielt demnach eine Rolle.

Tipps statt Tricks
Deshalb folgende Tipps zur Benennung von Namensraum-URLs:
  1. Schreiben Sie alles klein. Das ist nicht nur angenehmer zu tippen, sondern reduziert auch das Fehlerpotenzial.
  2. Verzichten Sie auf Escape-Sequenzen (zum Beispiel "%7E"), um Sonderzeichen darzustellen, beziehungsweise vermeiden Sie grundsätzlich Sonderzeichen in den URLs.
  3. Schließen Sie den URL nicht mit einem Schrägstrich ab. Das verleitet den unwissenden Entwickler (also jene, die nicht diese Kolumne lesen) zu der falschen Annahme, dass es sich hierbei um einen gewöhnlichen URL handelt und der Schrägstrich somit überflüssig ist.
  4. Überlegen Sie sich ein einheitliches Schema für die Benennung von Namensräumen, beispielsweise http://www.meinefirma.de/schemas/2007/format.
  5. Hinterlegen Sie ein Dokument hinter dem Namensraum-URL – für die Unwissenden! Das kann beispielsweise die Dokumentation des zugehörigen XML Schemas sein.
Kontrolle ist besser
Apropos XML Schema, auch das ist ein beliebtes Missverständnis: der Namensraum-URL lokalisiere das XML Schema, das zur Validierung des XML-Dokuments verwendet werden soll. Richtig ist dagegen, dass Namensraum das Schema identifiziert, das zur Validierung der XML-Daten dient. Zur Eindeutigkeit gesellt sich damit die Validierbarkeit als ein weiterer Anwendungszweck von Namensräumen. Diesen Aspekt beleuchtet die kommende Folge von Naked XML.

In diesem Sinne, bis in vierzehn Tagen,

Ihr Martin Szugat

Martin Szugat ist Berater und Fachautor für XML-basierte Technologien. Seine zweite Leidenschaft gilt dem Social Web. Neben seiner Tätigkeit für Naked XML betreut er beim Online-Magazin Create or Die daher das Thema Social Networks. Sie erreichen ihn via E-Mail an martin.szugat@techworker.net.

Kommentare

Folgende Links könnten Sie auch interessieren