2002年11月3日(日)更新 |
■複合型内容をもった複合型の制限
たけち: 前回は「複合型内容をもった複合型の制限」における、「要素に使用されている単純型の値の範囲を狭める」という機能についての話をしたよね。 さらら: えぇ。 たけち: 「複合型内容をもった複合型の制限」には4つの機能があったけれど、覚えている? (^ ^;) さらら: えっ... (^ ^; たけち: 次の4つだね。 |
たけち: このうち、1と2については「単純型内容をもった複合型の制限」で説明したこととまったく同じだから説明は省いたよね。そして4については前回説明したね。というわけで、今回は残った一つ、3の「要素の出現制約を強化」について説明するよ。まずは前回と同様の例題を出してみるね。 |
※反歌を伴う長歌の例 |
たけち: これに対するXML Schemaは次のようだったね。 |
※反歌を伴う長歌のXML Schema |
■出現制約の強化
たけち: 今回はローカル要素宣言を持ち出さなくても説明できることだから、今まで見慣れたこの形で話を進めていくことにするね。さてここでpno, envoy, poet, yomiの4つの要素が出現しうる回数のリストを見てみることにするね。 さらら: 要素が出現しうる回数のリスト?? たけち: そう。まず省略されている出現回数の設定についても書くと、各要素はこうなっているよ。 |
さらら: あ、そうね。。。。 たけち: そして、制限するということ、つまり「出現制約を強化」するというのはどういうことかというと、このリストの幅を狭くする、ということだよ。 さらら: へっ?? たけち: あっ、ごめん (^ ^;) 口に出して言うと難しそうだけれど、次のように書くとわかってもらえるかな。 |
さらら: あっ、そういうことなのね・・・ たけち: まずpnoやyomiは、最低出現回数も最高出現回数も1回のみ、つまり1しか存在しないよね。そのためこれをいくら制限したくても、この1以外にとりようがなくて、まったく制限できないんだ。 さらら: えぇ。 たけち: さて多くのパターンがあるのがenvoyで、最低出現回数が0で、最高出現回数が10ということは、0から10までの11個があるということだよね。これを制限するやり方は、一応ここに7通りのパターンだけ載せているけれど、本当は65通りのパターンがあるんだ。何も変えていない最後のパターンを含めると66通りのパターンだね。 さらら: うわぁ〜。たくさんあるのね。 たけち: ちなみに今回は、minOccurs="unbounded"、つまり最高出現回数が無制限、無限大の場合については出さなかったけれど、こうなってくると制限しうるパターンも無限大にあるよね。 さらら: ふ〜ん。こんなふうに考えるのね。 たけち: これらの制限したパターンを、もう一度minOccurs, macOccursであらわすと、次のようになるね。 |
さらら: はぁ〜・・・・・ たけち: ここで注意してほしいのは、0しか存在しない場合、つまり最低出現回数も最高出現回数も0ということは、存在しない、ということだよね。ということは、minOccurs="0" maxOccurs="0"、とわざわざ書かなくても、内容モデルの中から削除してしまえばそれでよいということだよ。 さらら: あ、それはそうね。 たけち: だから例えば、先ほどの例題だと、pnoとyomiに関しては「出現制約の強化」はできないね。それに対して、envoyは最低出現回数を2、最高出現回数を7に制限してみようね。そして、poetに関しては0のみに制限、つまりその存在そのものを削除してしまおうね。これはこんなふうに書けるんだよ。 |
※反歌を伴う長歌のXML Schema(要素の出現制約を強化) |
さらら: ふんふん。。 たけち: 前回も説明したように、「複合型内容をもった複合型」の内容モデルを制限したい場合には、制限された結果どうなるかということを書かないといけない。だから、基準型と派生型のそれぞれの内容モデルを見比べてほしいけれど、 |
※基準型 [PrePoemType] ※派生型 [PoemType] |
たけち: というふうに書いているということだよ。pnoとyomiについては変えようがなかったこともあって、そのまま同じ書き方をしている。それに対して、envoyは出現回数を、0回〜10回から、2回〜7回へ制限しているね。そして、poetにいたっては、0回または1回だった出現回数を、0回のみに制限、つまり存在を削除してしまったので、この内容モデルの中からも消えてしまった、ということだね。 さらら: なるほどねぇ〜。こんな考え方をするのね。 たけち: これで複合型内容をもった複合型の制限の説明を終わるけれども、わかってもらえたかな? (^ ^) さらら: だいたいわかった気がするわ (^ ^; たけち: 次回は「抽象的なデータ型、抽象要素」について勉強するね。 次は、抽象的なデータ型、抽象要素です 。。。。 (^ ^* |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |