この連載の第2回では,「XMLにより,さまざまな新しい応用言語を作成できる」といった内容に触れた。そしてこのことに深く関係しているのがXML名前空間である。XMLでは,さまざまな応用言語を常に確実に識別できるための仕組みとして,XML名前空間を定めている。

■ XML名前空間の必要性

 XMLでは,新しい応用言語を作成することができる。新しい応用言語を作るベースになるのが,要素名を決めることだ。名前は自由に決めることができるので,普通は要素名として要素の内容を表す分かりやすい単語を名前にする。例えばtitle要素や,item要素である。ただ,このようにありふれた要素名を付けていくと,異なる応用言語を複数作成しても同じ要素名を使っていたりする。そうなると,もはや要素名だけで,それがどの応用言語の要素なのか識別できない。そこで要素名を必ず名前空間とセットにして扱う。名前空間を一意に宣言することにして,その名前空間から応用言語の違いを識別するわけだ。これがXML名前空間の必要性である。そしてXML名前空間も標準文書が公開されている。

 例えばXHTML 1.0では,その名前空間を「http://www.w3.org/1999/xhtml」と定めているので,「http://www.w3.org/1999/xhtml」名前空間のtitle要素は「XHTML 1.0」で定められたtitle要素であることが分かる。また同様に,「http://purl.org/rss/1.0/」名前空間のtitle要素は「RSS 1.0」で定められたtitle要素であることが分かる。応用言語が異なるということは,同じ要素名であってもそれが意図している意味がまったく異なる。XHTML 1.0でのtitle要素はXHTML文書全体のタイトルを意味し,RSS 1.0でのtitle要素はRSSデータ内のチャンネルと呼ばれるブロックのタイトルを意味する。

■ 名前空間を表す文字列

 名前空間を表す文字列(「http://www.w3.org/1999/xhtml」や「http://purl.org/rss/1.0/」)は,一般にURL形式で記述される。この記述は,あくまでも名前空間名が他と重複しないための表記法として用いられているだけであり,実際のURLとは特に関係がない。名前空間として示されている実際のURLに何らかのリソースを置く必要もないし,XML文書処理中にXMLプロセッサがそのURLにアクセスするわけでもない。URLによる表記法は文字列を一意に宣言するために都合がよい。URLにはドメイン名が含まれ,それにより何らかの団体もしくは会社組織などを識別することができる。そしてドメイン名以下を「/」で区切りながら名前空間名を構成し,最終的にドメイン配下で文字列が重複しなければ,その名前空間名は他と重複しない。名前空間は,それが他と重複しないことによってうまく機能する。

 なお,名前空間名の表記法としてはURNによる記述も可能だ。URNでは「urn:infoteria:example」などのように,「:」で区切りながら名前空間名を構成する。

■ 名前空間の具体例

図1 アップルコンピュータが公開しているRSSデータ

[画像クリックで拡大表示]
 前回までXML文書の一例として取り上げてきたアップルコンピュータによるトップテンソングデータは,RSS 2.0形式で記述されている。実はRSS 2.0は,以前のバージョン(RSS 0.91,0.92)と互換性があるため,その名前空間を定めていない(前述のRSS 1.0はRSS 2.0とは系列が異なり,互換性がない)。ただしRSS 2.0文書内で名前空間を伴った要素を記述することはでき,それによりRSS 2.0文書を拡張することができる。具体的に見てみよう。

 図1はアップルコンピュータが公開しているRSSデータ(XML文書)である。このXML文書を見れば,どの要素がどの名前空間で修飾されているかがすぐに判別できる。要素名に「:」が含まれていない要素は,名前空間で修飾されていない要素だ。それらはRSS 2.0で定義している要素である。そして要素名に「:」が含まれている要素は,名前空間で修飾されている要素だ。これらはRSS 2.0をベースに追加拡張された要素である。要素名の「:」より前の文字列を名前空間接頭辞と呼び,名前空間接頭辞は必ず上位で宣言(名前空間宣言)されている。これにより要素の名前空間が決まる。図1では,2行目と3行目の部分で,名前空間宣言が赤く表示されている。このXML文書中の要素の名前空間を識別すると,以下のようになる。

表1 XML文書の要素の名前空間

デフォルトの名前空間の宣言によって,名前空間接頭辞を使用せずに要素を名前空間で修飾する方法もあるが,このXML文書はデフォルトの名前空間は宣言していない

 これらの名前空間で修飾された要素はRSS 2.0で定義されているわけではないが,RSS 2.0と組み合わせて記述することによって,RSSフィードの情報量を豊富にする(拡張する)ことができる。図1の(1)~(3)は,RSS 2.0やRSS 1.0などの個別のフォーマットに依存せず,一般的にメタデータ(データを説明するデータ)を記述するための要素として定められたものである。そして図1(4)はアップルコンピュータが定めた名前空間であり,音楽情報を記述するためにアップルコンピュータが定めた要素である。

 このように,XMLでは名前空間を使用することによって,ベースの言語をさらに拡張できる。そして,それを処理するプログラムは,プログラムから処理できる要素のみを処理すればよいので,余分な要素が含まれていても問題にならない。アップルコンピュータによるトップテンソングのRSSデータでは,図1(4)の要素は,アップルコンピュータのiTunesではデータを処理できるが,一般的なRSSリーダーでは処理できない。一般的なRSSリーダーは,RSS 2.0で定義された要素など,自分が処理できる要素だけを処理する。

 一般にXML(Extensible Markup Language)は,使用する要素名を自分で決めることができる点で拡張可能(Extensible)と言われるが,名前空間の機能を併用することで,実用的な拡張性を実現できるのだ。

木村 達哉
インフォテリア 教育部
インフォテリア認定教育センターの運営や,XML技術者認定制度のXMLマスターに対応したコーステキストの開発などに携わる。XMLは,何となく知っているようでもそれを正しく扱うためにはなかなか奥が深いもの。そんなXMLへの入口を紹介します。