2003年4月13日(日)更新 |
■対象名前空間を持たないXMLデータ
たけち: 例えば、前回考えたXML Schemaが対象名前空間を持たなかったら、グローバル属性がどうなるかを考えてみようね。 さらら: えぇ・・・(^ ^; |
※対象名前空間を持たないXML Schema例 |
たけち: この例では「グローバル属性宣言」を使っているけれど、これに対応するXMLデータは、次のようになって、colorには名前空間接頭辞は付かないよね。 |
※XMLデータ例: 万葉歌 |
さらら: あっ、そうね。名前空間接頭辞がついてないから、グローバル属性とは言えないのね。 |
■ローカル属性宣言を使って、グローバル属性を宣言: form="qualified"
たけち: これとは逆に、「ローカル属性宣言」を使いながら、名前空間接頭辞がついた属性、つまりグローバル属性を宣言してしまう方法が存在するんだよ。 さらら: えっ?? たけち: 次のXML Schemaをみて。 |
※XML Schema例: form="qualified"を使用 |
さらら: form="qualified"ってついているわ。これまで書いたことなかったわね。 たけち: うん。xsd:attributeにform="qualified" と書くと、それはローカル属性宣言であっても、名前空間接頭辞がその宣言した属性に付くことになるんだ。「qualified」は「(名前空間接頭辞で)修飾された」という意味だと覚えておこうね。つまり、この機能を使えば、ローカルに宣言されて使われるような属性でさえも、名前空間接頭辞がついた属性、つまりグローバル属性になるんだね。 さらら: へぇ〜。でも、それって何に使うの? たけち: あっ。。。(^ ^; もう一つの方法をみておこうね。 |
■ローカル属性宣言を使って、グローバル属性を宣言: attributeFormDefault="qualified"
※XML Schema例: attributeFormDefault="qualified"を使用 |
たけち: xsd:schema要素の さらら: そうなの。 たけち: そうだね。これは属性宣言の、xsd:schema要素の属性で、attributeFormDefault="qualified" と書くと、その定義されているスキーマの全ての属性が名前空間接頭辞がついた属性、つまりグローバル属性になるんだね。 さらら: へぇ〜。 たけち: だから、先ほどのXML Schemaに適合するXMLデータは、以下のようになるんだ。 |
※XMLデータ例: 万葉歌 |
たけち: このXMLデータでは、color属性はもちろん、pno属性まですべて、mp:colorやmp:pnoというふうに、名前空間接頭辞がついた属性になってしまうんだよ さらら: こんな機能がどうしてあるのかしら? たけち: それは僕にもよくわからないんだよね。ただ、実際にこの機能を使わなければ綺麗に定義できないようなXMLの応用規格が存在するんだよ。以前も話をしたように、「要素と属性は比較的平等に扱われている」ということで、このattributeFormDefaultに相当するelementFormDefaultという機能が存在していて、これは比較的よく使われる欠かせない機能になっているんだ。逆に言うと、elementFormDefaultという機能が欠かせないもので、かつ要素と属性は比較的平等に扱われなければならないからこそ、attributeFormDefaultという機能も一応必要だったのかもしれないね。 さらら: う〜ん、何かだいたいわかったような、わからないような(^ ^;) たけち: そうだね。(^ ^; 今回はこれでおしまいにするね。 さらら: あっ、ありがと。 次回は、xml接頭辞の付いたグローバル属性です...... (^ ^; |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |