XMLを勉強していて、こんな風に思ったことありませんか?
「xmlns=”http://www.w3.org/1999/xhtml” って、一体何なの?」
「このURLにアクセスしても意味ないのに、なんでURL形式なの?」
「名前空間って結局何のためにあるの?」
実は、XML名前空間のURLは、私たちが普段使っているWebページのURLとは全く違う役割を持っています。今回は、XML名前空間とURLについて、初心者の方でもわかりやすく解説していきます!
そもそもXML名前空間って何?
名前空間が必要な理由
XMLでは、自分で好きなタグ(要素)を作ることができます。これはXMLの大きな特徴ですが、同時に問題も生み出します。
例えば、こんな状況を考えてみてください。
<table>
<tr>
<td>りんご</td>
<td>バナナ</td>
</tr>
</table>
<table>
<name>アフリカンコーヒーテーブル</name>
<width>80</width>
<length>120</length>
</table>
上の例では、<table>という同じ名前のタグが2回登場しています。でも、1つ目はHTMLの「表」を意味していて、2つ目は「家具のテーブル」を意味しています。
このままでは、XMLを処理するプログラムが「どっちのtableなの?」と混乱してしまいます。
これを解決するのが名前空間です!
名前空間で区別する方法
名前空間を使うと、同じ名前のタグでも明確に区別できるようになります。
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>りんご</h:td>
<h:td>バナナ</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="https://www.example.com/furniture">
<f:name>アフリカンコーヒーテーブル</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
h:とf:というプレフィックス(接頭辞)を付けることで、それぞれのタグがどの名前空間に属しているかがわかるようになりました。
名前空間のURLの正体:実はただの識別子!
URLは「場所」じゃなくて「名前」
ここが一番重要なポイントです。
名前空間のURLは、Webページのアドレスではありません。ただの識別子(ID)です。
xmlns="http://www.w3.org/1999/xhtml"
このURLを見ると、「ブラウザでアクセスしたら何か見られるのかな?」と思いがちですが、実際にはアクセスする必要はありません。
W3C(XMLの標準化団体)の仕様書でも、こう書かれています:
名前空間名は、一意性と永続性を持つべきである。スキーマを取得するための直接的な手段として使われることを目的としていない。
つまり、「他と絶対に被らない名前」であることが大事なのであって、実際にそのURLにアクセスできるかどうかは関係ないんです。
なぜURL形式が使われるのか?
「識別子なら、もっとシンプルな文字列でいいんじゃない?」と思いますよね。
実は、URL形式が使われる理由はとても実用的です。
理由1:ドメイン名は世界で唯一無二
インターネットのドメイン名(example.com など)は、世界中で重複しないように管理されています。
自分が管理しているドメインを使えば、他の誰かと名前が被る心配がありません。
例えば:
- W3Cは
http://www.w3.org/~を使う - あなたの会社が
example.comを持っていればhttp://example.com/~を使う
これで、世界中のどこの誰が作った名前空間とも絶対に衝突しません。
理由2:長い歴史と慣習
XMLが作られた1990年代後半、インターネット上でリソースを識別するための仕組みとして、URLやURIが広く使われていました。
「識別子として何を使おう?」という議論の結果、多くの人が馴染みのあるURL形式が採用されたんです。
理由3:ドキュメントを置くこともできる(オプション)
必須ではありませんが、名前空間のURLに実際にスキーマ(XMLの構造定義)やドキュメントを置いておくこともできます。
例えば、W3Cの名前空間URLにアクセスすると、実際にXHTMLの説明が見られます。これは便利ですが、必須ではありません。
URIとURL、URNの違い
技術的には、名前空間で使われるのは「URI」と呼ばれるものです。
3つの用語の関係
URI(Uniform Resource Identifier)
- リソースを識別するための文字列の総称
- URLとURNを含む上位概念
URL(Uniform Resource Locator)
- リソースの「場所」を示すURI
- 例:
http://www.w3.org/1999/xhtml
URN(Uniform Resource Name)
- リソースの「名前」を示すURI
- 例:
urn:isbn:978-4-1234-5678-9
実際には、ほとんどの名前空間でURL形式(http://~)が使われていますが、URN形式を使うこともできます。
XML名前空間の基本的な使い方
方法1:プレフィックス付き名前空間
一番基本的な使い方です。
<root xmlns:prefix="http://example.com/namespace">
<prefix:element>内容</prefix:element>
</root>
構文の説明:
xmlns:– 名前空間を宣言する予約語prefix– 好きな名前(プレフィックス)http://example.com/namespace– 名前空間URI
方法2:デフォルト名前空間
プレフィックスを省略したい場合は、デフォルト名前空間を使います。
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<p>プレフィックスなしでも名前空間に属しています</p>
</body>
</html>
xmlns=(コロンなし)で宣言すると、プレフィックスがない要素はすべてその名前空間に属します。
方法3:複数の名前空間を混在させる
1つのXML文書で複数の名前空間を使うこともできます。
<root xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:math="http://www.w3.org/1998/Math/MathML">
<html:p>これはHTMLの段落です</html:p>
<math:math>
<math:mrow>
<!-- 数式 -->
</math:mrow>
</math:math>
</root>
名前空間の有効範囲(スコープ)
名前空間は、宣言された要素とその子孫要素で有効です。
<root>
<!-- ここでは名前空間なし -->
<section xmlns="http://example.com/section">
<!-- ここから名前空間が有効 -->
<title>タイトル</title>
<content>内容</content>
</section>
<!-- ここでは名前空間は無効に戻る -->
</root>
デフォルト名前空間の上書き
子要素で別の名前空間を宣言すると、その部分では新しい名前空間が有効になります。
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- デフォルト名前空間:XHTML -->
<body>
<p>これはXHTML</p>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<!-- ここからデフォルト名前空間:MathML -->
<mrow>数式</mrow>
</math>
<!-- デフォルト名前空間はXHTMLに戻る -->
<p>これもXHTML</p>
</body>
</html>
よく使われる名前空間の例
実際のWeb開発でよく見かける名前空間を紹介します。
XHTML
xmlns="http://www.w3.org/1999/xhtml"
HTMLをXMLとして記述する際の名前空間です。
XML Schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
XMLの構造を定義するスキーマで使われます。
SVG(ベクター画像)
xmlns="http://www.w3.org/2000/svg"
SVG画像の定義で使われる名前空間です。
RSS
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
RSSフィードで使われる名前空間です。
sitemap.xml
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
検索エンジン向けのサイトマップで使われます。
SOAP(Webサービス)
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
SOAPプロトコルで使われる名前空間です。
名前空間の実践的なポイント
ポイント1:プレフィックスは自由に決められる
プレフィックス自体は任意の名前でOKです。重要なのは、それが指している名前空間URIです。
<!-- これらは全て同じ意味 -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<schema:schema xmlns:schema="http://www.w3.org/2001/XMLSchema">
ただし、わかりやすさのために、一般的なプレフィックス(xsd、html など)を使うのがおすすめです。
ポイント2:大文字・小文字は区別される
名前空間URIは、文字列として完全一致で比較されます。
<!-- これらは異なる名前空間として扱われる -->
http://example.com/namespace
![]()
Example Domain
![]()
Example Domain
ポイント3:末尾のスラッシュも区別される
<!-- これらも異なる名前空間 -->
http://example.com/namespace
![]()
Example Domain
ポイント4:相対URIは非推奨
相対パスは使わず、常に絶対URIを使いましょう。
<!-- NG:相対URI -->
<root xmlns="./namespace">
<!-- OK:絶対URI -->
<root xmlns="http://example.com/namespace">
属性と名前空間の特別なルール
要素とは違い、属性には特別なルールがあります。
属性はデフォルト名前空間に属さない
<root xmlns="http://example.com/ns">
<!-- この要素は名前空間に属する -->
<element attr="value">
<!-- この要素も名前空間に属する -->
<!-- でも、attr属性は名前空間に属さない! -->
</element>
</root>
属性を名前空間に属させたい場合は、明示的にプレフィックスを付ける必要があります。
<root xmlns="http://example.com/ns"
xmlns:attr="http://example.com/attr-ns">
<element attr:name="value">
<!-- attr:name は名前空間に属する -->
</element>
</root>
実際の開発での活用例
例1:HTMLとSVGを混在させる
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1>グラフィックの例</h1>
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
<p>円を表示しました</p>
</body>
</html>
例2:独自の拡張データを追加
<product xmlns="http://example.com/products"
xmlns:custom="http://example.com/custom">
<name>ノートPC</name>
<price>150000</price>
<!-- 独自の拡張情報 -->
<custom:warranty>3年保証</custom:warranty>
<custom:color>シルバー</custom:color>
</product>
よくある質問
Q1:名前空間のURLにアクセスしても何も表示されませんが、問題ないですか?
はい、全く問題ありません。名前空間URIは識別子であって、アクセスするためのアドレスではありません。
一部の組織(W3Cなど)は親切にドキュメントを置いていることもありますが、必須ではありません。
Q2:名前空間URIは自分で好きに決めていいの?
はい、好きに決められます。ただし、以下の点に注意してください:
- 自分が管理しているドメインを使う(他人のドメインは使わない)
- 一度決めたら変更しない(永続性が重要)
- わかりやすく意味のあるURIにする
Q3:プレフィックスなしで使うことはできますか?
はい、デフォルト名前空間を使えばプレフィックスなしで使えます。
<html xmlns="http://www.w3.org/1999/xhtml">
<body>プレフィックス不要</body>
</html>
Q4:名前空間は必ず使わないといけないの?
いいえ、必須ではありません。シンプルなXMLなら名前空間なしでも大丈夫です。
ただし、以下の場合は名前空間を使うべきです:
- 複数のXML言語を混在させる
- 標準化された形式(XHTML、SVG、RSSなど)を使う
- 他の人と共有するXMLを作る
Q5:urn:で始まる名前空間もありますが、これは何ですか?
urn:はURN形式の名前空間です。URLとは違い、場所ではなく名前を示します。
xmlns="urn:isbn:978-4-1234-5678-9"
どちらを使っても問題ありませんが、http://形式の方が一般的です。
Q6:XMLパーサーは名前空間URLの内容を取得するの?
いいえ、取得しません。XMLパーサーは名前空間URIを単なる文字列として扱い、完全一致で比較するだけです。
まとめ
XML名前空間とURLについて、重要なポイントをおさらいしましょう。
XML名前空間の役割:
- 同じ名前の要素・属性を区別する
- 複数のXML言語を混在させられる
- 世界中で一意な識別子を提供
名前空間URLの本質:
- 実際にアクセスするアドレスではなく、ただの識別子
- ドメイン名の一意性を利用して衝突を防ぐ
- 文字列として完全一致で比較される
基本的な使い方:
xmlns:プレフィックス="URI"でプレフィックス付き名前空間を宣言xmlns="URI"でデフォルト名前空間を宣言- 要素名の前に
プレフィックス:を付けて使う
XML名前空間は最初は難しく感じるかもしれませんが、「URLは場所じゃなくて名前」ということを理解すれば、ぐっとわかりやすくなります。
XHTML、SVG、RSSなど、多くのWeb技術で名前空間が使われているので、ぜひマスターしてくださいね!

コメント