2002年8月4日(日)更新 |
■ユニオン(union)
たけち: 今まで単純型のユーザー派生データ型の作り方として 制限(restriction)ばかりを勉強していたよね。 さらら: そうね。覚えないといけないことがあって大変だったわ。 たけち: ところが、単純型のユーザー派生データ型の作り方は「制限(restriction)」だけじゃないんだ。以前も説明したけれど、1.制限(restriction) 2.ユニオン(union) 3.リスト(list)の方法があるんだ。ユニオンとリストを説明していないから、今回と次回はそれらを勉強しようね。 |
さらら: 難しいのかしら? たけち: そんなことは、ないよ。まずユニオン(union)からだけれど、こんな例を考えてみようか。 さらら: そうね。わざわざユーザー派生データ型を作らなくても、最初から用意されているxsd:positiveIntegerを使えばいいわ。 たけち: ところが、参加者が作った歌の中に、他の人が作った歌を盗作したものがあったらどうなるかな。 さらら: えっ、そんなのは失格だわ。 |
たけち: そう、この場合は失格になって、順位はつけられないよね。となると、取りうる値は「1,2,3,4,5…」といった正の整数か、もしくは「失格(英語ではdisqualification)」という言葉のどちらかということになるね。 さらら: そうね、こういうデータ型を作るには、前回習った正規表現を使えばいいのかしら? たけち: あっ、そうそう。もちろんその方法でもできるけれども、別の方法もあるんだよ。次のスキーマを見てごらん。。 |
<?xml version="1.0" encoding="Shift_JIS" ?> |
たけち: まず列挙(enumeration)を使って「失格」という言葉しか値として取らないDisqualifiedTypeというのを定義している。これはいいよね。 さらら: えぇ。 たけち: 次に、 さらら: なるほど、わかったわ。 たけち: ユニオンはこういうふうに、数値と文字列といった異質なものを統合(union)したい場合に便利に使える派生のさせ方なんだよ。まとめると、次のように書けばいいんだよ。 |
さらら: 上の例の場合だと、RankingTypeやDisqualifiedTypeのユーザー派生データ型を元に、さらにRankingTypeというユーザー派生データ型を作っているのね。 たけち: そう、今まで派生の元になるものとしてビルトインデータ型を使う例ばかり見てきたけれど、基準の派生型になるのは必ずしもビルトインデータ型でなくてもよくて、自分で作ったユーザー派生データ型を基準型にして派生させてもいいんだよ。 さらら: なるほど〜。こういうこともできるのね。 たけち: オブジェクト指向では「多重継承」に近い形…あっ…(^ ^; さらら: えっ。... (^ ^; (まさか、またJavaの話?) たけち: 次回は単純型の最後、リストについて説明するね (^ ^; さらら: は〜い。。。(^ ^* (よかった.....) → 次回はリスト(list)データ派生型です。。。。 (^ ^)v |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |