2002年8月11日(日)更新 |
■リスト(list)型
たけち: 今日は単純型の最後、リスト(list)型について学ぼうね。リストというのは何回も説明したけれども、制限(restriction)、ユニオン(union)、リスト(list)という単純型の3つの派生の方法の一つなんだ。 |
■長歌と反歌
さらら: 難しいのかしら? たけち: そんなことは、ないよ。例えばこういう例を考えてみるね。万葉集には長歌がたくさんあるよね。 さらら: そうね。私の知っている柿本人麻呂の歌には長歌がたくさんあるわね。 たけち: 長歌に対しては、複数の反歌が対応していることが少なくないよね。 さらら: えぇ。 たけち: たとえば、18巻の4089番の長歌をみてみよう。 |
高御座 天の日継と すめろきの 神の命の 聞こしをす 国のまほらに 山をしも さはに多みと 百鳥の 来居て鳴く声 春されば 聞きのかなしも いづれをか 別きて偲はむ 卯の花の 咲く月立てば めづらしく 鳴く霍公鳥 あやめぐさ 玉貫くまでに 昼暮らし 夜わたし聞けど 聞くごとに 心つごきて うち嘆き あはれの鳥と 言はぬ時なし |
さらら: あら、大伴家持の歌ね。 たけち: この歌にはつぎの反歌があるんだね。 |
4090番 ゆくへなくありわたるとも霍公鳥鳴きし渡らばかくや偲はむ |
さらら: みっつもあるのね。 たけち: そこで、この長歌に関してはこういう反歌がありますよ、という情報を長歌の構造に含めたい場合は、たとえば次のように書いたりする方法が考えられるよね。 |
<yomi pno="4089" hanka="4090 4091 4092"> |
■複数の反歌を持つことを示す属性
さらら: そうね。そういう感じになるかしら。 たけち: このhankaという属性がとる単純型の構造を考えると、正の整数(xsd:positiveInteger)が繰り返されているよね。 さらら: えぇ、そうね。でも、スキーマとしてはどう書くのかしら。 たけち: まずは以下を見てみようね。以前、属性の宣言のところで見てもらった例題を、ちょっと改良しただけなんだけど。 |
<?xml version="1.0" encoding="Shift_JIS" ?> |
さらら: う〜ん、わからない書き方がいっぱい。この |
たけち: それについては複合型のところで説明するからね (^ ^; 今はそこを見るのはやめて・・・・・ さらら: えぇ。 |
■xsd:list
たけち: まず、 さらら: うんうん。 たけち: それじゃあ、そのPositiveIntegerListType型という単純型がどういう定義になっているか、というのが、 |
さらら: そうなの。。。。 たけち: ここではxsd:listという要素のitemTypeに繰り返したい基準型であるxsd:positiveIntegerを書いているね。これによって、正の整数(xsd:positiveInteger)の繰り返しを表現できるんだよ。 さらら: なるほど、わかったわ。 たけち: これをまとめるとつぎのようになってるんだね。 |
さらら: やっとわかったわ。 たけち: ところで、このリストによる派生の関係は実はDTDにもあるんだよ。 さらら: えっ、そうなの? たけち: DTDにある
さらら: そうなのね。 |
■リスト(list)型の派生と制約ファセット
たけち: こうやって作った単純型をリスト型と呼ぶんだよ。これに対して今まで扱ってきた「リスト型」でない一塊のデータ型をアトミック型とも呼ぶんだ。 さらら: う〜ん、いろいろなデータ型の分類が出てきて頭が混乱しそう。 (^ ^; たけち: まあこういう分類もあるというふうに覚えておいてね (^ ^; それからあと、ここで注意したいのは、リスト型を基準型にして、そこから制限(restriction)で派生型を求めたい場合、length, minLength, maxLengthといった制約ファセットがちょっと違った働きをすることだね。 さらら: えっ、???..... (? ?) たけち: あ、ごめん。。。。。こんな例で考えてみよう。例えば歌人のリスト型を考えてみるね。 |
<?xml version="1.0" encoding="Shift_JIS" ?> |
たけち: これのスキーマは次のように書けるんだ。 |
<?xml version="1.0" encoding="Shift_JIS" ?> |
さらら: えぇ。これならわかるわ。 たけち: ここで名前が出てくる歌人を、文字が4文字の人だけに制限してみるね。 さらら: うん。 |
<?xml version="1.0" encoding="Shift_JIS" ?> |
たけち: こういう風にすると、 さらら: えぇ、そうね。 たけち: じゃあ次にこうしてみるね。 |
<?xml version="1.0" encoding="Shift_JIS" ?> |
さらら: さっきと似ているようで違うわ。 たけち: そう、さっきは4文字の歌人のリストのデータ型を作ったけれども、これは歌人のリストのデータ型のlengthを4と制限しているんだ。 さらら: ということは、結果的にやっぱり4文字の歌人のリストになるんじゃないの? たけち: ところがこの場合はそうじゃないんだ。この場合、リストの項目の数が4に制限されるんだよ。だから、さっきとは逆に、 |
さらら: そっか〜。。。。制約ファセットのlengthって文字の数じゃない場合もあるのね。 たけち: そうだね。こういうリスト型に制約ファセットのlength、そして他にはminLength、maxLengthを使う場合は、文字の数ではなくて、リストの項目の数になることに注意してね。 さらら: は〜い。。。でも。。。Character4PoetTypeとかPoetsTypeとか、こんな部品になるためだけのデータ型に名前を付けるのって、ちょっとうっと〜しいわねぇ。 たけち: ぎくっ。。。(^ ^; さらら: あ、その顔は何か隠してるでしょ。たけちったら、すぐ顔に出るんだから。 (^ ^* たけち: うん、わかったよ。次回は複合型を説明するつもりだったけれど、ちょっと一旦横道にそれて匿名の型定義について説明することにするね。 さらら: は〜い。。。(^ ^* (ふふふ.....) → 次回は、匿名の型定義です。。。。 (^ ^)v |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |