2003年2月2日(日)更新 |
■名前空間の復習
たけち: 今日は異なる名前空間のスキーマを参照する方法について勉強するね。 さらら: は〜い。 たけち: まず前回の復習からね。次のXMLデータを見て。 |
![]() |
※XMLデータ例: 万葉歌-1 |
さらら: えぇ、覚えているわ。 たけち: これに対応するXMLスキーマは次のようなものだったね。 |
※XML Schema例: 万葉歌-1 |
さらら: えぇ、そうだったわ。 たけち: じゃあ、次に前回勉強したことが身についているかどうか、次のXMLデータのスキーマはどうなるかな? |
※XMLデータ例: 万葉歌-2 |
さらら: えっ、え〜っと...(^ ^;) たけち: そうだね。次のような感じになるね。ちなみにこのスキーマファイルの名前を仮に【pi.xsd】としておくね。 |
![]() |
※XML Schema例: 万葉歌-2 |
さらら: あ、そうね、こんな感じになるわね.....(^ ^; ところで、xsd:gYearってなに? たけち: あっ、これは今まで使ってこなかったけれど、これもXML Schemaのビルトインデータ型で西暦の年号を表すものなんだよ。 さらら: そうなんだぁ。 たけち: さて、ここまでは前回までの応用なんだけれど、じゃあ次のXMLデータを見てみようか。 |
■異なる名前空間の要素から成るXMLデータ
たけち: 先の2つのデータ型を融合させたようなXMLデータだよ。 さらら: データを融合? |
※XMLデータ例: 万葉歌-3 |
さらら: あら、これmp:poet要素の代わりに、pi:person要素が入ったのね。 たけち: そうだね。 さらら: こんな書き方ができるわけね。 たけち: そうだね。こういう異なる名前空間の要素を組み合わせる方法ができるんだよね。さて、これのXML Schemaの書き方を見てみようね。pi、つまり"http://www.yuragi.jp/ns/personalInformation"のスキーマファイルは、ここでは【pi.xsd】としておくね。 |
![]() |
※XML Schema例: 万葉歌-3 |
さらら: あら、意外にあっさりと書けるのね。よくわからないのは、 たけち: そう。問題になるのは、この部分だけで、後はわかるよね。pi、つまり"http://www.yuragi.jp/ns/personalInformation"のスキーマファイルを参照するために必要な書き方なんだよ。 さらら: importというのは「持ち込む」「導入する」「輸入する」とかの意味だったわね。 |
![]() |
たけち: で、namespaceという属性は、導入したい名前空間の名前を書く場所だね。ここではpiという接頭辞ではなくて、名前空間の正式名称である"http://www.yuragi.jp/ns/personalInformation"を書かないといけないんだよ。そして次のschemaLocationというのが、その名前空間のスキーマファイルのある場所というか名前で、ここではpi.xsdと書いているんだよ。 さらら: そうなのね。 |
たけち: ちなみにこのpi.xsdが、仮にインターネット上のhttp://www.yuragi.jp/schema/pi.xsdにあるような場合には、 さらら: へぇ〜。。。 |
たけち: 以前、名前空間を本籍地に例えて説明したけれど、この場合、namespace属性、つまり名前空間が本籍地で、schemaLocation属性、つまりスキーマファイルの置き場所が現住所のようなものだね。本籍地と現住所が両方書いてあるなんて、自動車の免許証みたいだね (^ ^; さらら: 自動車って? (?_?) たけち: あっ (^ ^;) えーと、話を戻すと、こう書くことによってpiのスキーマが参照できるようになるんだね。だから、pi.xsdの方で |
![]() |
さらら: なるほど、そうなのね。xsd:importという要素の書き方さえ覚えておけば、意外に簡単なのね (^ ^*) たけち: そうだね。この例ではpi.xsdの中で宣言された要素を参照したけれど、こんなふうにxsd:schema要素の直下の子要素として宣言される要素を参照できるんだよ。この他に参照できるものとしては、xsd:schema要素の直下の子要素として出現して定義や宣言をされる、complexType, simpleType, group(名前付きグループ定義), attributeGroup(名前付き属性グループ定義), attributeなどを参照できるんだよ。 さらら: へぇー、そうなのね。えっ? xsd:schema要素の直下の子要素として出現して宣言されるattribute...? そんなもの、あったかしら? たけち: あ、それについては、また後で説明するね。 さらら: えっ、えぇ。 |
![]() |
■対象名前空間を持たないスキーマをimportする
たけち: それから、対象名前空間を持たないスキーマをimportする場合についても説明しておくね。次のように、対象となる名前空間を持たないスキーマがあるとしようね。このスキーマファイルを仮にpiNoNS.xsdという名前にしておこうね。 |
※XML Schema例: piNoNS.xsd |
たけち: これをimportするスキーマは以下のように書けるんだよ。 |
※XML Schema例: piNoNS.xsdをimport |
さらら: 前のとほとんど変わらないように見えるけれど... たけち: 違いは2箇所あるんだ。まずxsd:import要素のnamespace属性がなくなったことだね。対象名前空間を持たないスキーマだから、名前空間の名前を書きようがないよね。それから、 さらら: あ、そうね。 たけち: それで、このスキーマに合致するXMLデータは次のような感じになるんだよ。 |
![]() |
※XMLデータ例: 万葉歌-3 |
さらら: あ、こんなXMLの書き方ができるのね (^ ^;) たけち: 今回は異なる名前空間のスキーマを参照するためのimportを学んだけれど、次回は同じ名前空間のスキーマを参照するincludeについて勉強するね。 さらら: あっ、は〜い!! 次回はincludeです。...... (^ ^)v |
![]() |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |