XMLマスターへの道
〜「XMLマスター:ベーシック」試験対策〜

第3回 XML文書の要素、エンコーディング、宣言

武田栄子
ウチダ人材開発センタ
2003/1/29

 前回 (「第2回 XMLの概要と起源、関連規格」)の最後に、予習として下記の問題を出題しました。XMLマスター:ベーシック試験の出題方法がイメージできたでしょうか?

問題
(Q1) 整形式のXML文書をすべて選択してください。なお、文字エンコーディングは合っているものとします。

(a)
<?xml version='1.0'?>
<root>
  <a b="c"/>
</root>

(b)
<?XML version="1.0"?>
<root>
  <expr>4<1</expr>
</root>

(c)
<社員 番号="0001">
  <名前>佐藤太郎</名前>
</社員>
<社員 番号="0002">
  <名前>山田花子</名前>
</社員>

(d)
<あいうえお/>

(e)
<予定>
 <10月20日>紅葉狩り</10月20日>
</予定>

(f)
<H1>見出し1</h1>
(Q2) 以下のXML文書で要素を表しているものを1つ選択してください。

「XML文書」
<book isbn="012-345-6789">
XMLマスター:ベーシック対策
</book>

(a) book
(b) <book>
(c) isbn="012-345-6789"
(d) XMLマスター:ベーシック対策
(e) </book>
(f) <book isbn="012-345-6789">XMLマスター:ベーシック対策</book>

 今回は、この問題に回答するうえで必要な知識となる、下記の11の内容について解説することで、XMLマスター:ベーシック試験に対応できるようにします。

  • XML文書
  • XMLパーサ
  • 要素
  • 文字エンコーディング
  • XML宣言
  • 命名規則
  • 属性
  • ルート要素
  • 定義済み実体
  • コメント
  • well-formed XML(整形式XML)

 今回の内容はかなりボリュームがありますので、2回に分けて解説します。この部分はそれだけ出題の頻度も高いカテゴリですので、この内容を確実に理解することが、XML マスター:ベーシック合格への近道です。

 余談ではありますが、筆者の経験からいいますと、このような資格試験では「デフォルト値は何か」を押さえておくと、いい成績が取れる傾向があります。ただし、デフォルト値を暗記するだけではつまらないし、すぐに記憶から消えてしまいます。そこで、今回は、表1の社員データをXMLで記述・修正することで、何ができて何ができないのか、トライ&エラーを繰り返すことで理解するように進めていきます。「今回の学習内容で実機確認を行うときに役立つフリーツール」をまとめノートの中で紹介しているので、必要に応じて入手して、試してみてください。

 問題の解答は、次回の解説が終了した後で掲載します。まず、解説で利用する社員データを下記に示します。

項目名 データ
name Taro Yamada
dept Sales
表1 XML文書の基になる社員データ (emp)

XML文書

 任意のデータに対してタグを追加することで、データに対して意味を持たせるのが「マークアップ」の役割であることは前回「XMLの概要と起源、関連規格 」で解説しました。それを踏まえ、表1の社員データを記述したのがリスト1のtest3_01.xmlです。test3_01.xmlはWindows標準のメモ帳や、記事の最後にあるまとめノートで紹介しているサクラエディタのような高機能エディタを使って記述できます(編集注:XML文書をシフトJISで記述する場合には、一般のエディタで問題なく記述できますが、UTF-8やUTF-16などの文字エンコーディングで記述する場合には、Windows 2000/XPに付属のメモ帳や、サクラエディタなどの、UTF-8やUTF-16に対応したエディタを使用する必要があります)。

<emp>
  <name>Taro Yamada</name>
  <dept>Sales</dept>
