XMLスキーマの書き方-1 データ型

2002年6月2日(日)更新


■データ型

たけち: じゃあ、今回からXMLスキーマの書き方を学んでいこうね。

さらら: えぇ、お手柔らかにね。

たけち: うん。あんまり、形式ばった説明はしないからね。それに簡単なところから少しずつ見ていくから心配しないで。それに、XMLの構造についてはDTDのところで学んでいるから大丈夫だよ。

さらら: は〜い。(でも、もう忘れちゃったかも・・・・ (^ ^; )

さらら

さらら

たけち: 今回は、データ型について見てみよう。

さらら: データ型って?

たけち: うん。データがどんな特性をもっているかを表す言葉なんだ。たとえば、文字列とか整数とか日付とかね。

さらら: そうなんだぁ。

たけち: 前回に話したんだけど、DTDでは要素の内容として#PCDATAという任意の文字列を示すことくらいしかできなかったんだね。でもそれじゃあ、要素の内容が数値なのか日付なのかを区別しにくいから、XMLスキーマにはデータ型を使おうってことになったんだね。

さらら: そっかぁ。お話としては分かるんだけど、具体的にはどうなのかしら・・・・よくわかんないわ。


■簡単なDTDの例

たけち: そうだね。じゃあ、ごく簡単な例を考えてみようか。万葉集のテキストデータには、歌の番号がつけられてるよね。これって、文字列として考えるより、整数として考えるのが自然だよね。

さらら: えぇ、そう言われればそうだわね。あっ、そっか。DTDだと、歌の番号なんかも文字列として定義するしかないけど、XMLスキーマだと整数として定義できるってことなの?!

たけち: そうそう。そのことが分かったら具体的に考えてみよう。次の例を考えてみよう。

<number>32</number>

さらら

さらら

さらら: numberって名前の要素ね。

たけち: そうだね。じゃあ、さらら、これのDTDを書いてごらん。

さらら: えっ?! あぁ。。。えーと、えーと(^ ^; たけちぃ〜。

たけち: これのDTDは次のように書けるね。

<!ELEMENT number (#PCDATA)>

さらら: あ、そっ、そうね。。。(^ ^;

たけち: わかるよね。じゃあ今度は、次の1行だけのXML文書を見てみよう。

<yomi>熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな</yomi>

さらら: 額田の歌ね。yomiという名前の要素なのね。

たけち: じゃあ、これのDTDを書いてごらん。こんどは大丈夫だよね。

さらら: うん。さっきと同じように書けばいいのよね。

<!ELEMENT yomi (#PCDATA)>

たけち: そう、そのとおり。どう? さっきのと比べて。

さらら: そうねぇ。よく見るとただ名前が違うだけだわね。あっ、やっとわかったわ。DTDだと、number要素やyomi要素に数値が入るのか文字列が入るのか、といった区別がつかないわね。

たけち: だから・・・

さらら: XMLスキーマはこの点を解決したってことのね?!

たけち


■スキーマのデータ型を使ってみる

たけち: そういうことなんだよね。じゃあまず、さっきの最初の例をXMLスキーマで書くとどうなるか見てみようね。

<number>32</number>

XMLスキーマ 例-1

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="number" type="xsd:int" />

</xsd:schema>


たけち: もうひとつの例をXMLスキーマで書くとつぎのようになるんだよ。

<yomi>熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな</yomi>

XMLスキーマ 例-2

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="yomi" type="xsd:string" />

</xsd:schema>


■intとstring

さらら: えっ〜と。。。xsd:schemaという要素が最初にあって、その中にxsd:elementという名前の要素があるのね。それぞれの例だと、そのxsd:element要素で「numberという名前の要素はxsd:int型です」「yomiという名前の要素はxsd:string型です」というふうに定義しているのね。

たけち: そうだね。

さらら: ねぇねぇ、このintとかstringってどういう意味なの?

たけち: intintegerの略で整数のことだよ。それから、string文字列のことだよ。

さらら: ふ〜ん。知らなかったわ。なんだか難しそう・・・

たけち: うん。でもね、これはプログラミング言語の世界から見れば不思議なことではなくて、あたりまえのことなんだよ。さららはJavaってプログラミング言語は知ってる?

さらら: うーん、名前だけは聞いたことがあるけれど…

たけち: 別にJavaのことを勉強するわけではないから、さらっと聞き流して欲し いけれど、Javaではこんなふうに変数を定義したりするんだ。

さらら

int number;
number = 32;

String yomi;
yomi = "熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな";

たけち: この場合、numberという変数に32という数値を代入しているけれども、この numberという変数が数値のための変数であることを示しているのが、intというデータ型なんだ。

さらら: そうなんだぁ。プログラムの世界では普通のことなのね。

たけち: それから、yomiという変数に「熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな」という文字列を代入しているけれども、このyomiという変数が文字列のための変数であることを示しているのが、Stringというデータ型なんだ。いままでのことを簡単に図にしておくから参考にしてみて。

さらら

XMLスキーマのデータ型の例

さらら: そうだったのね。XMLスキーマのデータ型って、Javaの定義と似たような感じなのね。

たけち: そう、こういう一般的なプログラミング言語と同様の考え方でXMLスキーマは決められているんだ。Javaのようなオブジェクト指向プログラミング言語と似ている点はこれからもっと出てくるけれど、それはこれからゆっくり勉強していこうね。

さらら: えぇ・・・・ (^ ^*

たけち: じゃあ、今回はこれでおしまい。

さらら: ありがとね。

→ 次回はデータ型(2)です。。。。 (^ ^)v


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