2002年9月1日(日)更新 |
■DTDとXMLスキーマの属性宣言
たけち: 今回は属性の宣言の仕方についてきちんと勉強しておこうね。 さらら: えぇ。要素宣言と属性宣言の両方を知っておかないといけないものね。 たけち: まずDTDの属性リスト宣言について見直してみようね。DTDでは次のように属性リスト宣言をしていたよね。 <!ATTLIST 要素名 属性名 データ型 デフォルト値> |
たけち: このDTDの属性リスト宣言とXMLスキーマの属性宣言を比較してみてまず違うことは、 ・DTDでは要素に対して属性を宣言するのに対し、 ということなんだよ。DTDではこの要素には、この属性ということを直接決めていたのに対し、XMLスキーマではこのデータ型には、この属性ということを決めた上で、「この要素には、このデータ型」ということを宣言する、という間接的な決め方をしているんだよ。 さらら: そうね。「XMLスキーマでは、はじめにデータ型ありき」という話だったのよね。 |
■属性のデータ型
たけち: さて、「属性のデータ型」なんだけれど、DTDでは基本的に、次の4つのデータ型があったんだよね。
さらに特殊な機能、用途を属性に持たせるデータ型としては、つぎのようなものもあるけれど、基本は最初の4種類だよね。
これに対して、XMLスキーマでは、これらも含めて、これより遥かに種類に富んだ単純型のビルトインデータ型が使える上に、さらに自分で定義した単純型のユーザ派生データ型が使えたよね。 |
■属性のデフォルト値
さらら: あの話だけで疲れちゃった.....(^ ^; たけち: あっ...(^ ^; いや...さて、ここまでは今までしてきた話のまとめなんだけれど、デフォルト値の話をまだしていなかったよね。さららは属性リスト宣言のデフォルト値の部分にどんなキーワードを入れることができたのか覚えている? さらら: えっ、え〜と..... (^ ^; たけち: 属性リスト宣言のデフォルト値の部分は次の4種類のパターンに分かれるんだよ。 |
|
さらら: そっ、そうだったわね.....(^ ^; たけち: この中の#REQUIREDについては前回例を出したよね。 さらら: あっ、そうだったわね。 |
<?xml version="1.0" encoding="Shift_JIS" ?> |
さらら: この中の たけち: そうだね。この |
required: 属性は必ず存在しなければいけない |
さらら: use="optional"というのがDTDの#IMPLIEDに相当するのね。 たけち: そう、ちなみにuse属性そのものが省略されると、デフォルトでこのuse="optional"が選ばれたことになるんだ。 さらら: それは良いんだけど、このuse="prohibited"って何なの?? 属性の存在を禁止するくらいなら、最初から属性の宣言を書かなければいいんじゃないの?? たけち: やっぱり、さららもそう思ったんだね (^ ^; これだけ見ると確かに変に見えるけれども、これはこれで使い道があるんだよ。これの使い方については、また別のところで説明するね (^ ^; さらら: う〜ん。。。それじゃあ、またそのときに教えてね。あと、属性のデフォルト値を指定する場合や、属性の値が固定されている場合はどうなるの? たけち: まず属性のデフォルト値を指定する場合は次のように書くんだよ。 |
<xsd:attribute name="属性名" type="データ型名" default="デフォルト値" /> |
たけち: よく考えればわかるけれど、「デフォルト値が存在するとき」というのは必ず「属性があったりなかったりする場合」だよね。だから、必ずuse="optional"でなければならない。ただし、use属性そのものが省略されると、use="optional"の意味になるから、書かなくても別にかまわないよ。use属性を書く場合には必ずuse="optional"としないといけないけれどね。 さらら: 固定値の場合はどうなの? たけち: 固定値の場合は、次のようになるんだ。 |
<xsd:attribute name="属性名" type="データ型名" fixed="固定値" /> |
たけち: ここで注意しないといけないのは、ある属性についてデフォルト値がある場合には固定値が存在することはありえないし、また固定値がある場合にはデフォルト値が存在することはありえない、ということだよね。だから default属性とfixed属性は両立しないんだ。どちらかが存在すれば、どちらかは絶対出現してはいけないんだよ。 さらら: なるほど、わかったわ。 たけち: 以上のことをDTDと比較して覚えておこうね。 |
たけち: 次回は、属性における匿名のデータ型について詳しく勉強しようね。 さらら: は〜い。 → 次回は属性における匿名のデータ型です。。。。 (^ ^)v |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |