要素の宣言の基本: データ型

2002年6月16日(日)更新


■データ型: 単純型

たけち: 前回は内容がテキストになっている要素が一つだけあるXMLスキーマを学 んだよね。

さらら: えぇ、DTDでいうとつぎのような場合のスキーマだったわね。

<!ELEMENT a (#PCDATA)>

たけち: うん。こういった要素は「単純型」だというんだよ。

さらら: そうなの。。。。ということは、「複雑型」なんてのがあってことなのかしら。

たけち: あっ、う〜ん。

さらら: どしたの?

たけち: うん。そのことについてはもっとあとからでもいいかなって思っていたんだけどね。さららがそういう風に疑問を持つんだったら説明しておこうかな。

さらら: そうなの?。でも、まだ良く分かんないかもしれないけどお話して。

たけち: そっか。じゃあちょっとだけ先走りして、前回よりも複雑な形式をみてみようね。

たけち

<poem>
  <mkana>熟田津尓 船乗世武登 月待者 潮毛可奈比沼 今者許藝乞菜</mkana>
  <yomi>熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな</yomi>
</poem>

poem要素の例

たけち: こういう形式はDTDだったら、どう書けるかな?

さらら: えっ、え〜と、こうかしら。。。。。

さらら

<!ELEMENT poem (mkana, yomi)>
<!ELEMENT mkana (#PCDATA)>
<!ELEMENT yomi (#PCDATA)>


■ふたつのデータ型

たけち: そうだね。ところで、この例のデータ型は単純型とは言わないで、複合型(Complex type)って言うんだ。Complexて、複雑な、とか複合した、とかいう意味だね。ただ、単純型と複合型の意味の違いについては、次回以降で説明するから、データ型には単純型(Simple Type)と複合型(Complex type)の二種類がある、とだけ覚えておいてくれればいいからね。。

さらら: あぁ、そうなの。

たけち: XMLドキュメントのある要素の構造やその要素が持つ属性がどんな風になっていなくちゃいけないのかを指定(宣言)するのに、データ型というものを使うんだね。そして、そのデータ型には、単純型(Simple Type)と複合型(Complex type)があるってことだね。

たけち

さらら

さらら: うんうん。言葉としては分かるわ。でも、まだ具体的なイメージができないからなんだか、モヤモヤしちゃうわね。たけちのせいじゃないけど。

たけち: そうだね。じゃあこれをXMLスキーマで宣言したらどうなるのか見てみよう。

さらら: あっ、そうね。それがいいわ。

たけち: さっきのpoemの例をXMLスキーマで宣言すると次のようになるんだ。

XMLスキーマの例-3


さらら: あらららら。ずい分と込み入った感じね。あっ、だから、Complex Typeって言うのね。。。。。 (^ ^;

たけち: あっ、うっ。。じゃあ、ちょっと説明しておこうね。

4行目   poemという要素は、PoemType型です。
6-11行目 PoemType型は、mkanayomiという名前の要素を子供に持ちます。
13行目  mkanaという要素は、string型です。(文字列を持つ要素です)
15行目  yomiという要素は、string型です。(文字列を持つ要素です)

さらら: そうなの〜。。。<xsd:sequence>って何? refというのもよくわからないけれど…

たけち: それはもっと先に説明するから、おおざっぱな印象だけつかんでおいてね。

さらら: ふーん、XMLスキーマだと要素を宣言するためには、なんでもまずデータ型がないといけないのね。

たけち: そうなんだよ。このあたり、なんでもまずクラスというデータ型がないとプログラミングできないJava言語なんかと似ている点の一つだね。ちなみにこれは一般的な意味での「定義」ということなんだけれど、XMLスキーマの世界では厳密にはこれは「定義(definition)」と言わずに「宣言(declaration)」と言うんだよ。
 ■要素を宣言するためには、まずデータ型が必要
 ■要素の構造はデータ型が決めている

 ということが今回、言いたかったことなんだ。

さらら: あら、またJava?!

たけち


■参考までに Javaのデータ型の例

たけち: う〜ん。そんなに嫌わないで。参考までに、Javaだったらどうなるのか載せておくね。

class PoemType {
    String mkana;
    String yomi;

  PoemType(String mkana, String yomi) {
    this.mkana = mkana;
    this.yomi = yomi;
  }
}
・・・・・・

PoemType poem;

poem = new PoemType("熟田津尓・・・", "熟田津に・・・");

・・・・・・

さらら: やっぱり、全然わかんないわね。。 (^ ^;

たけち: わかる必要はないから、眺めてみるだけでいいんだ。
Javaでは、String型の変数mkana、と、String型の変数yomi、の2つを持ったPoemTypeというクラス、つまりデータ型を定義するんだ。そして、そのPoemType型の変数としてpoemを定義しているんだね。

さらら: Javaなんて全然わからないし、まだXMLスキーマもよくわからないけれど、XMLスキーマにはデータ型が必要ってことだけはわかったわ。

たけち: うん、まずはそこから覚えてね。きょうはここまで。おつかれさま。

さらら: うっ、うん。ありがと。

→ 次回は、属性の宣言の基本です。。。。 (^ ^)v

さらら


XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。