2003年4月20日(日)更新 |
■xml接頭辞の付いたグローバル属性
たけち: 前回までグローバル属性についてしっかり学んだけれど、今回と次回は、グローバル属性を使った規格の中でも、今まで学んだことから少し外れる特殊なグローバル属性を勉強することにするね。具体的に言うと、xml接頭辞の付いたグローバル属性についてだよ。 さらら: xml接頭辞の付いたグローバル属性? たけち: そう、XMLの規格にはいくつか要素や属性や名前空間接頭辞の名前などに使ってはいけない、特殊な予約された言葉があるんだけれど、その中の一つに、xmlという言葉があるんだ。このxmlという言葉を名前空間接頭辞に使う規格を作っても良いのは、W3Cだけなんだ。 さらら: 特別扱いの接頭辞なのね。 たけち: そう。で、このxmlという名前空間接頭辞が普通の接頭辞と違って、次のような特徴があるんだよ。
さらら: あっ、そうなの。でも、名前空間宣言なしに使用可能って不思議だわ。 |
■xmlという接頭辞の名前空間
たけち: うん。普通、名前空間接頭辞は名前空間宣言を使って宣言しないと駄目だよね。でも、xmlという接頭辞とxmlnsという接頭辞の2つだけは、その例外で宣言しなくてもいいというふうになっているんだ。そして、xmlという接頭辞は、http://www.w3.org/XML/1998/namespace という名前空間と結びついていることが決められているんだね。つまり、次のように書かれているのと同じ状態だってことだね。 さらら: へぇ〜。xmlnsはこれまで出てきたけど、xmlにはどんなものがあるのかしら。 |
■xml:lang
たけち: 実際にxmlという接頭辞が付く名前空間のグローバル属性の、xml:lang, xml:space, xml:baseの3つは基本的で汎用性の高い重要なグローバル属性なのでここで学んでおこうね。 さらら: あっ、3つだけ知ってればいいのね。よかった・・・(^ ^; たけち: まず、xml:langなんだけれど、これは、このグローバル属性が使われている要素や、その子孫となる要素で、内容となるテキストがどのような自然言語が使われているかを示す部分なんだ。子孫となる要素では、その中で再びこのxml:langが出てきて再定義しない限り有効なんだよ。HTMLにlangという属性があるんだけれど、それを汎用のグローバル属性にしたようなものだね。 さらら: どういう言語が使われているかを示すグローバル属性なのね。でも、それって重要なのかしら。 たけち: 例えば、テキストの内容が日本語だとわかっていれば、禁則処理等の日本語特有の処理が表示する際にできたりするよね。 さらら: あ、そういう使い方ができるわね。 たけち: 実際の使い方を見てみようね。例えば次のようなXMLデータだよ。 |
※XMLデータ例: 万葉歌 xml:lang属性つき |
たけち: ここでは、mp:poem要素にxml:lang="ja"という指定がしてあるよね。そこで、その子要素となる、xml:lang属性のないmp:yomi要素やmp:kana要素、mp:poet要素は日本語であることが示されるんだ。しかし、その子孫でも <mp:yomi xml:lang="en"> と書かれた要素の内容は、英語だということが示されるわけなんだね。 さらら: なるほど。 |
■xml:space
たけち: さて、次にxml:spaceについて説明しようね。これはdefaultかpreserveかのどちらかの値をとるグローバル属性なんだ。まずは次の例を見てみようね。(以降、△は半角スペースを意味しているものとします。) |
※XMLデータ例: 万葉歌 |
たけち: mp:poemの子要素となるmp:poet, mp:kana, mp:yomi要素は、行頭からいわゆる半角スペースが2つ入っているよね。これって、どうして半角スペースが入っていると思う? さらら: それは、やっぱり要素の親子関係がはっきりわかりやすいからでしょ。こういうふうに半角スペースを入れたほうが、XMLデータが見やすくていいわ。 たけち: そうだよね。じゃ、次のXMLデータを見てみようね。 |
※XMLデータ例: 小説 |
たけち: この場合、 さらら: そうじゃないと思うわ。これって、やっぱり表示されたときに、 たけち: 多分そうだね。でも、こういう混在内容の場合、特にWell-formedで扱いたい場合、その空白文字が、XMLデータ上の見易さを勘案して入っているものなのか、本当に空白文字のデータとして保持して処理されて欲しいものなのか、ということがわからないよね。そこで、つぎのように、xml:space="preserv"と書いておくと、明示的に半角スペースを保持して欲しいという意図が伝わるんだ。 |
※XMLデータ例: 小説 xml:space="preserv"付き |
たけち: 逆にxml:space="default"とすれば、これはこういう空白文字をアプリケーション側の判断に任せます、という意味になるわけだね。 さらら: なるほど、こういう使い方ができるわけね。 |
■xml:base
たけち: さて、最後にxml:base属性について説明するね。これはHTMLのbase要素を、汎用的なグローバル属性にしたようなものなんだ。XMLデータを見て。 |
※XMLデータ例: 万葉歌 xml:base付き |
たけち: このXMLデータはXLinkを使っていて、大伴家持のという作者の名前がyakamochi.xmlへとリンクされているんだ。もしxml:base属性がなければ、このXMLデータが置いてあるのと同じディレクトリのyakamochi.xmlへとリンクされるわけだけれど、xml:base="http://www.example.com/xml/"という属性があるために、結局、 さらら: あ、これも便利そうね。 たけち: これでxml接頭辞の付いたグローバル属性は3つとも、とても大事なことばかりを扱うグローバル属性だということがわかってもらえたかな。 さらら: えぇ、よくわかったわ(^ ^) たけち: よかった。(^ ^; 今回はこれでおしまいにするね。 さらら: うん。ありがと。 次回はxml接頭辞の付いたグローバル属性-2です。...... (^ ^; |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |