導入
複数の異なる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を読むときに必ず出てくるので、形だけ覚えておきましょう。