2003年4月27日(日)更新 |
■xml接頭辞の付いたグローバル属性の書き方
たけち: 前回お話した、xmlという接頭辞が付く名前空間のグローバル属性の、xml:lang, xml:space, xml:baseの3つについてだけどね。 さらら: えぇ。 たけち: DTDでは、例えばpoemという要素に組み込むのだったら、 さらら: ふぅ〜ん。。。自分で書かないといけないのに、いちいちここまで書き方を指示されるって、なんかちょっと、ね (^ ^; たけち: そうだね(^^;) こんなことをしないといけないのは、DTDでは特定の要素に属さない属性を宣言する方法がなくて、ライブラリ化できないからなんだ。それに対してXML Schemaでは、先にも学んだようにグローバル属性宣言を使って、このようなグローバル属性を宣言できるようになっているんだよ。 さらら: あっ、そうなのね。 たけち: http://www.w3.org/2001/xml.xsdというXML Schemaのファイルに、これらのグローバル属性が宣言されているんだ。このファイルがどういう書き方になっているか見てみようね。簡単のために、注釈の部分をカットしておくね。(注釈については別途学びます。) |
■http://www.w3.org/2001/xml.xsd
※XML Schema: xml |
たけち: ここではXML Schemaの名前空間接頭辞としてxsdではなくてxsが使われているけれど、単に接頭辞が変わっただけのことだから、これは気にしないでね。 さらら: えぇ。で、lang, space, baseの三つのグローバル属性宣言があるのね。。。。それに、specialAttrsという名前の名前付き属性グループ定義があるわ。 たけち: そうだね。これはこの3つをセットで使いたい場合のことも考えて、こういったものも提供されているんだよ。 |
さらら: なるほど。。。でも、xs:schema要素に、これから定義したいxml:langがあるなんて、なんか変だわ。 たけち: そう言われればそうかもしれないね(^ ^;) まずは、この場所にxml:langを使っていいということが、XML Schema自身のXML SchemaやDTDで決められているんだね。そして、XML Schema自身のXML Schemaは、この さらら: う〜ん・・・ たけち: そしてそのxml.xsdはXML Schemaで書かれているから、ここにxml:langが使われていても不思議じゃないね。何か堂々巡り的で不思議だね(^ ^;) でもまあ、 |
さらら: XML Schema自身のXML Schema? XML Schema自身のDTD? たけち: そう、XML Schema自身がXMLなんだから、当然、それはXML Schema自体で定義できるし、DTDでも定義できる。まあXML Schema自身のXML Schemaこそ堂々巡りだけれどね(^ ^;) さらら: 不思議。 |
■http://www.w3.org/2001/xml.xsdをimport
たけち: さて、その話はさておいて、こんなふうにxml接頭辞の付いたグローバル属性は、http://www.w3.org/2001/xml.xsdというスキーマファイルで定義されているんだよ。ということは、これらのグローバル属性を使おうと思ったら、このスキーマファイルをimportすればいいわけだね。 さらら: なるほど。。 たけち: じゃあ、試しに次のXMLデータのXML Schemaを作ってみよう。 |
※XMLデータ例: 万葉歌(英訳付き) |
たけち: まず、mp:poem要素にxml:base属性とxml:lang属性が使えるようにし、mp:yomi要素にはxml:space属性、そしてmp:yaku要素にxml:lang属性が使えるようなスキーマを作ってみることにするね。 |
※XML Schema例: xml:lang, xml:space, xml:base属性を使用 |
たけち: これを見てもわかるように、xml名前空間接頭辞が付くグローバル属性といっても、名前空間宣言が省略されている以外は、他の一般的なグローバル属性と扱いは違わないね。ちゃんと、 さらら: なるほどね。 |
■名前つき属性グループ定義を使用した例
たけち: せっかくxml.xsdには、specialAttrsという名前の名前つき属性グループ定義が用意されているので、これを使って全要素が、3つすべてのxml名前空間接頭辞が付くグローバル属性を使えるスキーマにしてしまうような場合も見ておこうね。 |
※XML Schema例: xml:lang, xml:space, xml:base属性を使用 |
たけち: こういうふうにすると、全ての要素で3つすべてのxml名前空間接頭辞が付くグローバル属性が使えるようになるんだね。 さらら: えぇ、わかったわ(^ ^) たけち: よかった。(^ ^; 今回はこれでおしまいにするね。 さらら: うん。ありがと。 |
次回は、xsi:schemaLocationとxsi:noNamespaceSchemaLocation - 1です...... (^ ^; |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |