2002年10月6日(日)更新 |
■SGMLのDTDにあった出現指定 "&"
たけち: 今回は、sequece, choiceに続く、第3のモデルグループであるallについて勉強するね。 さらら: それで、その第3のモデルグループって言い方がちょっと気になったんだけれど... (^ ^; たけち: えっ、なに? さらら: DTDで (a, b, c....)と書くと「a → b → c →...」になって、それがXML Schemaではsequenceなのよね。 たけち: そうだね。 さらら: それから、(a | b | c |...)と書くと「a または b または c または...」になって、それがXML Schemaではchoiceなのよね。 たけち: そうそう。 さらら: でね。今まで、 |
(無指定): minOccurs="1" maxOccurs="1" ? : minOccurs="0" maxOccurs="1" + : minOccurs="1" maxOccurs="unbounded" * : minOccurs="0" maxOccurs="unbounded" |
ということを勉強したし、それと、 |
, : sequece | : choice |
ということを勉強してきたわ。これで合っているわよね。
たけち: そうだね。よく覚えているね。 さらら: あっ、ありがと。でね、XMLのDTDには、これ以外に出現や順番を決めるような記号が思い浮かばないんだけれど..? たけち: そうだよね。XMLのDTDではこれらの記号で全部だよね。 さらら: それなのに、さらにもう一つ「第3のモデルグループ」があるっていうのがよくわからないの。 たけち: 確かに今回勉強するallは、XMLのDTDにはない考え方なんだ。だけど......... そうだね、次の「DTD」を見てみようか。 |
■DTD) |
さらら: このDTDは変だわ。真ん中に「 - - 」なんて余分なものがついているわ。こんなものをつけたらエラーになるんじゃないの? それに、poet & kana & yomiっていうのも初めて見たわ。なぁに、これ? たけち: そうだね、これをXMLのDTDとして解釈するとエラーになるよね。でもこれはXMLのDTDではないんだ。実はSGMLのDTDなんだよ。 さらら: SGMLといったら、XMLの元になったマークアップ言語だったのよね。そうでしょ。 たけち: そう。早い話がXMLはSGMLの改良型として生まれたんだ。そしてその改良のほとんどは、SGMLの複雑な機能をなくして簡素化する方向で改良されたんだよね。そういうSGMLからXMLへの改良の中でなくなった機能の一つに、上のような、poet & kana & yomiという書き方があるんだよ。 さらら: これってどんな意味なの? |
たけち: そうだね。例えば今まで、 さらら: そうね。 |
■要素の出てくる順番はどうでも良い場合
たけち: ところで、ここで考えて欲しいんだけれど、XMLの場合、こういう順番にこだわらなくても、必要な要素がそろっていれば良いってことがあるよね。たとえば、次のように出てくる順番が違っていても、とにかく必要な要素がそろって居ることが大事だってことがあるよね。 |
さらら: そう言われればそうだわね。 たけち: ところがそういうデータ形式は、「,」sequenceや「|」choiceなどでは、あまりうまく表すことができないんだ。というわけで、SGMLのDTDで使われていたのが「&」なんだよね。 さらら: なるほど。 たけち: (a & b & c &...)という書き方をすると、「aとbとcと...が、順番は関係なく、すべてが出現する」というふうになるんだ。 さらら: ふ〜ん、こういうものがSGMLのDTDにはあったのね。 |
■XML Schemaの "all"
たけち: というわけで、今までの話がSGMLのDTDについてだったんだけれど、ここから話をXML Schemaに戻すね。 さらら: うふふ。。 (^ ^* たけちが何を言いたいのか検討がついたわ。要するにこのSGML-DTDの「&」、つまり順番は関係なく、すべてが出現するということを表しているのがallなのね。 たけち: そうだね。厳密に言うと、わずかに機能が拡張されている部分もあるけれど、基本はそうなんだ。実際に上のSGMLのDTDに相当するXML Schemaを見てみようね。 |
■上記DTDに相当するXML Schema |
さらら: ふ〜ん、こんなものなのね。これでXML Schemaは、XMLのDTDよりも便利に使えるというわけなのね。 たけち: ただしこのallには、使う際にいろいろな制約があって、そう気軽に使えるモデルグループではないんだ。allを使う際の制約を以下に列挙するね。
|
さらら: 何かもう制約だらけで、要するに例題にあげたようなパターンでしか使えないということなのね。 たけち: そうだね。だから使う際には、本当にallが必要なのか、sequenceではどうしても駄目なのか、ということを考えてから使った方がいいね。sequeceではどうしても代用できない場合の最後の手段ぐらいに考えておいた方がいいね。 さらら: そうなんだ。 たけち: あとモデルグループについては、この3つでおしまいで、次回は「混在内容」の定義の仕方について説明するね。 さらら: は〜い。 次は混在内容です 。。。。 (^ ^* |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |