Webアプリ開発事始 第18回

XMLとWebアプリケーション(1)
~XMLの基本
長谷川裕行
有限会社 手國堂

XML文書を作る

簡単なXML文書を例に、基本的な書き方を説明します。


- 社員名簿をXMLで表現する -

社員のデータを表示するXML文書を作ってみます。社員1人の情報は、以下のような要素で表現されるとします。

番号 氏名 所属 役職

 リスト1は、
  番号1001番の山中総務部長
を表現したもので、ファイル名は“members01.xml”となっています。XMLファイルの拡張子は.xmlです。リストを上から順に見ていきましょう。

  <?xml version="1.0" encoding="Shift_JIS" ?>

XML文書は必ずこの1行で始まります。versionはXMLのバージョン指定、encordingは文字コードの指定で、ここではShift JISを指定しています。

  <?xml-stylesheet type="text/xsl" href="members01.xsl" ?>

XML文書をブラウザで表示する場合、何も指定しないとタグを含めたソースコードがそのまま表示されてしまいます。情報の本体だけを表示させるには、表示方法を指定したスタイルシートを指定します。スタイルシートは、XML文書をブラウザで表示させるときに、その内容を整形するテンプレートです。

typeでスタイルシートの種類、hrefでスタイル定義ファイルの場所と名前を指定します。ここでは、xmlファイルと同じディレクトリにある“members01.xsl”を指定しています。スタイルシートの拡張子は.xslです。

リスト1:山中総務部長の情報を記録したXMLファイル~members01.xml

※ サンプルでは“members00.xml”というファイルになっています。


- タグとエレメント -

XML文書は、タグで項目を示し、その間に項目の値を記述する形となります。タグで挟まれた項目をエレメント(element)と呼びます。

タグはエレメントを示すために用いられ、エレメントの値(項目の内容)を記述したら必ず</タグ名>という形で閉じなければなりません。エレメントの前に記述するタグを「開始タグ」、閉じるためのタグを「終了タグ」と言います。

  <番号>1001</番号>

という記述は、

  項目名「番号」の値が“1001”という文字列

であることを示しています。

リスト1では、「番号」の項目に続けて「氏名」「所属」「役職」の各項目を列挙しています。

<番号>の記述の上に<社員>というタグがあり、<役職>の記述の下には</社員>という閉じるタグがあります。<社員>~</社員>で囲まれた範囲(番号、氏名、所属、役職の各項目の記述)もまた「社員」というエレメントで、ひとまとまりのデータであることを示しています。例では、ここでは1人の社員の情報を表したものとなります。さらに、その社員の情報が「番号、氏名、所属、役職」の各エレメントから構成されていることになります。


- フィールドと値の記述 -

タグと表現している内容とを照らし合わせれば、HTMLのタグが画面表示を目的としたものであるのに対して、XMLのタグがデータの構造を表すためのものである――ということがお分かりいただけるでしょう。

このようにXML文書では、記述者が独自に定義したタグによって項目とその値を直接記述できます。この「項目とその値」という形式は、データベースのテーブルを構成する「フィールド(列)とその値」と捉えることもできます(実際には、もっと複雑な構造もXMLで表現できます)。

文書中で用いた<社員>や<番号>などのタグについて、その意味や関係をDTDに記述できます。しかし、ここではDTDを省略して整形済(well-formed)XML文書としています。この場合、タグによって示したデータ構造――「社員」という枠組みの中に「番号」や「氏名」などの項目がある――は表示に反映されますが、その構造が正しいかどうかは検証されません。

リスト1では1件分のデータ(社員1人分の情報)だけしか記述していないため、検証の必要はないでしょう。しかし、もっと複雑な構造のデータを何十~何百件と記述した場合、個々の値の記述間違いや他のデータとの矛盾(タグで示した項目の順序が入れ替わっている――など)を検証する必要が生じます。特に、異なる組織間や異なるシステム間で大量のデータを受け渡しする場合は、その整合性を検証できるようにしておかなければなりません。


トップページ
拡張可能な言語
XMLのメリット
XMLの基本事項
XML文書を作る
社員名簿をXMLで表現する
タグとエレメント
フィールドと値の記述
スタイルシート
あとがき

Copyright © GrapeCity inc. All rights reserved.