2002年10月13日(日)更新 |
■子要素の異なる複数の歌の例
たけち: 今まで3種類のモデルグループについて勉強してきたけれど、今日はそれらを便利に使うためのテクニックである「名前付きモデルグループ」について勉強してみるね。まずは、以下のXMLドキュメントとDTDを見てみてね。 さらら: あっ、いきなり・・・ (^ ^; |
■万葉歌のXMLドキュメント例 |
■万葉歌のDTD例 |
さらら: うぅん、長〜〜い (^ ^;) .....でも、これって似たようなものをどこかで見たことがある気がするわ。 たけち: そうだね。以前「名前付き属性グループ」を勉強したときに、属性がたくさんある例を出したけれど、今度はそれを要素がたくさんある例に改造したんだね (^ ^;) さらら: あっ、そうだったわね。。。。そうなってくると、何か、もう今回の話の筋は読めたような気が......(^ ^;) たけち: そうだね。あのときと比べると、要素の宣言が共有できているからね。ただ、だからといって全然無駄がないかというとそうでもないんだよ。このDTDの |
<!ELEMENT poems (miscellaneousPoem | elegy | lovePoem | metaphoricalPoem)*> |
たけち: の部分では、結構同じ記載の繰り返しからできているよね。 さらら: あっ、なるほど、そうね。 たけち: この部分をパラメータエンティティを使ってまとめてみようね。さらら、できるかな? さらら: え゛っ (^ ^; たけち: うん。じゃあ、長いから抽出した部分だけを、書き直してみるね。 |
<!ENTITY % poem_common |
さらら: そんなに目だって短くなった気はしないけれども、でもこうしてまとめるとすっきり綺麗だわ。 たけち: そうだね。こういうふうにパラメータエンティティは、共通の要素の並びをまとめることもできるんだ。さて、話をXML Schemaの方にもどそうね。最初のDTDに相当するXML Schemaを書けるかな。今までの応用だよ。 さらら: どきっ!! (^ ^; |
■XML Schemaで共通の要素の並びを定義
たけち: ただ、XML SchemaとDTDの違いに注意してね。DTDでは属性にしかNMTOKEN型や列挙型が使えなかったね。つまり要素にはNMTOKEN型や列挙型が使えなかったから、上記のDTDではpnoやseasonを#PCDATAで宣言しているね。 さらら: あとデフォルト値の設定もあったわねぇ。 たけち: そうだねぇ...確かにそうなんだけれど、今回の例ではあまりうまくいかないから、これは無視していいよ。今回、要素を参照する側で設定するデフォルト値を変えたいけれど、本来デフォルト値の設定は要素宣言からしかできない。ということは、同じデフォルト値をもった要素を宣言するということになると、本来したいことから意味が外れるし、そうでなければ、ローカル要素というものを使うしかない。だけど、ローカル要素の意味や使い方についてはまだ説明していないからね。今回はデフォルト値の設定はやめておくね。 さらら: よく意味がわからないけれど、デフォルト値については無視して、そこはDTDのとおりでいいのね。。。。poems要素の子供には、miscellaneousPoem、elegy、lovePoem、metaphoricalPoemのいずれかが出てくればいいからchoiceかしらね。それから。。。。。う〜ん、ややこしいけれど、こうかしら。。。。 |
■XML Schema by さらら |
■名前付きモデルグループ
さらら: きゃ〜、自分で書いてみたけど、やっぱり長〜い (^ ^; どっ、どうしたらいいのかしら。 たけち: 長いけど、そうだね。こんな感じだね。これを「名前付きモデルグループ」を使って次のように書き換えることができるんだよ。 |
■モデルグループを使って書いてみると・・・ |
さらら: DTDと同じ感じのまとまり方なのね。 たけち: そうだね。ここで見てもらいたいのは、 さらら: name="poem_common"というのがモデルグループの名前なのね。 |
たけち: そうそう。このように さらら: ふ〜ん。そうなんだ。 |
たけち: ちなみに さらら: sequenceが重なっちゃってるわ。 |
たけち: そうそう。必ず1回しか出現しないsequenceばかりを、何回どれだけネストしたり並べたりしようが、それは一つのsequenceで挟まれたものと同じ意味だよね。この例も、 さらら: なるほど、そうなるのね。 |
■名前付きモデルグループでの注意事項
たけち: あと「名前付きモデルグループ」で気をつけないといけないのは、出現頻度の設定なんだよ。上の例にあるように、「名前付きモデルグループ」の内部の方でパーティクルのminOccursやmaxOccursの出現頻度の設定をするのはいいんだけどね。例えば、 |
さらら: えっ、そうなの。 たけち: そうなんだ。たとえば、 さらら: ふ〜ん、なんとなくわかったわ。 |
たけち: さて、次回なんだけれど... 以前、「名前付き属性グループ」の説明をした後に、「これと同じ結果をまた別の観点から得ることができる、もっとスマートな方法もある」と言って、「属性を追加する方法」つまり「拡張(extension)」を紹介したよね。 さらら: あっ、そうだったわね。 (^ ^; たけち: というわけで、「名前付きモデルグループ」の説明をした後も、同じ流れで次回は「モデルグループの追加」をする「拡張(extension)」の話をするよ (^ ^; さらら: は〜い。 次は、要素(モデルグループ)の追加です。。。。。 (^ ^* |
■XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。 |