Webアプリ開発事始 第19回

XMLとWebアプリケーション(2)
~データベースとXML
長谷川裕行
有限会社 手國堂

表形式でレコードを表示する

先に少し触れたように、XMLの各要素は入れ子にできました。通常、単純なテーブルの形式では、フィールドの値が入れ子になることはありません。要素の入れ子は、リレーショナル・データベースで、あるフィールドが別のテーブルのフィールドと関連付けられている状態に対応しています。


- リレーションされたテーブルのデータ -

例えば、以下のような構造のデータベースがあったとします。

受注
 ├ 受注番号
 ├ 日付
 ├ 発注元 (1)
 │  ├名称 (2)
 │  └連絡先 (2)
 ├ 品番 (3)
 │  ├品名 (4)
 │  └単価 (4)
 └ 数量

(1) 発注元マスターテーブルを参照
(2) 参照先の発注元マスターテーブルのフィールド
(3) 商品マスターテーブルを参照
(4) 参照先の商品マスターテーブルのフィールド

このようにデータベース処理では、

  発注元マスターテーブル(発注元番号、名称、連絡先)
  商品マスターテーブル(品番、品名、単価)

と、2つのマスターテーブルを元に、

  いつ(日付)、どの発注元から、どの商品を、いくつ(数量)

受注したかを示すレコードを記録していきます。

この記録をXML文書にすると、リスト7のようになります。

リスト7:受注データを記録したXML文書~juchu.xml


- <TABLE>タグで表示する -

このような複雑な構造のXML文書を表示するには、HTMLのテーブル(表)が適しています。XSLスタイルシートで表形式の出力を得るには、<TABLE>タグを用いるのが最も簡単です。

<TABLE>~</TABLE>タグでテーブルの構造を定義した中に<xsl:apply-templates select="//*" /> と記述しておき、その後で<xsl:template match="受注">として「受注」要素以下の項目を取り出して、<TD>~</TD>の間にテーブルの要素として以下のように記述します。

  <xsl:value-of select="受注番号"/>

リスト8がスタイルシート、表示結果が画面2です。

リスト8:複雑なレコードをテーブル表示するスタイルシート~juchu.xsl

画面2:juchu.xmlをInternet Explorerで表示した結果



DTDからXML Schemeへ

DTDは、複雑な構造のデータベースを扱う際に便利ですが、いくつか面倒な点があります。そこで、DTDの短所を補うデータ定義の手段としてXML Schemeが提唱され、W3C勧告となっています。


DTDの短所

DTDの短所の1つは「データ型を指定できない」ということです。最終的には#PCDATAという指定で、その要素が値を持つということしか指示できません。

また、閉じるタグを使わないなど、書式がXML文書と異なる独自の形式であることも、記述の分かりにくさを助長しています。

これは、元々DTDがXML用ではなくSGMLの構造定義から受け継がれたものであるためです。そこで、XML文書のデータ構造定義用書式として、XML Scheme(スキーマ)の利用が推奨されています。

データベースでスキーマといえば、フィールドの様々な属性など、ある情報の構造を示す定義を指します。従ってDTDも、スキーマ言語のひとつです。XML Schemeも意味的には同じで、文書内で使われているタグの属性を指定できます。


XML Schemeの特徴

以下に、XML Schemeの特徴を掲げておきます。

データ型の指定
要素に対してint、long、doubleなどの数値型、time、dateTinmeなどの日付/時刻型、boolean(論理型)など様々なデータ型を指定できます。また、複数のデータを集めた新たなデータ型を定義できます。

要素の出現回数の指定
DTDでは+記号で1回以上の繰り返しを示せる程度ですが、XML Schemeでは1~2回、0~10回など、繰り返し要素の出現回数を細かく指定できます。

XML文書と同じ書式
XML SchemeはXML文書のための定義機能なので、XML文書と同じ書式です。

名前空間(namespace)の利用
DTDは名前空間とは無関係なため名前空間を参照できませんが、XML Schemeでは複数の名前空間が利用できます。


XML Schemeについては、以下のW3Cのドキュメントに詳しく記述されています。全文英語ですが、サンプルのソースが豊富なので、参考になるでしょう。

XML Schema Part0(総論) http://www.w3.org/TR/xmlschema-0/
XML Schema Part1(構造) http://www.w3.org/TR/xmlschema-1/
XML Schema Part2(データ型) http://www.w3.org/TR/xmlschema-2/


あとがき

XMLで複雑なデータベースを扱うための基礎知識を紹介しました。XMLを使えば、複雑なリレーションを設定したデータベースの処理結果をテキストデータとして送受信し、XSLによってそのままWebに提示できます。

次回は、JavaScriptを中心に、WebプログラミングでXMLを扱う手法を紹介します。

Downloadサンプルファイル (LZH形式 3.10 KB)


トップページ
XMLとテーブルの構造
DTDとデータ構造の定義
複数レコードの表示方法
表形式でレコードを表示する
リレーションされたテーブルのデータ
<TABLE>タグで表示する
あとがき

Copyright © MESCIUS inc. All rights reserved.