Eine Einführung in Namensräume
Teile der Dokumentation zum Modul „ Qt XML “ setzen voraus, dass Sie mit XML-Namensräumen vertraut sind. Hier finden Sie eine kurze Einführung; wenn Sie sich bereits mit diesem Thema auskennen, können Sie direkt zu den Dokumentationskonventionen unter „Qt XML “ springen.
Namensräume sind ein Konzept, das in XML eingeführt wurde, um einen modulareren Aufbau zu ermöglichen. Mit ihrer Hilfe kann Datenverarbeitungssoftware Namenskonflikte in XML-Dokumenten problemlos 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 verarbeiten möchten, werden Sie auf Probleme stoßen, da jeder der Titel auf unterschiedliche Weise dargestellt werden soll – obwohl sie denselben Namen haben.
Die Lösung bestünde darin, das erste Vorkommen von „title“ als Buchtitel zu kennzeichnen, d. h. das Element „title“ aus dem Namensraum „book“ zu verwenden, um es beispielsweise vom Kapitelüberschrift zu unterscheiden, z. B.:
<book:title>Practical XML</book:title>„book“ ist in diesem Fall ein Präfix, das den Namensraum kennzeichnet.
Bevor wir einen Namensraum auf Element- oder Attributnamen anwenden können, müssen wir ihn deklarieren.
Namensräume sind URIs wie beispielsweise http://www.example.com/fnord/book/. Das bedeutet nicht, dass Daten unter dieser Adresse verfügbar sein müssen; die URI dient lediglich dazu, einen eindeutigen Namen bereitzustellen.
Wir deklarieren Namespaces auf dieselbe Weise wie Attribute; streng genommen handelt es sich dabei um Attribute. Um beispielsweise http://www.example.com/fnord/ zum Standard-XML-Namespace des Dokuments ( xmlns) zu machen, schreiben wir
xmlns="http://example.com/fnord/"Um den Namensraum http://www.example.com/fnord/book/ vom Standardnamensraum zu unterscheiden, müssen wir ihm ein Präfix zuweisen:
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 „:“ als Trennzeichen vorangestellt werden. Dies haben wir bereits am 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 zum „traditionellen“ Namensraum des Elements, in dem sie vorkommen. Ein „traditioneller“ Namensraum ist kein XML-Namensraum; es 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 Attribute ohne Präfix keinem XML-Namensraum angehören, kommt es zu keiner Kollision zwischen dem Attribut „title“ (das zum Element „author“ gehört) und beispielsweise dem Element „title“ innerhalb eines Kapitels.
Lassen Sie uns dies anhand eines Beispiels verdeutlichen:
<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 „document“-Elements sind zwei Namespaces deklariert. Der Standard-Namespace „http://www.example.com/fnord/“ gilt für das „book“-Element, das „chapter“-Element, das entsprechende „title“-Element und natürlich für das Dokument selbst.
Die Elemente „book:author“ und „book:title“ gehören zum Namensraum mit der URI http://www.example.com/fnord/book/.
Den beiden Attributen „title“ und „name“ des Elements „book:author“ ist kein XML-Namensraum zugewiesen. Sie gehören lediglich zum „traditionellen“ Namensraum des Elements „book:author“, was bedeutet, dass beispielsweise zwei „title“-Attribute im Element „book:author“ nicht zulässig sind.
Im obigen Beispiel umgehen wir die letzte Regel, indem wir dem Element „book:author“ ein „title“-Attribut aus dem Namensraum „http://www.example.com/fnord/“ hinzufügen: Das Attribut „fnord:title“ stammt aus dem Namensraum mit dem Präfix „fnord“, der im Element „book:author“ deklariert ist.
Offensichtlich hat der fnord -Namensraum dieselbe Namensraum-URI wie der Standardnamensraum. Warum haben wir also nicht einfach den bereits deklarierten Standardnamensraum verwendet? Die Antwort ist recht komplex:
- Attribute ohne Präfix gehören überhaupt keinem XML-Namensraum an, nicht einmal dem Standard-Namensraum;
- außerdem würde das Weglassen des Präfixes zu einem Konflikt zwischen „title“ und „title“ führen;
- die Schreibweise „xmlns:title“ würde einen neuen Namensraum mit dem Präfix „title“ deklarieren, anstatt den Standard -xmlns- Namensraum anzuwenden.
Mit den „ Qt XML “-Klassen kann auf Elemente und Attribute auf zwei Arten zugegriffen werden: entweder durch Verweis 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-Namensräumen finden Sie unter http://www.w3.org/TR/REC-xml-names/.
In der Dokumentation zu „ Qt XML “ verwendete Konventionen
Die folgenden Begriffe werden verwendet, um die Bestandteile von Namen im Zusammenhang mit Namensräumen zu unterscheiden:
- Der qualifizierte Name ist der Name, wie er im Dokument erscheint. (Im obigen Beispiel ist „book:title“ ein qualifizierter Name.)
- Ein Namensraumpräfix in einem qualifizierten Namen ist der Teil links vom „:“. (In „book:title“ ist„book“ das Namensraumpräfix.)
- Der lokale Teil eines Namens (auch als lokaler Name bezeichnet) steht rechts vom „:“. (Somit ist „title“ der lokale Teil von „book:title“.)
- Die Namensraum-URI („Uniform Resource Identifier“) ist eine eindeutige Kennung für einen Namensraum. Sie sieht aus wie eine URL (z. B. http://www.example.com/fnord/ ), setzt jedoch nicht voraus, dass Daten über das angegebene Protokoll unter der genannten Adresse zugänglich sind.
Elemente ohne „:“ (wie „chapter“ im Beispiel) haben kein Namensraumpräfix. In diesem Fall sind der lokale Teil und der qualifizierte Name identisch (d. h. „chapter“).
Siehe auch DOM-Lesezeichen-Anwendung.
© 2026 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.