Hallo Bernhard,
Ich habe noch ein eher konzeptionelles Problem mit Namespaces! Wofüt braucht man diese denn nun?
XML-Namensräume dienen dazu, Namenskonflikte und Mehrdeutigkeiten in XML-Dokumenten zu vermeiden, die Elemente aus zwei (oder mehr) DTDs enthalten.
Doch genau dazu, viel mehr steckt da nicht dahinter! Es ist ein notwendiges Konzept, geht aber vielen nicht weit genug und es hat deswegen auch eine Menge Kritik gegeben. Aber Namespaces werden nun allseitig unterstützt und sind fester Bestandteil von DOM2 und SAX2. Sie sind z.B. unerläßlich geworden durch die Mischung von verschiedenen XML-Sprachen wie XML, XSLT, XML-Schema und auch zunehmend und v.a. Dingen im Datenaustausch-Bereich.
Wenn man z.B. sicher sein könnte, dass Elementnamen wie <sort>, <if> usw. in keinem XML-Dokument der Welt vorkommen könnten, wäre es unnötig in einem XSLT-Stylesheet jedesmal xsl:sort zu schreiben, damit der XSLT-Prozessor erkennt, dass er dies als Anweisung zu verstehen hat, und nicht das Element 1:1 in den Ergebnisbaum schreiben soll.
Ist das nicht eher ein "Seiteneffekt".
Nein, es ist vielmehr die einzige Funktion von Namensräumen. Anders formuliert: kannst du sicher sein, keine Namenskonflikte zu erwarten, dann brauchst du streng genommen auch keine Namensräume. OK, mag ja sein, dass du aus irgendeinem Grund deine Elemente und Atribute trotzdem in einer Form markieren willst, die sie voneinander abgrenzen. Aber dann grenzt du zwei Namensräume ab, die in keinerlei Verbindung zu einer DTD stehen.
Ich dachte immer es gehe mehr darum, die logische Zugehörigkeit eines Elements zu einem Schema auszudrücken.
Eben nicht. Es wird die Zugehörigkeit zu einem NAMENSRAUM ausgedrückt.
Wenn etwa zwei Geschäftspartner sich in XML unterhalten, dass zu jeder Zeit klar ist, was ein Element "bedeutet". In welchem "Kontext" es gesehen werden muss? Da es entweder in seinem eigenen, dem Schema des Partners, z.b.: vf, oder einem Allgemeingültigen Dritt-Schema (z.b. 'erf') definiert ist.
Hm, Semantik, Bedeutung, schwer zu sagen. Wirkliche Bedeutung verstehen Anwendungen auch mit XML nicht. Sie verstehen nur das, was auch in der Anwendung "reincodiert" ist, meist also eine Zuordnung von Element- oder Attributnamen zu "Aktionen". Erst wenn die Tagnamen gleich sind kommt es zu Missverständnissen. Und da helfen eben XML-Namensräume.
Ich denke ein Großteil der Verwirrung im Feld Namensräume resultiert aus der Tatsache, dass man immer irgendwie mehr dahinter vermutet. Faktum ist, dass mittels einer Namensraum-Deklaration lediglich ein eindeutiger Bezeichner für Elemente und Attribute festgelegt wird (nicht für Entities und Verarbeitungsanweisungen). Damit hat man die Möglichkeit eine Kollektion von Elementen und Attributen einem Namensraum (nicht einem Schema!) zuzuordnen. Das Validierungskonzept (und damit auch die DTDs) von XML bleiben davon unberührt. Daher muss man ja oben Beschriebenes beachten.
Beispielsweise! Der Sinn hinter den Namespaces stellt sich mir hier nicht so sehr, dass keine Namen doppelt vorkommen, sondern eher dass der Parser die Elemente, Attribute, und deren Werte auf ihre Richtigkeit prüfen kann. Da stellt sich mir eigentlich nur die Frage: Holen sich die Parser ein (mit xmlns) eingebundenes Schema von der angegebenen URL? Validieren sie es? Laut deinem Posting tun sie das, wenn ich richtig gelesen habe.
Nein, auch wenn sich das mancher wünschen mag! Die URL als Form eines URI ist lediglich ein eindeutiger Bezeichner. Bei XML-Schema kannst du jedoch mehrere Ziel-Namensräume angeben und da wird dann im Grunde das Namensraumkonzept stillschweigend (aber mit gutem Grund) umgangen. Aber das ist eben XML-Schema, nicht XML + DTD (also "plain" XML).
In diesem Zusammenhang interessant: http://www.openhealth.org/RDDL/
Gruß
Franz