2003年5月4日(日)更新 |
■xsi:schemaLocation
さらら: ねぇ、たけち。XMLデータにDOCTYPE宣言を使うことによって、そのXMLデータがどういう外部DTDに従うのか、ということをDTDでは設定できたのよね。 たけち: そうだね。たとえば次のようなことだよね。 |
※XMLデータ例(DOCTYPE宣言にSYSTEMを記述) |
※DTD: 【mp.dtd】 |
たけち: この例ではDOCTYPE宣言で、【mp.dtd】というDTDに従うことを指定しているね。ついでに、【mp.dtd】に相当するXML Schema【mp.xsd】をみておこうね。 |
※XML Schema例: 【mp.xsd】 |
さらら: それで不思議に思ったんだけれど、DTDならDOCTYPE宣言を使ってXMLデータ側から指定できるけれど、XML SchemaはXMLデータ側から指定できないのかしら? たけち: あっ、もちろんできるよ。 さらら: よかった。じゃあ、教えて(^ ^;) たけち: そうだね。まずは解説は後回しで次のXMLデータを見てみようね。 |
■xsi:schemaLocation
※XMLデータ例: スキーマとして【mp.xsd】を指定 |
さらら: わかったわ! たけち: そのとおりだよ(^ ^) さらら: その前に書いてある http://www.yuragi.jp/ns/manyouPoemというのは、名前空間の名前よね。 |
たけち: そうだよ。この |
■xsi:schemaLocation属性の名前空間
さらら: なるほど。こういうふうに指定するわけね。それにしても、このxsi:schemaLocation属性のxsiって、また新しい名前空間が出てきたわ。 たけち: そうだね。XML Schemaの名前空間は今までずっと見てきたように、"http://www.w3.org/2001/XMLSchema" であって、これに対しては、xsd または xs という接頭辞を割り当てることが一般的だったんだね。 |
さらら: 名前空間の名前が違うということは、"http://www.w3.org/2001/XMLSchema" と "http://www.w3.org/2001/XMLSchema-instance" は別物なのよね。 |
たけち: そうだね。ただし、まるっきり無関係というわけではなくて、名前が似ていることからもわかるように、両者は特別な関係にあるんだ。 さらら: あっ、そうだったわね。(^ ^; たけち: この さらら: XML Schemaから特別扱いされているの? |
■特別扱いの4種類のグローバル属性
たけち: そう。このxsiの名前空間には、つぎの4種類のグローバル属性が属しているんだ。
さらら: あら、また新しい属性が・・・・(^ ^; たけち: このうち、xsi:type属性とxsi:nil属性については、また後で説明することにして、今回はxsi:schemaLocation属性とxsi:noNamespaceSchemaLocation属性の説明にしておくね。 さらら: えぇ。 たけち: この4種類のグローバル属性に共通する性質はつぎのことなんだ。
さらら: え?? |
たけち: 例えば、さっきの【mp.xsd】をよく見てごらん。どこにも、xsi:schemaLocation属性が出現するよう定義は書いていないよね。でも、mp.xsdはそれでもこれの検証はOKとしているんだね。XML規格から特別扱いされているxml接頭辞を持った属性であるxml:langやxml:spaceでも、それをXMLデータの中で出現させようと思ったら、xml.xsdをインポートして、参照しないといけなかったよね。 さらら: えぇ。 たけち: でも、"http://www.w3.org/2001/XMLSchema-instance"の名前空間に属している4種類のグローバル属性は、それを定義せずに、XMLデータのどの要素の中でも使えるんだね。 さらら: へぇ〜、そんな特別扱いされているのね。 たけち: ただし、この4種類のxsi接頭辞のグローバル属性を特別扱いしてくれるのは、XML Schemaだけなんだよ。例えば、mp2.xmlを【mp.dtd】で検証しようとするとエラーになるんだ。DTDはこれらを特別扱いしてくれないんだね。だから、mp2.xmlを検証するDTDを書くのだったら、例えばだけどね、次のように書かなくちゃいけないんだ。 |
※DTD例: xmlns:xsiを意識 |
さらら: あ、そうなのね(^^;) たけち: こういうふうにXML Schemaと密接に関わっているグローバル属性だから、DTDや他のスキーマ言語も併用するような場合には、使用するのに注意が必要だよ。 さらら: は〜い。 たけち: そうだね。(^ ^; 今回はこれでおしまいにするね。次回は、xsi:noNamespaceSchemaLocation属性についても説明しておこうね。 さらら: はい。 次回は、xsi:schemaLocationとxsi:noNamespaceSchemaLocation(2)です...... (^ ^; |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |