Eine Einführung in Namespaces
Teile der Dokumentation des Moduls Qt XML setzen voraus, dass Sie mit XML-Namespaces vertraut sind. Hier wird eine kurze Einführung gegeben; wenn Sie dieses Material bereits kennen, können Sie zu den Konventionen der DokumentationQt XML übergehen.
Namespaces sind ein Konzept, das in XML eingeführt wurde, um ein modulareres Design zu ermöglichen. Mit ihrer Hilfe kann Datenverarbeitungssoftware Namenskonflikte in XML-Dokumenten leicht auflösen.
Betrachten Sie das folgende Beispiel:
<document> <book> <title>Practical XML</title> <author title="Ms" name="Eris Kallisti"/> <chapter> <title>A Namespace Called fnord</title> </chapter> </book> </document>
Hier finden wir drei verschiedene Verwendungen des Namens title. Wenn Sie dieses Dokument bearbeiten wollen, werden Sie auf Probleme stoßen, da jeder der Titel auf unterschiedliche Weise angezeigt werden soll - obwohl sie denselben Namen haben.
Die Lösung wäre, das erste Vorkommen von title als Buchtitel zu identifizieren, d. h. das title-Element eines Buchnamensraums zu verwenden, um es z. B. vom Kapiteltitel zu unterscheiden, z. B:
<book:title>Practical XML</book:title>
book ist in diesem Fall ein Präfix, das den Namespace bezeichnet.
Bevor wir einen Namespace auf Element- oder Attributnamen anwenden können, müssen wir ihn deklarieren.
Namespaces sind URIs wie http://www.example.com/fnord/book/. Das bedeutet nicht, dass die Daten unter dieser Adresse verfügbar sein müssen; der URI wird einfach dazu verwendet, einen eindeutigen Namen zu vergeben.
Wir deklarieren Namespaces auf die gleiche Weise wie Attribute; streng genommen sind sie Attribute. Um beispielsweise http://www.example.com/fnord/ zum Standard-XML-Namensraum des Dokuments xmlns zu machen, schreiben wir
xmlns="http://example.com/fnord/"
Um den Namespace http://www.example.com/fnord/book/ vom Standard-Namespace zu unterscheiden, müssen wir ihn mit einem Präfix versehen:
xmlns:book="http://example.com/fnord/book/"
Ein so deklarierter Namensraum kann auf Element- und Attributnamen angewendet werden, indem das entsprechende Präfix und ein ":"-Trennzeichen vorangestellt werden. Wir haben dies bereits bei dem Element book:title gesehen.
Elementnamen ohne Präfix gehören zum Standard-Namensraum. Diese Regel gilt nicht für Attribute: Ein Attribut ohne Präfix gehört zu keinem der deklarierten XML-Namensräume. Attribute gehören immer zu dem "traditionellen" Namensraum des Elements, in dem sie vorkommen. Ein "traditioneller" Namensraum ist kein XML-Namensraum, er bedeutet lediglich, dass alle Attributnamen, die zu einem Element gehören, unterschiedlich sein müssen. Später werden wir sehen, wie man einem Attribut einen XML-Namensraum zuweist.
Da sich Attribute ohne Präfixe in keinem XML-Namensraum befinden, gibt es keine Kollision zwischen dem Attribut title (das zum Element author gehört) und z. B. dem Element title innerhalb eines Kapitels.
Verdeutlichen wir dies anhand eines Beispiels:
<document xmlns:book = 'http://example.com/fnord/book/' xmlns = 'http://example.com/fnord/' > <book> <book:title>Practical XML</book:title> <book:author xmlns:fnord = 'http://example.com/fnord/' title="Ms" fnord:title="Goddess" name="Eris Kallisti"/> <chapter> <title>A Namespace Called fnord</title> </chapter> </book> </document>
Innerhalb des Dokument-Elements sind zwei Namensräume deklariert. Der Standard-Namensraum http://www.example.com/fnord/ gilt für das book-Element, das chapter-Element, das entsprechende title-Element und natürlich für document selbst.
Die Elemente book:author und book:title gehören zum Namespace mit dem URI http://www.example.com/fnord/book/.
Den beiden book:author-Attributen title und name ist kein XML-Namespace zugewiesen. Sie sind nur Mitglieder des "traditionellen" Namespace des Elements book:author, was bedeutet, dass z.B. zwei title-Attribute in book:author verboten sind.
Im obigen Beispiel umgehen wir die letzte Regel, indem wir ein title-Attribut aus dem http://www.example.com/fnord/-Namensraum zu book:author hinzufügen: der fnord:title stammt aus dem Namensraum mit dem Präfix fnord, der im book:author-Element deklariert ist.
Offensichtlich hat der fnord-Namensraum denselben Namespace-URI wie der Standard-Namensraum. Warum haben wir also nicht einfach den Standard-Namensraum verwendet, den wir bereits deklariert hatten? Die Antwort ist recht komplex:
- Attribute ohne Präfix gehören zu keinem XML-Namespace, auch nicht zum Standard-Namespace;
- zusätzlich würde das Weglassen des Präfixes zu einem title-title clash führen;
- Wenn man es als xmlns:title schreibt, wird ein neuer Namespace mit dem Präfix title deklariert, anstatt den Standard-Namespace xmlns anzuwenden.
Mit den Qt XML Klassen kann auf Elemente und Attribute auf zwei Arten zugegriffen werden: entweder durch Bezugnahme auf ihre qualifizierten Namen, die aus dem Namespace-Präfix und dem "echten" Namen (oder lokalen Namen) bestehen, oder durch die Kombination aus lokalem Namen und Namespace-URI.
Weitere Informationen zu XML-Namespaces finden Sie unter http://www.w3.org/TR/REC-xml-names/.
In der Dokumentation Qt XML verwendete Konventionen
Die folgenden Begriffe werden verwendet, um die Teile von Namen im Kontext von Namespaces zu unterscheiden:
- Der qualifizierte Name ist der Name, wie er im Dokument erscheint. (Im obigen Beispiel ist book:title ein qualifizierter Name.)
- Ein Namespace-Präfix in einem qualifizierten Namen ist der Teil links vom ":"(book ist das Namespace-Präfix in book:title.)
- Der lokale Teil eines Namens (auch als lokaler Name bezeichnet) erscheint rechts vom ":". (So ist title der lokale Teil von book:title.)
- Der Namespace URI ("Uniform Resource Identifier") ist ein eindeutiger Bezeichner für einen Namespace. Er sieht aus wie eine URL (z. B. http://www. example.com/fnord/ ), erfordert aber nicht, dass die Daten über das angegebene Protokoll unter der genannten Adresse zugänglich sind.
Elemente ohne ":" (wie chapter im Beispiel) haben kein Namespace-Präfix. In diesem Fall sind der lokale Teil und der qualifizierte Name identisch (z. B. chapter).
Siehe auch DOM Bookmarks Application.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.