</emp>
リスト1 社員データをXML文書として記述(test3_01.xml

 Internet Explorer 5.0以上がインストールされているマシン上でtest3_01.xmlを表示すると、ツリー構造でマークアップされたデータが画面上に表示されます(画面1)。もしも画面2のようなエラー画面となった場合、ファイルの内容に何らかの記述ミスがありますので、データを見直してファイルの内容を修正してください。

画面1 test3_01.xmlをInternet Explorer 5.5 SP2上で表示

画面2 test3_01.xmlの記述にミスがあった場合、エラーが表示される

 リスト1は4行しか記述されていないシンプルな内容ですが、XML 1.0仕様に従って記述されています。このようなドキュメントのことを「XML文書」といいます。なお、今回は拡張子「xml」でファイルを作成しましたが、XML 1.0仕様ではファイルの命名規則を特に規定していませんので、拡張子は実際には何にしても構いません。

XMLパーサ

 リスト1のようなテキストドキュメントを読み込んで、XML 1.0仕様に従っているかを解析したり、テキストドキュメントの内容と構造を解析して、任意のアプリケーションへ処理を渡すソフトウェアを、「XMLパーサ」または「XMLプロセッサ」といいます(この2つの用語は同義ですので、以下の本稿では「XMLパーサ」で統一します)。逆を返せば、XML 1.0仕様はXMLパーサの振る舞いを定義したものともいえます。

 Internet Explorer 5.0以降では、マイクロソフト製のXMLパーサであるMSXMLが組み込まれているため、先ほどのように拡張子「xml」のテキストドキュメントを解析して結果を返すようになっています。しかしすべてのWebブラウザがXMLパーサを組み込んでいるわけではありません。そのほかのXMLパーサとしてはXerces、XML Parser for Java (XML4J)、Java API for XML Parsing (JAXP)、Oracle XML Developer's Kit (XDK)、iPEX、XTなど、さまざまなものがあります。

要素

 では、リスト1の内容を詳しく見ていきましょう。XML文書は、

<emp>〜</emp>

のように、マークアップの開始を表す命令から終了を表す命令までの集まりが組み合わされたファイルです。この情報の集まりのことを「要素」といい、XML文書の最小単位となります。図1は、要素の構成と名称を表したものです。試験対策のポイントとしては、要素を構成する各部品の名称を整理しておいてください。

 要素の内容には、文字データ、要素(要素の中の要素は「子要素」 として扱われます)、文字データと要素、が混在したデータを含めることができます。

図1 要素を構成する各部の名称

 XMLでは開始タグと終了タグは、必ず対で記述しなければならず、HTMLの<BR>のように終了タグを省略して記述することはできません。ただし、内容がない要素の場合、

<要素名/>

という形式の空要素タグを使って、記述することも可能です。下のリスト2とリスト3は、いずれも空要素を表すXML文書です。

<root></root>
リスト2 開始タグと終了タグの間に内容を含めない記述test3_02.xml

<root/>
リスト3 空要素タグを使って記述test3_03.xml

 そのほかXMLがHTMLと違うところは、XMLでは開始タグと終了タグの要素名で大文字小文字を識別する点です。HTMLでは要素名の大文字小文字の組み合わせが異なっていても、Webブラウザが開始・終了タグの組み合わせであると解釈してくれることもありますが、XMLでは大文字小文字が完全に一致していないとエラーとなります(リスト4)。

<emp>
  <name>Taro Yamada</name>
  <dept>Sales</dept>
</Emp>
リスト4 大文字小文字の組み合わせが一致していない場合(test3_04.xml

文字エンコーディング

 ここまで紹介したXML文書のサンプルはすべてASCII文字で記述してきましたが、XMLではさまざまな国の文字 (Unicode、ISO/IEC 10646にエントリされている文字) を扱うことができます。しかし表2のように、name要素とdept要素の内容をASCII文字から非ASCII文字へ変更すると、エラーとなります。

要素名 内容の種類 内容
emp 子要素 name要素、dept要素
name 文字データ Taro Yamada →山田 太郎
dept 文字データ Sales → 営業
表2 name要素とdept要素の内容を、ASCII文字から非ASCII文字へ変更

<emp>
  <name>山田 太郎</name>
  <dept>営業</dept>
</emp>
リスト5 内容を非ASCII文字に変更後のXML文書(test3_05.xml

 XML 1.0仕様では、XMLパーサはデフォルトの文字エンコーディングとしてUTF-8とUTF-16を処理できなければならない、と規定しています。そのため、Shift-JISやEUC-JPなどの文字エンコーディングを利用したい場合、XML文書内へ明示的にエンコーディング宣言を記述します。ただし、UTF-8、UTF-16以外の文字エンコーディングをXMLパーサが処理できるかどうかは、XMLパーサに依存します。文字エンコーディングは、XML宣言(後述)の中で記述します。

 なお、ASCII文字はUTF-8のサブセットなので、通常のASCII文字ではエンコーディング宣言を厳しく要求されません。

XML宣言

 XML宣言は、XML仕様のどのバージョンに従って記述されているかを宣言するものであり、XML文書内で最初に記述します。xml、version、encoding、standaloneは小文字を使って下の構文の順序で宣言し、=の右辺にある値は二重引用符 (")または一重引用符 (') でくくります。

<?xml
  version="XML仕様のバージョン番号"
  encoding="文字エンコーディング" 
  standalone="yes|no"?>
XML宣言の構文

宣言の種類 宣言の説明 必須or省略可能
version XML仕様のどのバージョンに従って記述されているかを宣言 必須(1.0を指定)
encoding どの文字エンコーディングを使って文字データを扱うべきかを宣言 省略可能。デフォルトは、UTF-8またはUTF-16
standalone 外部DTDを参照しないかどうかを宣言
※DTDについては次回解説
省略可能。デフォルトはno
表3 XML宣言の記述および説明

 XML仕様のバージョンが1.0、文字エンコーディングがUTF-8またはUTF-16、スタンドアロン文書宣言がnoをすべて満たしている場合、XML宣言自体の省略が可能です。

 今回はWindows標準の文字エンコーディングであるシフトJISを使って記述し、XML宣言を追加します(スタンドアロン文書宣言は記述しません)。

<?xml version="1.0" encoding="Shift_JIS"?>
<emp>
  <name>山田 太郎</name>
  <dept>営業</dept>
</emp>
リスト6 XML文書にXML宣言を追加したファイル(test3_06.xml
※UTF-8形式で保存したファイル(test3_07.xml
test3_07.xmlファイルをエディタで開く場合、UTF-8に対応していないと文字が化けてしまいます。Windows 2000/XP付属のメモ帳はUTF-8に対応していますが、それ以外の環境の場合、サクラエディタや秀丸などのUTF-8対応エディタを入手してください(Windows 9x/NTに付属のメモ帳はUTF-8に対応していません)。

 なお、参考ファイルとしてUTF-8形式で保存したtest3_07.xmlを用意しました。test3_07.xmlの中にencoding宣言がなくても正常にファイルをInternet Explorer上で実行できることを確認してください。

 次回は説明の続きとして、タグの命名規則、属性、ルート要素、定義済み実体、コメント、そして整形式のXML文書について解説します。

まとめノート:well-formed XML

 今回と次回に解説する内容の要点と、関連するリンクなどを紹介します。

○今回の試験対策のポイント

  • XML文書
  • well-formed XML
  • XMLパーサ
  • XMLの構文
  • XML宣言
  • 文書本体
  • 要素
  • 属性
  • ルート要素
  • 文字エンコーディング
  • 命名規則
  • 引用符
  • 定義済み実体
  • コメント

○今回の学習内容で出題範囲となる仕様

○今回の学習内容で実機確認を行うときに役立つフリーツール

○今回の学習内容で参考になる@ITの記事

○今回の学習内容で参考になるXML用語集 (@IT XML用語事典より)

(4)すべてのXM文書は整形式である

Index
連載:XMLマスターへの道
  (1)XMLマスター:ベーシック試験のレベルは?
  (2)XMLの概要と起源、関連規格
(3)XML文書の要素、エンコーディング、宣言
  (4)すべてのXM文書は整形式である
  (5)valid XMLとDTDの関係
  (6)模擬問題:XMLの基本
  (7)模擬問題:W3C XML Schema
  (8)模擬問題:DOM
  (9)DTDの実体宣言と記法宣言
  (10)XSLTの基本構造を理解する
  (11)XSLTで必須の制御命令を覚える
  (12)XPathによるノードの指定法を理解する
  (13)名前空間を理解しDOMの概要をつかむ
  (14)XML Schemaを利用したスキーマ定義
  (最終回)XML Schema―型の再利用と名前空間


連載:XMLマスターへの道


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間