XMLマスターポイントレッスン ~ ベーシック編 ~
第2回 XML文書の作成
インフォテリア認定教育センター 森田浩美 MORITA, Hiromi
前回は、ベーシックV2試験の概要からXMLの重要性や特徴、XMLの関連技術について解説しました。XMLは単にXML文書を記述するための仕様であり、ソリューションとして提供する場合にはいろいろな関連技術が必要となることがお分かりいただけたと思います。今回は、XMLで最も基本的かつ重要である「要素」について説明します。要素は、ベーシックV2試験のセクション2にあたる「XML文書の作成」を攻略する上での必須知識です。しっかりと学習しておきましょう。
XML文書の基本となる「要素」
今回は、ベーシックV2試験のセクション2「XML文書の作成」について解説します(表1)。
表1:XMLマスター試験の試験概要
試験名 | XMLマスター:ベーシック V2試験 | XMLマスター:プロフェッショナル V2試験 | |
試験時間 | 60分 | 90分 | |
---|---|---|---|
出題数 | 50問 | 40問 | |
合格基準 | 70% | 80% | |
受験料(税込) | \15,750 | \15,750 | |
出題範囲 | セクション1 | XML概要 | DOM/SAX |
セクション2 | XML文書の作成 | DOM/SAXプログラミング | |
セクション3 | DTD | XSLT | |
セクション4 | XML Schema | XML Schema | |
セクション5 | XSLT、XPath | XML処理システム構築技術 | |
セクション6 | 名前空間 | XML要素技術の活用 |
ここでポイントになるのは「要素」です。要素という言葉は、前回も幾度となく出てきましたが、XML文書でデータを表わす際の基本単位となるものです。要素は「開始タグ」「内容」「終了タグ」の3つで構成されます。
開始タグは<要素名>で表わし、終了タグは</要素名>で表わします。要素名は基本的に自由に決めることができ、内容には文字列や数値、ほかの要素などを記述できます。最も小さいXML文書は、要素が1つだけで構成されます(図1)。これでも立派なXML文書です。
要素の記述上の注意点
要素の記述には、いくつか注意する点があります。この注意点を守らないと、正しい要素とは言えません。
開始タグと終了タグの要素名は一致するべし!
開始タグと終了タグの要素名は必ず一致する必要があります。要素名は、大文字/小文字を区別します。また、半角/全角も区別します(図2)。要素名には日本語も使えますが、開始タグは漢字の要素名で終了タグはひらがなの要素名というのは、もちろん間違いです。
開始タグや終了タグ内での空白に注意するべし!
開始タグの「<」と要素名は必ず連続して記述します。間に空白/タブ/復帰/改行を入れることはできません。終了タグの「<」と「/」の間、「/」と要素名の間も同様です。また、要素名の文字と文字の間にも空白などは入れられません。
しかし、開始タグや終了タグの終わりを示す「>」の前には、空白/タブ/復帰/改行を入れることができます(図3)。ただし、空白などを入れる場合にはいくつもの制限がありますので、「<」から「>」までは一気に記述するほうが良いですね。
要素名の1文字目に数字は避ける
要素名は自由に記述できますが、要素名に使用できる文字の種類には制限があり、その制限に従って要素名を付ける必要があります(表2)。先頭文字に数字やピリオドなどは使用できません(図4)。
表2:要素名に使用できる主な文字
文字位置 | 使用可能な文字 |
名前の先頭 | アルファベット、ひらがな、全角カタカナ、漢字、半角英字、アンダースコア(_) |
---|---|
2文字目以降 | 先頭で使用できる文字 半角数字、ピリオド(.)、ハイフン(-) |
要素の内容
要素の内容として、文字列や数値を記述できます(図5)。さらに、要素の内容にはほかの要素(「子要素」と呼びます)を記述することもできます(図6)。これにより、XMLの特徴である階層的なデータ構造が実現できるのです。図6では2階層ですが、3階層でも4階層でも自由に記述可能です。この点はRDBのテーブル(表)と異なる点です。
また、逆に要素の内容に何も記述しないこともできます。例えば、<要素名></要素名>と記述すれば、要素の内容が何もないことを表現できます。もっと簡単な方法として、<要素名/>という記述方法もあります。この記述法では、開始タグと終了タグの両方を記述しなくても良いため、記述量が削減できる上、明示的に要素の内容が何もないことを示すことができます。< 要素名/>のように簡略化した記述を「空要素タグ」と呼びます。
ここまでで、要素の記述方法の注意点について一通り解説しました。以降では、XML文書の作成ポイントを説明します。
XML文書作成のポイント
要素の内容に記号を使用したい場合
要素の内容に文字列や数値を記述できることは説明しました。では、要素の内容に記号を使用したい場合はどうなるのかを、これから考えていきたいと思います。
例えば、次のようなXML文があったとします。
<sample>
<calculation>a1*b2</calculation>
<calculation>a1<b2</calculation>
<calculation>a1>b2</calculation>
</sample>
このうち、正しくないcalculation要素が1つあります。どのcalculation要素がエラーとなるか、分かるでしょうか。
実際にXML 文書を作成して確認する場合は、メモ帳などのエディタでこのXML文書を記述し、拡張子を「.xml」として保存してください。作成したファイルをInternetExplorer(以下、IE)で開き、XML文がブラウザに表示されれば、正しい記述となります(後述)。
では、1つ目の「*」が使用されている要素から説明を始めましょう。SQL文では、「*」はワイルドカードとしてよく使用しますよね。XMLでは、要素の内容として「*」を記述した場合は、文字の「*」と解釈されます。し
たがって、SQL文のようなワイルドカードの意味は持ちませんが、要素の内容に記述できる文字の1つです。そのため、正しい要素の記述となります。
2つ目、3つ目はどうでしょうか。「<」や「>」は開始タグや終了タグで使用する文字のため、要素の内容としては記述できないのでは?と思った方も多いのではないでしょうか。そうです!どちらかの要素の記述がエラーとなります。でも、「<」も「>」も両方とも開始タグや終了タグで使用する文字です。どちらの文字を使用するとエラーとなってしまうのでしょうか……。
謎を解くカギは「XMLパーサー」
この謎を解くカギは、「XMLパーサー」にあります。XMLパーサーとは、XML文書がXMLの文法に従って記述された正しいXML文書(XMLの仕様では「整形式XML文書」と呼びます)か正しくないXML文書かを判断(解析)するソフトウェアです。先ほど、「実際にXML文書を作成して確認する場合は、IEを使用してください」と説明しましたが、IEには、XMLパーサーが標準で組み込まれているため、XML文書を開いたときに解析が行なわれます。そして、正しいXML文書の場合はブラウザにXML文書の内容を表示し、エラーの場合はエラーメッセージを表示します。
ブラウザを使用せずに、プログラム内で解析を行なわせて処理したい場合などは、ベンダから出荷されているXMLパーサーを組み込んで使用します。
XMLパーサーは、XML文書の先頭かつ記述の左から順番に解析を行ないます。XML文書内に「<」が出現したら、次の文字が要素名に記述可能な文字かどうかをチェックし、正しい場合は開始タグの始まりと判断します。その後は、出現文字が要素名に記述可能な文字かどうかのチェックを「>」が出現するまで行ないます。出現文字が「>」の場合、開始タグの終わりと判断し、次の文字からは要素の内容として記述可能な文字かのチェックを繰り返します。「<」と「/」が連続で出現したら終了タグの開始と判断し、開始タグ同様、次の文字が要素名に記述可能な文字かどうかをチェックし「>」が出現すると終了タグの終了と判断します。
では、先ほどのcalculation要素で説明します。2つ目のa1<b2の場合、開始タグについては「<」が出現し、次に「c」という記述可能な文字が出現したため、開始タグが始まったと判断し、次の出現文字のチェックを「>」が出現するまで行ないます。ここまでは正しい記述であると判断されます。
続いて、要素の内容のチェックに入り、「a1」までは正しい記述と判断されますが、その次に「<」が出現したとき、ここからまた開始タグが始まったと判断します。XMLパーサーは、「<」を開始タグの始まりと判断するのでしたね。したがって、次のb2は要素名と判断され、その次に出現する「<」(</calculation>の<)を解析したときに、要素名の中に「<」は記述できないというルールのためエラーと判断されます。
では、3つ目のa1>b2の「>」はどうなのでしょうか。「>」は、そのまま要素の内容として判断されます。これは、要素の内容に「>」のみが出現しても、必ずペアとして記述される「<」または「</」が出現していないため、文字の「>」として判断されるからです(開始タグや終了タグの終わりとして判断しない)。
この結果、要素の内容として記述した場合にエラーになる記号は「<」が正解です。XMLパーサーの解析手順を知ると、このように謎が解けると言うわけです。
「<」を要素の内容に記述する方法
ここまでで、「<」を要素の内容にそのまま記述したらエラーになってしまうことが理解できました。でも、これでは「<」を記述したい場合に対応できません。では、要素の内容に「<」を記述したい場合は、どうすれば良いのでしょうか。
正解は、XMLの仕様に定義されている「定義済み実体参照」を使用します。これは、簡単に言えば置換文字のことです。つまり、「<」を要素の内容に直接記述するとエラーとなるため、置換文字を使って記述しようというわけです。「<」は、定義済み実体参照では「<」と記述します。
「<」の「lt」とは、XMLの仕様であらかじめ決められた「実体名」と呼ばれるものです。次のように、その実体名の前に「&」を、後ろに「;」を付けて、定義済み実体参照として記述します。
<calculation>a1<b2</calculation>
実体名の「lt」のみ要素の内容に記述をすると、文字列の「lt」なのか実体名の「lt」なのかをXML パーサーが判断できないため、定義済み実体参照を表わす場合は必ず「lt」の前に「&」、後に「;」を付けています。
これで、「<」を開始タグや終了タグの終わりを示す「<」ではなく、文字の「<」として解釈させることができます。定義済み実体参照は、「lt」も含め、合計5つ定義されています(表3)。
表3:定義済み実体参照
実体 | 実体名字 | 表記方法 |
〈 | lt | < |
〉 | gt | > |
& | amp | & |
" | quot | " |
' | apos | ' |
要素の内容に「&」を記述する場合は要注意
それでは、要素の内容に「&」という文字を記述したいときはどうなるでしょうか。そのまま「&」と記述すると、XMLパーサーは定義済み実体参照を表わしていると誤判断してしまいます。要素の内容に文字として「&」を記述するときには、気をつけなければいけません。
定義済み実体参照で使用する「&」は必ず実体名の後に「;」が出現するため、文字の「&」を表わす場合には、そのまま記述してしまうと「;」が出現しない場合はエラーとなります。また「;」が出現しても実体名(置換文字列)が定義されていない場合もエラーとなります(図7)。したがって、文字としての「&」を記述するときは、定義済み実体参照を使用して「&」と記述します。
今月の確認問題(セクション2:XML 文書の作成)
いかがでしたでしょうか? ここまで、XML文書の基本となる要素と、要素の内容に記述できる文字について説明してきました。今回解説した内容が理解できたかどうか、確認問題で試してみましょう。
問題1
次のXML文書から「要素」を選択してください。
<book>XML Master Basic</book>
- <book>
- </book>
- <book></book>
- <book>XML Master Basic</book>
解説
要素は、開始タグ、内容、終了タグの3つで構成されます。Aは開始タグ、Bは終了タグ、Cは開始タグと終了タグの記述です。したがって、Dが正解です。
問題2
XMLの仕様として正しい記述を選択してください。
- 内容を持たない要素を記述する場合には、必ず「<要素名/>」と記述しなければならない
- 要素名には日本語を記述できる
- 要素名は大文字・小文字を区別する
- 要素名の間は見やすいように、空白や改行で区切って記述してもよい
解説
要素が内容を持たない場合の記述方法は2種類あります。「<要素名></要素名>」か「< 要素名/>」です。要素名には日本語も記述できますが、英字の場合は大文字/小文字を区別します。また、要素名の間には、空白や改行を入れることができません。したがって、BとCが正解です。
問題3
次のXML文書の中から、正しいXML 文書を選択してください。
- <book1>
<isbn>1234567890</isbn>
<name>XML Master Basic >2006<</name>
</book1> - <book1>
<Isbn>1234567890</isbn>
<Name>XML Master Basic >2006<</Name>
</book1> - <1_book>
<isbn>1234567890</isbn>
<name>XML Master Basic>2006<</name>
</1_book> - <book>
<isbn>1234567890
<name>
</isbn>XML Master Basic>2006<
</name>
</book>
解説
Bは、要素名の大文字/小文字が統一されていません。Cは、要素名の1文字目に数字が使用されています。また、「<」を直接要素の内容としては記述できません。Dは、要素の内容に要素を含める場合は、要素の単位で記述しなければいけません。isbn要素の内容に、name要素の開始タグと要素の内容が含まれていますが、終了タグが含まれていないため誤りです。したがって、Aが正解です。
* * *
今回は、XML文書の作成の中から、要素と定義済み実体参照について説明しました。XML文書は、要素を基本単位として記述していきますので、要素については確実に理解しておくようにしてください。XML文書には、このほかにも、要素の付加情報として記述できる「属性」やメモとして記述できる「コメント」などがあります。今回は説明しませんでしたが、属性やコメントについても、各自でしっかり押さえておきましょう。
次回は、XML文書の設計図(スキーマ)について説明します。
森田浩美(もりたひろみ)
株式会社日立システムアンドサービス人財教育部に勤務。現在、インフォテリア認定トレーナーとしてXMLの講師や社内でJavaの講師を担当。最近は、毎日毎日仕事終わりのビールを飲むのを楽しみに、厳しく、いや優しく後輩を指導中!
<掲載> P.172-175 DB Magazine 2006 March