XMLの基本用語

2001年4月17日
アンテナハウス株式会社


XMLの意味

XMLとは情報を表現するための新しい方法です。XMLでは、これまでバイナリー形式というプログラムでしか処理できない形式で表現していた情報を、テキスト形式で表現します。

テキスト形式は、人間でも理解できる文字で情報を表現しますので、情報を処理するプログラムと情報自身を独立にすることができます。バイナリ形式の情報は、専用のプログラムで処理するしかなかったのですが、テキストになることで情報の共有や柔軟な加工が可能になります。

XMLの基本仕様と応用仕様

XMLの応用例

特定のデータ構造とは、次のような表形式データであればレコードとフィールドです。

表形式データ

次の例は、上の表をXMLで表現したものです。次の例で<表>、<データ>というようなタグセットを規定する仕様がひとつの応用仕様です。

<表>
<データ record="1">
	<日付>5月10日</日付>
	<勘定科目>交通費</勘定科目>
	<金額>1,260</金額>
	<備考>B社まで、タクシー</備考>
</データ>
<データ record="2">
	<日付>5月10日</日付>
	<勘定科目>交際費</勘定科目>
	<金額>15,000</金額>
	<備考>B社Aさんを接待</備考>
</データ>
<データ record="3">
	<日付>5月13日</日付>
	<勘定科目>会議費</勘定科目>
	<金額>900 </金額>
	<備考>喫茶店で打ち合せ</備考>
</データ>
<データ record="4">
	<日付>5月18日</日付>
	<勘定科目>交通費</勘定科目>
	<金額>320 </金額>
	<備考>麹町から飯田橋間</備考>
</データ>
<データ record="5">
	<日付>5月20日</日付>
	<勘定科目>資料費</勘定科目>
	<金額>3,000</金額>
	<備考>研修資料費</備考>
</データ>
<データ record="6">
	<日付>5月25日</日付>
	<勘定科目>資料費</勘定科目>
	<金額>2,000</金額>
	<備考>図書(ビジネス書)</備考>
</データ>
</表>

タグ

上の例では、<表>、<データ>などがタグです。<...>が開始タグ、</...>が終了タグ。

要素

XML文書の基本構成単位は要素です。要素は、開始タグ、終了タグ、内容からなります。

ひとつの要素は。

<要素型名>要素の内容</要素型名> 

例外は、内容をもたない要素である「空要素」です。例えば、HTMLで、横線を指定する<hr>のようなタグは内容を持ちません。XMLでは、<hr></hr>と書くか、<hr />と書きます。2つの表記方法は同等です。

XMLの基本仕様で要素型名に使える文字の種類が規定されています。半角アルファベット、漢字、ひらがな全角カタカナなどを使うことができます。しかし、全角アルファベット、半角カタカナを要素型名に使うことはできません。

要素の属性

要素には属性を持たせることができ、属性には属性値を指定できます。属性の指定は開始タグまたは空要素タグの中でのみ使用できます。

属性の記述形式: <要素型名 属性名="属性の値" ...(属性の数だけ繰返し)>

例1
<データ record="1">

では、record が属性名、「1」が属性の値です。

属性の順序は特に意味がありません。また、何を属性にし、何を要素にするかはXMLの応用仕様を設計する人の自由です。例2の(a)、(b)の2つの表現方法はXMLの基本仕様ではどちらも許されます。

例2.(a)
<paragraph font-name="MS明朝" font-size="12point">
段落の文字のフォントは明朝で、サイズは12ポイントです。
</paragraph>
例2.(b)
<paragraph>
	<font-name>MS明朝</font-name>
	<font-size>12point</font-size>
	段落の文字のフォントは明朝で、サイズは12ポイントです。
</paragraph>

XML文書の本文はテキスト形式です。

XMLの本文はテキスト(文字)です。但し、各種の符号化方式を使用することができますのでメモ帳などのプレーンテキスト・エディタで正しく表示できるとは限りません。

イメージ図形などのバイナリ形式ファイルは、通常は外部実体と言うもので定義し、本文中から実体参照します。

XML宣言

XML文書の先頭にはXML宣言を配置します。

XML宣言は必須ではありませんが、例えば文字符号化方式として、Shift_JIS等を使うときは必要です。省略すると、UTF-8またはUTF-16と見なされます。

例)文字符号化方式に、Shift_JISを指定する場合。
<?xml version="1.0" encoding="Shift_JIS" ?>

XMLの基本的なモデルはツリー構造です。

上の例は、次のツリーで表せます。

表 -+- データ -+- 日付
        |
        +- 勘定科目
        |
        +- 金額
        |
        +- 備考

XML文書の構造

