このページでは

名前空間の概要

Qt XML モジュールのドキュメントの一部では、XMLネームスペースに関する知識があることを前提としています。ここではその概要を簡単に紹介します。すでにこの内容をご存知の場合は、「Qt XML のドキュメント規約」のセクションへ進んでください。

名前空間は、よりモジュール化された設計を可能にするためにXMLに導入された概念です。名前空間を利用することで、データ処理ソフトウェアはXMLドキュメント内の命名上の競合を容易に解決することができます。

次の例を考えてみましょう:

<document>
<book>
  <title>Practical XML</title>
  <author title="Ms" name="Eris Kallisti"/>
  <chapter>
    <title>A Namespace Called fnord</title>
  </chapter>
</book>
</document>

ここでは、「title」という名前が3つの異なる用途で使用されています。このドキュメントを処理しようとすると、同じ名前であっても各タイトルは異なる方法で表示される必要があるため、問題が発生することになります。

解決策としては、最初に現れる「title」を書籍のタイトルとして識別する手段を設けることです。つまり、書籍の名前空間の「title」要素を使用して、例えば章のタイトルなどと区別するようにします。例えば:

<book:title>Practical XML</book:title>

この場合の「book」は、名前空間を示すプレフィックスです。

要素名や属性名に名前空間を適用するには、まずその名前空間を宣言する必要があります。

名前空間は、http://www.example.com/fnord/book/ のような URI です。これは、データがこのアドレスで利用可能でなければならないという意味ではなく、URI は単に一意の名前を提供するために使用されるものです。

名前空間は属性と同じ方法で宣言します。厳密に言えば、名前空間も属性の一種です。例えば、http://www.example.com/fnord/をドキュメントのデフォルトの XML 名前空間xmlnsとするには、次のように記述します。

xmlns="http://example.com/fnord/"

http://www.example.com/fnord/book/名前空間をデフォルトの名前空間と区別するには、プレフィックスを指定する必要があります:

xmlns:book="http://example.com/fnord/book/"

このように宣言された名前空間は、適切なプレフィックスと区切り文字「:」を先頭に付けることで、要素名や属性名に適用できます。これは、book:title要素の例ですでに確認しました。

プレフィックスのない要素名は、デフォルトの名前空間に属します。この規則は属性には適用されません。つまり、プレフィックスのない属性は、宣言されたどのXML名前空間にも属しません。属性は常に、それが現れる要素の「従来の」名前空間に属します。 「従来の」名前空間はXML名前空間ではありません。これは単に、1つの要素に属するすべての属性名が互いに異なる必要があることを意味します。属性にXML名前空間を割り当てる方法については、後で説明します。

プレフィックスのない属性はどのXML名前空間にも属さないため、author要素に属するtitle属性と、例えばchapter内の title要素との間で衝突は発生しません。

例を挙げて、これを明確にしましょう:

<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>

document要素内には、2つの名前空間が宣言されています。デフォルトの名前空間http://www.example.com/fnord/は、book要素、chapter要素、該当するtitle要素、そしてもちろんdocument自体にも適用されます。

book:author要素とbook:title要素は、URIhttp://www.example.com/fnord/book/ を持つ名前空間に属します。

book:author要素の2つの属性である titleとnameには、XML名前空間が割り当てられていません。これらはbook:author要素の「従来の」名前空間にのみ属しており、つまり、例えばbook:author要素内に2つのtitle属性を指定することは禁止されています。

上記の例では、http://www.example.com/fnord/名前空間のtitle属性をbook:author に追加することで、最後の規則を回避しています。fnord:titleは、book:author要素で宣言されている接頭辞fnordを持つ名前空間に由来します。

明らかに、fnord名前空間はデフォルトの名前空間と同じ名前空間 URI を持っています。では、なぜすでに宣言済みのデフォルトの名前空間を単に使用しなかったのでしょうか?その答えはかなり複雑です:

  • プレフィックスのない属性は、どのXML名前空間にも属しておらず、デフォルトの名前空間にも属しません。
  • さらに、プレフィックスを省略すると「title」という名称の競合が生じます;
  • これを `xmlns:title` と記述すると、デフォルトの`xmlns`名前空間を適用するのではなく、プレフィックス`title`を持つ新しい名前空間が宣言されてしまいます。

Qt XML クラスでは、要素や属性に2つの方法でアクセスできます。1つは、名前空間プレフィックスと「実名」(またはローカル名)で構成される修飾名を参照する方法、もう1つはローカル名と名前空間URIの組み合わせを参照する方法です。

XML名前空間に関する詳細情報は、http://www.w3.org/TR/REC-xml-names/ でご覧いただけます。

Qt XML のドキュメントで使用されている規約

名前空間の文脈において、名前の各部分を区別するために以下の用語が使用されます:

  • 修飾名は、ドキュメント内に表示される名のことです。(上記の例では、book:titleが修飾名です。)
  • 修飾名における名前空間プレフィックスとは、「:」の左側にある部分のことです。(book:title において、book が名前空間プレフィックスです。)
  • 名前のローカル部分(ローカル名とも呼ばれる)は、「:」の右側に現れる。(したがって、title は book:title のローカル部分である。)
  • 名前空間URI(「Uniform Resource Identifier」)は、名前空間を一意に識別する識別子です。URLのような形式(例:http://www.example.com/fnord/)をとりますが、指定されたプロトコルを通じて、そのアドレスにあるデータにアクセスできる必要はありません。

「:」を含まない要素(例におけるchapterなど)には、名前空間プレフィックスがありません。この場合、ローカル部分と修飾名は同一になります(つまりchapter となります)。

DOMブックマークアプリケーションも参照してください 。

© 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.