W3C規格解説
Namespaces in XML(名前空間)
(株)日本ユニテック
青木 秀起
「Namespaces in XML」(名前空間)とは、タグの重複を避け、さまざまなアプリケーションで使用する要素や属性を混在できるようにする仕組みです。1999年1月14日に勧告となり(http://www.w3.org/TR/REC-xml-names/)、JIS
TR X 0023としてJIS化されています。1.1版が2002年12月18日に勧告候補となっています(http://www.w3.org/TR/xml-names11/)。
名前空間が開発された背景
1つのXMLデータに複数のDTDで定義された要素型や属性名を使用したいとしましょう。たとえば、マニュアルを表すXMLデータを考えてみましょう。
マニュアルDTDでマニュアル名を表すtitleタグと、著者DTDで著者の肩書きを表すtitleタグと重複してしまっています。これではタグの名前が同じなのでどちらのアプリケーションが処理を担当すればよいのかわからなくなってしまいます。このような名前の重複を防ぐために、要素型や属性名がどのDTDに属するものかを区別するための仕組み、名前空間が開発されました。あるアプリケーションで使用する要素型と属性名の集合を名前空間と呼びます。
名前空間の書き方
名前空間は、要素型や属性名の頭に、使用する名前空間を表す接頭辞を付けることによって識別されます。
【名前空間に属する要素型/属性名の書き方】
名前空間接頭辞:ローカル名(名前空間内の要素型,属性名) |
そしてその接頭辞はURIと結び付けられています。名前空間は、次のように何らかの要素の開始タグの中で特別な属性を指定することによって宣言します。
【名前空間の宣言の書き方】
①<要素型 xmlns:名前空間接頭辞 = "URIで表現された名前空間名">
または
②<要素型 xmlns="URIで表現された名前空間名">
|
URIは、スキーマの実際の置き場所を表すのではなく、固有の名前を確保するために使用されているIDのようなものであることに注意してください。マニュアルを表すXMLデータを名前空間を使って記述すると次のようになります。
title要素はそれぞれ、m:title要素とa:title要素と接頭辞を付けられて区別されます。"
m:"と"a:"については、ぞれぞれルート要素で、
xmlns:m="http://www.utj.co.jp/dtd/manual"
xmlns:a="http://www.utj.co.jp/dtd/author"
という属性指定があります。これは、"m:"や"a:"のついた要素や属性は、それぞれのURIで示される名前空間に属することを示しています。このように、XMLインスタンスで使用する要素や属性の名前空間を宣言することを名前空間宣言といいます。また、要素名や属性名につける"m:"や"a:"のことを名前空間接頭辞といいます。
【名前空間の宣言の書き方】の②は、デフォルトの名前空間と呼ばれるものです。XMLデータのほとんどの要素型が属する名前空間の名前空間接頭辞を書くのは面倒であり、実際に手でタグを書かないにしても、データ量が大幅に増えてしまいます。このような冗長さをなくすためにデフォルトの名前空間が用意されています。デフォルト名前空間を使えば、入力の手間やデータ容量が大分省けます。
名前空間宣言は、どの要素でも行えますが、その名前空間に属する要素よりも上位で行なわれていなければなりません。したがって、該当の要素より上位であれば参照する場所でその都度名前空間を宣言しても、一括して最上位要素で宣言してしまってもよいわけですが、一般的にはルート要素で行うのが望ましいでしょう。局所的に名前空間を宣言することもできますが、そのような部分が何度も出てくる場合、同じ宣言を何度も書かなければならず、アプリケーションも名前空間の認識をし直さなければならず効率的ではないからです。
また、名前空間では上書きが許可されています。上位の要素で宣言したのと同じ名前空間接頭辞を下位の要素で別の名前空間に割り当てると、上書きされて下位の名前空間が適用されます。したがって、名前空間を頻繁に使用する場合、混乱を防ぐため、統一した名前空間接頭辞を使用する必要があります。
グローバル属性とは?
XML 1.0のDTDでは、属性は特定の要素型に従属していました。しかし、属性の中には、複数の要素型に共通して指定される属性があります。たとえば、
●ファイルを指定する属性"src"
<fig src=" http://www.utj.co.jp/dtd/memo"/>
●データの型を指定する"type"
<price type="num">
これらは従来、使いたい要素すべてに対する属性リスト宣言でいちいち指定しなければならず、非常に冗長な作業でした。
<!ATTLIST fig src CDATA #IMPLIED >
<!ATTLIST artwork src CDATA #IMPLIED >
・・・・・・
名前空間では、これら「どこでも使える」属性を、必ず名前空間接頭辞を付けて使用することを許しています。グローバル属性は特定の要素から独立して、あらゆる要素に対して適用することができます。
(グローバル属性の書き方)
・・・・・・
<p>下図に昨年度営業実績表を示す。</p>
<fig gen:src=" http://www.utj.co.jp/sales/tsales2001"/>
・・・・・・
したがって、属性の書き方は2種類に分類されます。
●ローカル属性:指定された要素に従属
●グローバル属性:どこでも使える属性
ただし、このグローバル属性をどのように定義するかはそれぞれのスキーマ規格によることとなります。
最後に
名前空間のおかげで、1つのXMLデータ中にSVGやMathMLなどさまざまな種類のデータを混在できるようになりました。名前空間の開発によってXMLデータの幅が広がったといえるでしょう。
関連サービス
標準化仕様の動向調査
最新動向を伝えるDXメールニュース
(無料)
|