XML文書は物理的には実体という記憶単位(ファイルなど)から構成されます。XML文書には必ず文書実体という実体が一つあり、ほかの実体は文書実体からたどることができます。

正しいXML文書には、「Well Formed」(整形式)XML文書と「Valid」(妥当な)XML文書の2種類があります。

(例)

 <?xml version="1.0">
 <!DOCTYLE 挨拶 SYSTEM "hello.dtd">
 <挨拶>
   <朝の挨拶>
   おはようございます。
   </朝の挨拶>
   <昼の挨拶>
   こんにちは。
   </昼の挨拶>
   <夜の挨拶>
   こんばんは。
   </夜の挨拶>
 </挨拶>

上の文書では、<挨拶>から</挨拶>の部分が、文書インスタンスになります。

WellFormedなXML

大雑把に言って次の3つの条件を満たすものがWell Formed(整形式)XML文書です。

  1. ルート要素がひとつで、他の要素はルート要素の子孫となる(ルート要素は他の要素に含まれない)。
  2. 開始タグと終了タグがセットになっている。HTMLのように終了タグを省略することはできない。
  3. ルート要素に含まれる要素は、互いに親子または兄弟の関係になっている。ひとつの要素の開始タグと終了タグが入れ違いにならない。

例(Well formed)

<root>
 <section>セクション1
  <paragraph>段落1-1</paragraph>
  <paragraph>段落1-2</paragraph>
 </section>
 <section>セクション2
  <paragraph>段落2-1</paragraph>
  <paragraph>段落2-2</paragraph>
 </section>
</root>

正しくない例(Not well formed)

<root>
 <section>セクション1
  <paragraph>段落1-1</paragraph>
  <paragraph>段落1-2</paragraph>
  </section>
 <section>セクション2
  <paragraph>段落2-1</paragraph>
  <paragraph>段落2-2</section></paragraph>
</root>
(正しくない理由)
<paragraph>の終了タグの前に<section> の終了タグがあります。

ValidなXML

Wellformedであって、さらに、「従うべき型」が指定され、その型にあてはまっているのがValidなXML文書です。

  1. DTD(Document Type Definition)というもので文書の型(構造)を定義します。
  2. 文書の型には、名前をつけます。
  3. 文書実体の先頭に文書型宣言「<!DOCTYPE xxxx ... >」を配置し、xxxxのところでXML文書が「従うべき型名」を指定します。
  4. 妥当性検証パーサーで、DTDに従って作られているかをチェックします。

注)最近は、型(構造)定義に、「RELAX」や「XMLSchema」が提案されています。

XMLパーサーとは

実体(ファイルなど)を読んでXMLの仕様に照らして文法的に正しいかどうかを確認し、アプリケーションに渡す機能をもつものがパーサーです。

パーサーではWellformed(整形式)基準に適合しているかだけを検証する機能をもつWellformed(整形式)パーサーと、Valid(妥当性)基準に当てはまるかを検証する機能をもつValidity(妥当性)検証パーサーがあります。

妥当性検証パーサーは、まず、文書型宣言で指定したDTDを読んで検証します。さらにXML文書インスタンスがそのDTDに従っているか否かを検証します。

基本用語

テキストとバイナリー
コンピュータでは文字に番号をつけて扱いますが、データとして文字と対応する番号を並べたものがテキスト形式です。テキストで表現したデータは人間が読むこともできますし、もちろん、プログラムで処理することもできます。それに対して、バイナリー形式では0,1の並びで情報を表現します。バイナリー形式のデータは対応するプログラムで処理しないと人間が理解できるようになりません。
文字符号化方式
番号付けした文字の集まりを「符号化文字集合」と言います。さらに、符号化文字集合をひとつまたは複数組み合わせて番号付けの枠組みを決めたものが文字符号化方式です。例えば、Shift_JISは、JIS X0201(1バイトのアルファベット文字集合とカタナカ文字集合)とJIS X0208(2バイトのアルファベット、かな、記号、漢字)を組み合わせる符号化方式です。
UTF-8
Unicodeの符号化文字集合を、アルファベットについては1バイト、漢字等については最大4バイトまでの可変長で表す符号化方式です。0から127番まではASCIIコードと同じです。
UTF-16
Unicodeの符号化文字集合を、2バイト固定長で表す符号化方式です。但し、2バイトでは6万4千字種が限界なので、一部で2つの2バイトコードを組み合わせて1文字を表すようにしたサロゲート・ペアというコードもあります。

改訂履歴

改訂日 改訂内容
2017年4月26日 マークアップを変更。W3CのHTMLバリデータで正しいHTMLになるように修正した。
2001年4月17日 XMLの意味と基本仕様と応用仕様の区別について追記。
2000年9月21日 XML文書の構造の項目を追加
2000年6月26日 初版設定