- PR -

名前空間URIについて

1
投稿者投稿内容
ゆう
会議室デビュー日: 2001/09/22
投稿数: 3
投稿日時: 2001-09-22 08:48
はじめまして。
最近、XMLを勉強し始めた者ですが、
名前空間についてちょっと御教授ください。

このHPでは名前空間URIは、http://www.w3.org/TR/WD-xsl ではなく、
http://www.w3.org/1999/XSL/Transform を使用してくださいと言うような
ニュアンスのことが記載されていますが、私が何点かサンプルを作って
試してみたところ、前者の場合はきちんとブラウザに表示されるのに対し、
後者の場合はブラウザに何も表示されません。
これは何故なのでしょうか?
また名前空間と言うのは、自由につけては駄目なのでしょうか?
(適当なURLを使用しても駄目でした。)

私の環境は、WindowsME で、IE のバージョンは5.50です。
ちなみに、Windows2000 で、IE 5.0 でも同じ結果でした。

よろしくお願いします。
@IT新野
@ITエディタ
会議室デビュー日: 2001/07/27
投稿数: 66
投稿日時: 2001-09-26 22:43
ゆうさん、こんにちは。@IT新野です。
ご質問の件、名前空間にはきちんと意味があります。XMLパーサ、特にご指摘のXSLTの
場合は、ここを見て自分が(XSLTパーサが)処理できるかどうか確認しているから
です。IEの動作に関しては、最新のXMLパーサのMSXMLを入れていないために、古い
名前空間のほうで動作する状態になっているのですね。

それぞれ下記の記事で詳しく説明していますので、ぜひ読んでみてください。

名前空間については、
「ボキャブラリを拡大する「名前空間」」
http://www.atmarkit.co.jp/fxml/rensai/xmlwomanabou07/learning-xml07.html

XSLTとMSXMLについては、
「MSXML3って何?何が変わるの?」
http://www.atmarkit.co.jp/fxml/askxmlexpert/006msxml3/06msxml3.html

にいの


[ メッセージ編集済み 編集者: @IT新野 編集日時 2001-09-26 22:44 ]
ゆう
会議室デビュー日: 2001/09/22
投稿数: 3
投稿日時: 2001-09-27 10:25
@IT新野さん、回答ありがとうございます。
恐らく私の環境では、msxml3.dll が存在しないため、
古い名前空間のほうで動作することになっていたようです。

あと、まだちょっとわからないのですが、(頭悪くてすみません)
「ボキャブラリを拡大する「名前空間」」のページは拝見させて頂きましたが、
「自分だけの名前空間を持つことが出来る」や、「名前空間URIが指定する先に、
何かの意味のある情報が置かれているわけではない。」等の記述があります。
私はこれを、「名前空間は自由に付けることが出来る」と認識したわけですが、
実際はXMLパーサに定義付けられている名前空間URIしか、
使用は許可されないのでしょうか?
それとも一般的には使用できるが、IEでは、MSXMLというパーサを
利用するため、このようなことになるのでしょうか?

途中で名前空間を切り替えることも可能らしいですが、
この時使用できる名前空間が1つしかないのならば、
これは出来ないということでしょうか?

複数の質問で申し訳ありませんが、よろしくお願いします。
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2001-09-27 20:27
横レス失礼します。

名前空間というのは、対応するボキャブラリ(タグや属性のセット)で記述された
データを処理するソフトウェアが、「このボキャブラリにはこういう内容の名前
空間が対応している」ということを知っていれば用が足りるものです。

質問なさっているXSLTを例に取りますと、IE5.xが標準装備しているMSXML.DLLは
ドラフト版のXSLTに対応したXSLTプロセッサの機能を持っていて、それが「ドラ
フト版XSLTの名前空間URIは http://www.w3.org/TR/WD-xsl である」ということ
を知っています。ですから、その名前空間に対応付けられたタグだけを、ドラフ
ト版XSLTのタグとみなして処理します。

MSXML3.DLLの場合、私が試してみた範囲では、ドラフト版と勧告版の、どちらの
XSLTも動作するようです。
ですから、.xslファイルに書かれている名前空間URIが先と同じものならドラフト
版XSLTとみなして処理し、http://www.w3.org/1999/XSL/Transform なら勧告版
XSLTとみなして処理します。

つまり、名前空間URIがどういう内容かを知っている必要があるのは、その名前
空間が対応するボキャブラリを処理するために開発されたソフトウェア、という
わけです。たまたま、MSXMLの場合はXMLプロセッサ(パーサー)がXSLTプロセッサ
の機能を兼用しているので、話がややこしくなっていますが。

余談ですが、名前空間URIで指定されているURLは、必ずしも実在する必要はあ
りません。上記のような理由により、URIは事実上、単なる識別用の文字列とし
て機能しているからです。
試しに、XSLTを使ったスタイルシートで、名前空間のURL末尾に「/」を付けて
みてください。それだけで、XSLTはまったく機能しなくなります。「/」を付
けることで、XSLTプロセッサが知っているURIとは別物になってしまうからです。

では、どうして名前空間の識別にURLを使用する例が多いのかというと、これは
「いやしくも、自前のボキャブラリを定義するような人や組織なら、インター
ネット上で自前のドメインを持っているはずである」という考えがあるから、
ということのようです。

[ メッセージ編集済み 編集者: inopee 編集日時 2001-09-27 20:57 ]
ゆう
会議室デビュー日: 2001/09/22
投稿数: 3
投稿日時: 2001-09-30 22:26
inopeeさん、回答ありがとうございました。
まだすっきりとはいかないまでも、感覚的にはなんとなく理解できました。
あとは、徐々に勉強しながら作っていくうちに理解できるようになると思います。
細かく説明していただいて、どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)