XMLマスターへの道
〜「XMLマスター:ベーシック」試験対策〜
第4回 すべてのXML文書は整形式である
武田栄子
ウチダ人材開発センタ
2003/2/14
今回は、前回 (「第3回 XML文書の要素、エンコーディング、宣言」)の解説の続きです。また、前々回(「第2回 XMLの概要と起源、関連規格」)に出題された下記の問題の解答も紹介します。
今回の問題 | ||||||||||||
(Q1) 整形式XML文書をすべて選択してください。なお、文字エンコーディングは合っているものとします。
|
||||||||||||
(Q2) 以下のXML文書で要素を表しているものを1つ選択してください。
|
前回は、この問題に解答するうえで必要な知識のうち、下記の5つについて解説しました。
- XML文書
- XMLパーサ
- 要素
- 文字エンコーディング
- XML宣言
今回は、残りの下記6つについての解説です。
- 命名規則
- 属性
- ルート要素
- 定義済み実体
- コメント
- well-Formed XML(整形式XML)
まず、下記に説明のサンプルで使うXML文書の基になる社員データを示します。前回と同じものです。
|
||||||
表1 XML文書の基になる社員データ (emp) |
XMLの特徴として、目的に合わせたタグ (正確には要素名) を利用者が作成できると、「第2回 XMLの概要と起源、関連規格」で解説しました。ただし、まったく自由にタグを作成できるわけではなく、一定条件の命名規則に従ったうえで名前を付けるよう規定されています。XML文書内の名前として利用できる文字は、XML 1.0仕様「Appendices B Character Classes」下の個条書きリストに規定されています。
試験対策のポイントとして、XML文書内で名前として使ってはいけないケースを下にまとめました。
- 全角英数字、半角カナ、丸付き数字を含んではいけない
- 1文字目に数字は使えない
- 「XML」から始まる名前は大文字小文字の組み合わせを問わず、予約されているので使えない
名前の開始文字として使える文字は下記のとおりです。ただし、コロン「:」は名前空間でセパレータとして使うため、名前の中に含めることはお勧めしません。
- Letterクラス(Character [84]) の文字(半角英字、ひらがな、全角カナ、漢字など)
- _ (アンダースコア)
- : (コロン)
前回、非ASCII文字を処理できるようにシフトJISで文字エンコーディング宣言をしたので、表2を参考に要素名を日本語に変更してみましょう。
|
||||||||||||
表2 要素名を日本語へ変更 |
<?xml version="1.0" encoding="Shift_JIS"?> |
リスト1 要素名を日本語に変更した後のXML文書(test3_08.xml) |
XMLでは要素に対して付加情報を追加したい場合、属性を記述することができます。属性は開始タグの要素名に空白を入れ、
属性名="属性値"
の形式で記述します。「=」と属性値を省略することはできません。前述の「XML宣言」内の各宣言と同様に、属性値は=の右辺にある値は二重引用符 「"」または一重引用符 「'」 でくくります。なお、属性名の命名規則は前述の要素に対する「命名規則」と同じです。
<要素名 属性名="属性値"> |
属性の構文 |
図1 属性を構成する各部の名称 |
1つの要素の中に要素名と同じ属性名を記述することは可能ですが、XML文書の設計上はあまり望ましくありません。
<root root="abc"/> |
リスト2 要素の中に要素名と同じ属性名を使う(test3_09.xml) |
1つの要素の中に複数の属性を含めることは可能です。その場合、直前の属性値の後ろに空白を入れて属性を記述します。
<root attr01="abc" attr02="def"/>
|
リスト3 要素の中に、複数の属性を含める(test3_10.xml) |
ただし、1つの要素の中に同じ属性名を持つ属性を含めることはできません。
<root attr01="abc" attr01="def"/>
|
リスト4 要素の中に、同じ属性名を複数含めることはできない(test3_11.xml) |
いままでの解説を参考に、社員要素の付加情報として社員番号属性を追加しましょう。山田太郎氏の社員番号を5とした場合をリスト5に示します。
<?xml version="1.0" encoding="Shift_JIS"?> |
リスト5 社員要素の付加情報として、社員番号属性を追加したXML文書(test3_12.xml) |
今度は、リスト5に山田太郎氏以外の社員を1件追加してみましょう。ところが、リスト6をInternet Explorerで表示しようとすると、エラーが返ってきます。
<?xml version="1.0" encoding="Shift_JIS"?> |
リスト6 社員データを1件追加したXML文書。ところが、このXML文書はエラーを引き起こす(test3_13.xml) |
原因は、ルート要素が2つあるためです。1つのXML文書の中では最上位の親要素は1つのみ存在するようになります。この最上位の親要素のことを「ルート要素」といいます。1つの文書内でルート要素の数が0個、または2個以上存在するときは、エラーとなります。リスト6をよく見てみると、ルート要素が2つあることが分かります。
<?xml version="1.0" encoding="Shift_JIS"?> |
リスト6' 最も上位となるべきルート要素(ここでは社員要素)が、リスト6には社員を追加したことで2つできてしまった(test3_13.xml) |
これを解決するためには、ただ1つの最上位の要素を作らなければなりません。リスト7では、社員要素よりさらに上位の要素として社員データ要素を定義し、すべての社員要素はこの子要素となるようにしました。
<?xml version="1.0" encoding="Shift_JIS"?> |
リスト7 上位の要素を追加することで、エラーを回避する(test3_14.xml) |
マークアップの命令開始文字である「<」を含んでいる文字データを記述するケースについて考えていきましょう。例えば、“<element>”という文字データをXML文書の中に内容として書きたいと思い、リスト8のように記述すると、エラーとなってしまいます。
<root><element></root> |
リスト8 内容に“<”を含む文字列を書きたいのだが……(test3_15.xml) |
XML 1.0仕様では、“<”を含むさまざまな記号文字を、「&実体名;」と記述して扱うことができます。こうした仕様で予約されているものを「定義済み実体」といいます。なお、HTMLで空白を挿入したいときに使う「 」はXML 1.0仕様ではサポートされていません。表3にある5つのみが定義済み実体として存在しています。
|
||||||||||||
表3 定義済み実体 |
そして、いまの解説を基にデータを変更したものがtest3_16.xmlです。
<root><element></root>
|
リスト9 リスト8の内容を定義済み実体を用いて記述した(test3_16.xml) |
画面3 “<”を含む内容がきちんと表示される |
■コメント
コメントは、ほかの言語と同様に補足説明を入れたり、コメントを入れた個所を一時的に処理対象外とする目的で使われます。複数行にまたがってコメントに含めることもできます。
<!--コメント文--> |
コメントの構文 |
なお、XMLパーサはコメント内のデータを文字データの解析対象外として扱います。そのため、コメント内に「<」や「&」などの特殊記号をそのまま記述しても、エラーとなりません。
<root> |
リスト10 コメント内には特殊記号をそのまま記述してもいい(test3_17.xml) |
今回のテーマタイトルである「well-formed XML (整形式XML)」について解説します。well-formed XMLとは、XML 1.0仕様で規定されている文法に従って記述されているテキストドキュメントです。最初に解説したXML文書のことを指しており、すべてのXML文書はwell-formed XMLとなります。
well-formed XMLに適用される規則のことを「整形式制約」といいますが、この制約がいままで解説してきた事柄です。整形式制約に違反した場合「致命的エラー」としてアプリケーションに伝えなければいけません。
XML文書を制約という観点からみると、well-formed XML以外に「valid XML(妥当なXML)」がありますが、こちらは次回に解説します。
■問題の解答
問題の解答は次のとおりです。先述の解説を読み直し、試験に向けて備えてください。
(Q1) 整形式XML文書をすべて選択してください。なお、文字エンコーディングは合っているものとします。
答えは(a)(d)です。整形式XML文書に関する解説は、「well-formed XML」が参考になります。
(a) : 整形式制約を満たしています(参考になる解説 「XML宣言」「要素」「属性」)。
(b) : XML宣言のキーワードはすべて小文字で記述します。「<」のような特殊記号を文字列として扱いたいときに、特殊記号を直接記述するとエラーになるので定義済み実体などを利用します(参考になる解説
「定義済み実体」)。
(c) : 1つの文書内でルート要素は1個のみです(参考になる解説 「ルート要素」)。
(d) : 文字エンコーディングが適切に指定されていれば、日本語の文字を要素名に指定できます(参考になる解説 「命名規則」「要素」)。
(e) : 名前の開始文字に数字は使えません(参考になる解説 「命名規則」)。
(f) : XMLでは大文字小文字を識別するため、開始タグと終了タグの要素名は大文字小文字の組み合わせが完全に一致しなければなりません(参考になる解説
「要素」)。
なお、Q1の選択肢ファイルを用意していますので、時間のある方は整形式のXML文書となるように修正してみるといいでしょう(※Windows上で編集できるように、文字エンコーディングをシフトJISへ変更しています)。
(Q2) 以下のXML文書で要素を表しているものを1つ選択してください。
答えは(f)の<book isbn="012-345-6789">XMLマスター:ベーシック対策</book>です。開始タグ、終了タグ、内容、属性名、属性値の集まりが要素です(参考になる解説
「要素」)。
前回同様、記事の最後に「まとめノート」を用意しました。このまとめノートには、試験対策のポイント、出題範囲となる仕様、参考になる@ITの記事のリンクをまとめています。
そして、次回のための予習問題を掲載します。次回はこの予習問題について解説していく予定です。
予習問題 | |||
(Q1) DTDについて正しく説明しているものをすべて選択してください。
|
|||
(Q2) 以下のDTDに妥当なXML文書をすべて選択してください。
|
○今回の試験対策のポイント
- XML文書
- well-formed XML
- XMLパーサ
- XMLの構文
- XML宣言
- 文書本体
- 要素
- 属性
- ルート要素
- 文字エンコーディング
- 命名規則
- 引用符
- 定義済み実体
- コメント
○今回の学習内容で出題範囲となる仕様
- Internet Explorer 5.0 以上
- サクラエディタ
- MSXML
Parser 3.0 Service Pack 2 Release
※ 別途、Xmlinst.exe Replace Mode Toolが必要になる場合あり(詳細は、Microsoft XML Parser Version 3.0 Releaseの新機能をご参照ください)
○今回の学習内容で参考になる@ITの記事
- 技術者のためのXML再入門 第4回 XML文書の構造を詳しく見ていく
- やさしく読む「XML 1.0勧告」 第1回 XMLの仕様書によると、XMLの目標とは…
- やさしく読む「XML 1.0勧告」 第2回 XML勧告読解に必須のEBNF
- やさしく読む「XML 1.0勧告」 第3回 XML仕様が目指す10のゴール
- やさしく読む「XML 1.0勧告」 第4回 XML仕様書で使われる言葉の意味
- やさしく読む「XML 1.0勧告」 第5回 「整形式」のXML文書 と文字の定義
- XMLを学ぼう 第1回 最短のXML入門とメタ言語
- XMLを学ぼう 第2回 XMLのカタチ
- XMLを学ぼう 第3回 現実のXML文書を見る
- XMLを学ぼう 第6回 Unicodeでも発生する文字化けの危機と回避
- XMLを学ぼう 第11回 多言語対応の問題と解決を考える
- XMLを学ぼう 最終回 XML仕様書の構造と読み方
- 新入社員のためのXML入門講座 XMLと関連仕様に強くなるために 〜 W3Cサイト徹底攻略法!〜 > XML 1.0の仕様書の読み方
- XMLの基礎を理解する10のポイント ポイント#1 XML文書はテキストデータである
- XMLの基礎を理解する10のポイント ポイント#2 タグがデータに意味を持たせる
- XMLの基礎を理解する10のポイント ポイント#3 XML宣言とDTDと本体
- XMLの基礎を理解する10のポイント ポイント#5 整形式な文書と妥当な文書
- Ask XML Expert タグの大文字小文字の区別、使える文字を教えて
- Ask XML Expert タグと要素 (エレメント) の違いを説明してください
- Ask XML Expert UTF-8とUTF-16の違いとは?
- Ask XML Expert MSXML3とは何? 何が変わるの?
- Ask XML Expert XMLパーサにはどんなものがあるの?
- Ask XML Expert UnicodeのXML文書はどのように作るのですか?
○今回の学習内容で参考になるXML用語集 (@IT XML用語事典より)
- BNF (Backus Naur Form)
- BOM (Byte Order Mark)
- CDATAセクション
- DTD
- EBNF (Extended BNF)
- MSXML
- PI (処理命令)
- UCS (Universal Multiple-Octet Coded Character Set)
- Unicode
- UTF-16
- UTF-8
- Xerces
- XMLパーサ
- XML宣言
- XML日本語プロファイル
- XML文書 (XML Document)
- インスタンス
- エンコード
- エンディアン
- シフトJIS (Shift_JIS)
- スタンドアロン文書
- タグ
- フラグメント (Fragment)
- ルート
- ルート要素
- 開始タグ
- 空要素タグ
- 終了タグ
- 整形式のXML文書 (Well-Formed XML Document)
- 属性 (Attribute)
- 妥当なXML文書 (Valid XML Document)
- 定義済み実体
- 文字参照
- 要素 (Element)
(5)valid XMLとDTDの関係 |
連載:XMLマスターへの道 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|