本文へスキップ
BecomeCoder

XMLコース · 第4章 発展と実例 · レッスン9

名前空間 ― タグ名の衝突を防ぐ「所属」

ブラウザで完結

導入

複数の異なるXMLを1つの文書に混ぜると、同じタグ名がぶつかることがあります。たとえば「HTML<title>」と「本の <title>」が同じ文書に現れたら、どちらの意味か区別できません。これを解決するのが 名前空間(namespace) です。

説明

名前空間は、タグに「どのグループに属するタグか」という 所属 を与える仕組みです。xmlns(XML NameSpace)属性でURI(識別用の文字列)を宣言し、タグ名の前に 接頭辞(プレフィックス) を付けて区別します。

<root xmlns:book="http://example.com/book"
      xmlns:html="http://www.w3.org/1999/xhtml">
  <book:title>吾輩は猫である</book:title>
  <html:title>ページのタイトル</html:title>
</root>

ここでは book:html: という接頭辞で、同じ title でも別物だと区別しています。ポイントは次のとおりです。

  • xmlns:接頭辞="URI" で接頭辞を宣言し、以降 接頭辞:タグ名 の形で使う。
  • URIは「ただの識別子」。Webページとして開ける必要はなく、世界で重複しない名前としてURL形式を借りているだけです(アクセスして何かが表示されるとは限りません)。
  • 接頭辞を付けず、xmlns="URI"(接頭辞なし)と書くと、その要素と子孫の 既定の名前空間 になります。
<!-- 既定の名前空間:この中のタグはすべて svg に属する -->
<svg xmlns="http://www.w3.org/2000/svg">
  <circle cx="50" cy="50" r="40" />
</svg>

名前空間は最初は難しく感じますが、「タグに苗字を付けて、同名でも家系を区別する仕組み」とイメージすると分かりやすくなります。SVGやOfficeファイルなど、実世界のXMLでは頻繁に登場します。

やってみよう

xmlns という単語を見たら「ここで名前空間を宣言しているな」と読めれば十分です。自分で複雑な名前空間を設計する場面は多くありませんが、実物のXMLを読むときに必ず出てくるので、形だけ覚えておきましょう。

実際に動かしてみよう

下のエディタに XML を書くと、右側にその場で「整形式(well-formed)かどうかの判定」と「木構造ツリー」が表示されます(ブラウザ標準のXMLパーサを使うので、タグの閉じ忘れ・大文字小文字違い・ルート要素が2つ・入れ子の交差などは本物どおりエラーになります)。下の XPath 欄に式(例 `//title`)を入れると、一致したノードを一覧できます。本文の例を打ち込んだり書き換えたりして確かめましょう。

XML — 整形式チェック & 木構造プレビュー

書いた XML をその場で解析し、整形式(well-formed)かどうかの判定・木構造ツリー・XPath検索を表示する学習用ウィジェットを読み込みます(ブラウザ標準のXMLパーサ/XPathを使うため外部依存なし・軽量です)。
スクロールして表示された時点でも自動で読み込まれます。