目次へ

7. Namespace

本章では、Namespaceについて解説します。Namespaceとはなにか、その意義と構文などを記述します。

7.1 Namespaceの意義

XMLが現在、不可欠な技術になろうとしているひとつの要因が、XMLがメタ言語であるということです。XMLでは、利用形態に従い、言語の拡張を行うことができます。XMLが普及し、XMLにより作成された言語が複数できた場合、一から言語を作成するのではなく、既存の言語のタグを使用したい場合があります。ところが、複数の言語の利用を行う場合、要素名や属性名の重複や衝突が問題になります。以下に例を示します。

image

<paper>
	<title>連続曲線箱桁の解法</title> 
	<author> 
		<name>後藤茂夫</name> 
		<title>教授</title> 
	</author>
</paper>

上の文章は、論文の情報を記述したものです。author情報の記述は、既存の人物情報を記述する言語により、記述したとします。既存の言語をモジュールとして再利用したのです。しかし、問題があります。上の例では、2つのtitleタグが存在しますが、それぞれ違う意味で使用しています。2行目の例では、titleを論文の題名として使用していますが、5行目のtitleは肩書きを意味します。上記の文章を処理するアプリケーションは、2つのtitle要素の違いを認識できません。

以上のようにXMLで作成した言語を、モジュール化して再利用しようとした場合、要素や属性の名前が重複していると、うまく処理できません。けれども、それぞれの要素がどのDTDで定義されているのか、指定することができれば、ひとつのXML文書の中に、複数のDTDで定義されたタグを混在させることができそうです。

Namespaceはこのような動機から生まれた考え方です。つまり、それぞれの言語に対して「日本語」や「英語」のように名前をつけます。そして、XML文書のタグの中に、そのタグが「何語」のタグなのか、記述することにより、複数の言語を含むXML文書を使用できるようにします。それぞれの言語をモジュール化し、再利用することにより、効率的にXML文書を作成するのです。

7.2 Namespaceの定義

NamespaceとはXML文書の中で要素型や属性名として使われる名前の集合体です。(Namespaceは内部構造をもつという点で、数学的な意味で単なる集合ではありません。)Namespaceは、URI参照によって特定されます。URI参照によりNamespaceを特定するのは、URIが世界で唯一のものであることや、事実上無限に生成することができる等の利点があるからです。Namespaceを特定するURI参照は、文字ごとに正確に同じであるとき、同一 であるとみなされます。例えば、大文字・小文字が違うだけのURI参照などは、URIとして同じ場所を示したとしても、Namespaceを特定する場合には、エラーになります。URIはNamespaceを特定する文字列としてのみ使用します。よって、URIでの参照先には、DTD等が配置されている必要はありません。何もなくても構いません。

Namespaceを特定するのにURI参照を使用しますが、URIはたいてい長い文字列です。各要素名や属性名にNamespaceを特定するURIを付加して記述すると、以下のようになり、非常に面倒です。また、URIは、要素名や属性名に使用できない記号を含む場合が多く、そのままでは、アプリケーションが処理できません。

<http://www.4dd.co.jp/paperinfo:paper>
	<http://www.4dd.co.jp/paperinfo:title >連続曲線箱桁の解法 </http://www.4dd.co.jp/paperinfo:title>
	<http://www.4dd.co.jp/paperinfo:author> 
		<http://www.4dd.co.jp/peopleinfo:name>後藤茂夫</http://www.4dd.co.jp/paperinfo:name> 
		<http://www.4dd.co.jp/peopleinfo:title>教授</http://www.4dd.co.jp/peopleinfo:title> 
	</http://www.4dd.co.jp/paperinfo:author>
	</http://www.4dd.co.jp/paperinfo:paper>

そこで、各XML文書でNamespaceの「省略名」 を指定することができます。省略名は、以下のように指定します。

xmlns:Namespace接頭辞 = "名前空間を示すURI" 

上記のように、Namespaceの「省略名」、Namespace接頭辞を属性で指定します。XML文章では、上で定義されたNamespace接頭辞を使用して要素や属性がどのNamespaceに属しているか指定します。要素や属性をNamespaceを含んで指定する場合は、以下のように、Namespace接頭辞と要素名をコロンで区切って記述します。

<Namespace接頭辞 : 要素名 Namespace接頭辞 : 属性名="属性値"/>  

ここで、注意してほしいのがNamespaceを考慮して記述した場合、コロンは非常に重要な意味を持つということです。XMLでは、要素名や属性名にコロンを使用していいことになっていましたが、Namespaceを使用した場合、要素名や属性名にコロンを含むことはできません。独自に言語を作成する場合も、将来、他の人がその言語を再利用する場合を考慮して、要素名や属性名にコロンを含めないほうが懸命です。また、Namespace接頭辞に使用できる文字も、コロンを含まないという点を除いて、要素名や属性名で使用できる文字と同じです。以下に例を示します。

<paper:paper xmlns:paper="http://www.4dd.co.jp/paperinfo"  xmlns:people="http://www.4dd.co.jp/peopleinfo" >
	<paper:title>連続曲線箱桁の解法</paper:title>
	<paper:author> 
	 <people:name >後藤茂夫</people:name>
	 <people:title>教授</people:title> 
	</paper:author>
</paper:paper>

以上の例では、、URI "http://www.4dd.co.jp/paperinfo"で表されるNamespaceに"paper"という、Namespace接頭辞を割り当てています。paper要素や3行目のtitle要素は、Namespace接頭辞"paper"を使用して、URI "http://www.4dd.co.jp/paperinfo"で表されるNamespaceに属していることが示されています。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