khurata’s blog

khurata’s blog

XML と XHTML と HTML

(もともと「Yahoo!知恵袋」の「知恵ノート」だったものを転載しています)
(最終更新日時:2014/3/30)投稿日:2012/3/17

はじめに

 ここ「知恵袋」のコンピュータ関連カテゴリで、定番の質問としてよく見かけるのが、XMLXHTML にまつわる質問です。

 XML は、それ自体、専用の目的に特化したものではないため、何に使うのかが掴みにくく、さらに XHTML が絡んでくると、余計に混乱しやすいのではないかと思います。

 ここでは、その辺りの混乱を解くべく、分かりやすい言葉で説明をしてみようと思います。

 

「何とかML」・・・ML って何だ?

 XMLXHTMLHTML には、いずれも末尾に ML の2文字が付いています。 これは Mark-up Languageマークアップ言語)の略です。 マークアップとは、普通のテキスト文書の中に、「タグ」という語を入れて、構造を持たせることです。

 ……そう言うだけでは分かりにくいので、具体的な例を示します。 たとえば、次のようなテキストファイルがあるとします(上下の線は、テキストの始まりと終わりを示しています)。
------------------------------
加藤はな 女 38歳
鈴木太郎 男 27歳
------------------------------

 これは、単に情報をベタ書きしただけですが、我々人間は、これを見て、「人名の名簿っぽいものだな」とすぐに分かります。 しかしコンピュータは、これを先頭から見ていって、「加、藤、は、な、空白、女、空白、3、8、歳、改行……」というふうにしか解釈出来ません。
 コンピュータにとっては、空白も、「加」も、改行も、全て1つの文字であるに過ぎず、そこに意味の違いが見出せません。 これが名簿である事も分かりません。

 では、これを、適当な「タグ」を使って「マークアップ」してみましょう。
------------------------------
<MEIBO>
<MEMBER>
<NAME>加藤はな</NAME> <SEX>女</SEX> <AGE>38歳</AGE>
</MEMBER>
<MEMBER>
<NAME>鈴木太郎</NAME> <SEX>男</SEX> <AGE>27歳</AGE>
</MEMBER>
</MEIBO>
------------------------------

 タグは、< で始まり、 > で終わります。 タグの名前の先頭に / を付けたタグは「閉じタグ」と呼び、タグの終了を意味します(なお、< とか / 記号に何らかの意味があるわけではありません)。
 これは、文字数も行数も増えてしまい、冗長になってしまった感があります。 しかし上述したような「タグの決まり」を知っているコンピュータ(プログラム)にこれを読ませると、これはデータ全体が「MEIBO」であり、鈴木太郎は「NAME」であると解釈出来るのです。
 また、MEIBO は MEMBER を並べたものであり、MEMBER は NAME と SEX と AGE から成る、という「構造」を表現出来ています。
 つまり、マークアップ言語はただのテキストファイルなのですが、タグという「決まりごと」を使う事によって、テキストファイルで構造を表現出来るのです。

 XMLXHTML も HTML も、いずれも上記のようなマークアップを使ったテキストファイルです。 つまり、これらは全て、「構造があり、コンピュータに解釈させやすいテキストファイル」なのです。

 

HTML・・・ウェブページを作る言語

 HTML は HyperText Mark-up Language の略で、「ハイパーテキストマークアップ言語」とでも訳せるでしょう。 ほとんどのウェブページの記述に使われています。 今見ているこのページも、きっと HTML で形作られています。

 ハイパーテキストというのは、テキストとテキストをリンクでつないだものの事です。 リンクをクリックすると別のページに飛ぶ、この仕組みを表現するためのテキストがハイパーテキストだ、というわけです。 ですので、かつては、リンクの事を、わざわざハイパーリンクとも呼んでいました。
 ハイパーリンクでつながっているテキストがハイパーテキストである、とも言えます。 これをマークアップ形式で記述するための言語が HTML なのです。

 HTML では、ハイパーテキスト文書を記述するための専用タグが多数決められています。 まさに HTML である事を示す HTML タグや、頭書きを示す HEAD タグ、内容を示す BODY タグ、表を作る TABLE タグ、画像を引用する IMG タグ、リンクを実現する A タグなどがあります。

 また、HTML を送受するための通信規約は、httpHyperText Transfer Protocol)と呼ばれています。 ブラウザアドレス欄に打ち込む文字の多くが http で始まりますが、これは、ブラウザに対して、「これに続くアドレスのサーバから、http を使ってハイパーテキストファイルを受け取りなさい」、つまり、サーバから HTML を受信しなさい、と指令しているわけです。

 

XML・・・汎用のデータ記述言語

 eXtensible Mark-Up Language の略で、「拡張可能マークアップ言語」とでも訳せるでしょう。

 HTML はウェブページ記述専用のマークアップ言語ですが、XML は、用途を限定していません。

 近年、急に注目され出した XML ですが、なぜ近年注目されてきたのか、それにはもちろん理由があります。

 かつて、多くのアプリケーション・プログラムは、データを保存すると、そのアプリケーション独自のバイナリファイルになるのが普通でした。
 バイナリファイルというのは、テキストと違って、数値情報で出来ているファイルであり、人間が中身を見ても、ちょっと理解出来ない数値の羅列になっているファイルです。 身近な例で言えば、JPEGMP3 などは、バイナリファイルです。 これらを Windowsメモ帳などで開いても、普通の人にとっては何だか分からないでしょう。

 バイナリファイルは、アプリケーションの都合に合わせて自由に、無駄なく情報を書き込めるので、高速に処理出来て、サイズも小さくなる、という利点があります。
 その反面、特定アプリケーションのファイルは他のアプリケーションでは扱いにくく、そのためにはいったん変換しなければならない、等の欠点があります。

 インターネットが今ほど普及しておらず、コンピュータ同士の通信が頻繁ではなかった頃は、それでも良かったのです。 また、その頃のコンピュータは非力だったため、コンパクトなバイナリファイルを使うのは「当たり前」でした。 しかし、企業と企業の間で業務情報を通信したり、インターネットを介して異なるアプリケーションを協調させようとすると、これでは大変都合が悪くなってきてしまいました。

 インターネットや LAN が盛んに使われれば使われるほど、異なるコンピュータとの間で、あるいは異なるアプリケーションとの間で、データをやりとり出来るようにしたい、つまりデータの portability(ポータビリティ、ポータブル性、可搬性)が重要視されるようになってきたのです。

 そこで、機種やアプリケーションに依存しないデータ形式として、「マークアップ形式で構造が作れるテキストファイル」を使えば良いのではないか、という事になり、「専用でない汎用のマークアップ言語」である XML が考え出されました。
 たとえば先ほど例に挙げた MEIBO テキストファイルは、<?xml version="1.0" ?> を先頭行に追加すれば、それだけで立派に XML として通用します。 XML は汎用であるため、HTML と違って、xml タグ以外のタグが決まっていないからです。

 タグの読み取り方や、タグの閉じ方は、万国共通であるため、XML を読み書きするプログラムも、万国共通仕様です。 その「XML 読み書きプログラム」をアプリケーションに組み込めば、アプリケーションの間で、XML ファイルによるデータのやりとりが実現できるのです。

 アプリケーションによっては、たとえば先ほどの AGE タグを扱わないものがあるかも知れませんが、それは無視、つまり「知らないタグが出てきたら、閉じタグまで飛ばし読み」すれば済むわけです。 バイナリファイルの場合、その構造を他アプリケーションが知る事は難しいため、飛ばし読みさえ出来ず(構造が分からなければ、どこまで飛ばして読んで良いのかが分からない)、このような「データの可搬性」は、難しい課題でした。 「タグ」は簡単な発明ですが、驚くべき進歩をもたらしたのです。

 なお、一般的に言って、バイナリファイルで表現していたデータをテキストファイルで書き直すと、サイズは大きくなります。 つまり、コンピュータの処理能力が、それだけ余分に必要になります。 ところが幸いなことに、近年のコンピュータは、それが問題にならないくらい、飛躍的に性能が向上しました。 マークアップ言語の隆盛は、コンピュータの性能アップにも下支えされているわけです。

 今では、DVD の作成用データや、ワープロの文書ファイル、アプリケーションの設定保存など、多くの場面で XML が使われています。 また、インターネットを介して複数のサービスを結びつけ、新しいサービスを作る、いわゆる「マッシュアップ」は、XML という「万国共通のデータ記述」があるおかげで、素早く実現出来るようになりました。

 

XHTML・・・XML で作られた HTML

 HTML は、インターネット・ウェブの初期から使われているのですが、インターネットウェブと HTML を普及させるため、「多少いいかげんに書いても何とかなる」ようになっていて、閉じタグを使わなくても良いタグがたくさんあります。 初期の頃はホームページ作成ソフトなど無く、HTML を「手打ち」してウェブページを作っていたので、多少いいかげんであっても動く事が優先されたのです。

 しかし今は事情が違ってきました。 優れたホームページ作成ソフトが多くあり、ウェブページを書き換えながら動作する(動的ウェブページ)のも当たり前になっています。

 こうなると、閉じタグがきちんとしていない HTML は、「このタグは、いったいどこまで有るのか」が分からず、扱いにくい……という事になります。 動的ウェブページでは、たとえば一部内容を入れ替えるにしても、その「一部」はどれなのか、HTML のどこからどこまでが「対象」なのか、明確でなければなりません。
 最初の頃は、「適当に書いてもそこそこちゃんと表示されるから、これでどんどん書いてね!」という主旨だったのですが、今は事情が違うのです。

 そこで、「XML で HTML を表現してはどうか」という考えが生まれました。

 XML には、タグは必ず閉じていなければならない、という決まりがあります。 構造化データを記述するための言語として、それは必須の条件だからです。

 XML ファイルの中で HTML のタグを使って、それを HTML として使おうよ……というのが XHTML の主旨です。 「HTML として使おう」というものなので、XHTML ファイルの拡張子は .htm や .html であって一向に構いません(もちろん .xhtm や .xhtml を使えば、それが XHTML である事が分かりやすくなりますが、それは人間にとって分かりやすいというだけの話です)。

 XHTML と HTML は、一見して、内容がとても似ています。 形式的には、HTML に xml タグ行を付けて、全てのタグを閉じれば XHTML になるので、似ているのは当然です。
 しかし、HTML はあくまで HTML であるのに対し、XHTML はあくまで XML なのです。

 

まとめ

  • HTML … ウェブページを作るための専用マークアップ言語。 ちょっぴりいいかげんでも許される。
  • XML … 構造化データを記述するための汎用マークアップ言語。 曖昧さは許さない。
  • XHTML … HTML タグを使う XML。 HTML として使われる。 もちろん曖昧さは許さない。

 

その他もろもろ

HTML5

 最近、HTML5 という新しいバージョンの HTML が使われ始めています。 しかし XHTML の役目が終わるわけではありません。
 HTML5 は、コンピュータが扱うための内部的なドキュメント構造を持っており(HTML5 DOM)、これを人間に見える形で書き表したのが HTML5 である、という考え方を用いています。 そして、HTML5 DOM を書き表す方法として、HTML5 の他に、XHTML5 が用意されています。
 つまり、HTML5 を使う際に、HTML5 の形で書くのか、XHTML5 の形で書くのかは、書く側の選択に任されています。
 「タグの範囲を明確化する事によって扱いやすくする」という XHTML の理念は今後も生き続けるでしょう。

・閉じタグ

 たとえば <img ~> と 閉じタグ </img> の間に何も無ければ、これを、<img ~ /> と書く事も出来ます。

文字コード

 XML は、指定によりシフトJIS なども使えますが、標準では Unicode UTF-8 を使うと決められています。 なので、今後は UTF-8 の使用頻度も増えるのではないかと予想されます。

JSON

 XML は便利で、普及もしているのですが、タグの記述はちょっと「やり過ぎ感」も否めません。 同じ事を、もっと「軽く」書けるのではないか……そこで JSON の出番です。
 これは JavaScript Object Notation の略で、「JavaScrip オブジェクト記述」とでも訳せるでしょう。 JavaScript におけるデータ記述方法で、構造化データのテキストファイルを書こう、というものです。
 JSON に従うと、先ほど例に挙げた MEIBO は、次のようになります。
------------------------------
{ "MEIBO": [
{ "MEMBER": { "NAME":"加藤はな", "SEX":"女", "AGE":"38歳" } },
{ "MEMBER": { "NAME":"鈴木太郎", "SEX":"男", "AGE":"27歳" } }
] }
------------------------------
 これはこれでなんだか良さそうですが、現状、XML ほどには普及していません。

 

★追記1

 mikewanko2 さんから、「テキストでの保存は、固定長、CSV、TSV、INIファイルと昔から使われているはずですが?かつて、多くのアプリケーション・プログラムとは、何を指しているのですか?」とのご指摘をいただきました。
 ワープロ表計算、メーラのアカウントデータ、グラフィック、音楽、動画、CAD、あるいはゲームのセーブデータなど、いろいろなものが挙げられます。 特にスタンドアロン的なアプリケーションは、その傾向が強いでしょう。 競合他社製品との差別化や顧客の囲い込みのため、セーブデータの仕様がプロプライエタリである事(それはバイナリファイルにならざるを得ない)は普通にある事です。
 しかしインターネットが盛んに使われるようになると、ウェブ開発やエンタープライズ分野の開発において、データの相互運用が重要になってきて、協調動作するアプリケーションは公開仕様に基づくデータ形式を使う方が良い、という風になってきたのです。
 現在では Microsoft Office ですら XML ベースの文書データを扱うようになりました。

★追記2

rank_0ut さんから、本ノートを紹介していただきました。ありがとうございます!
http://note.chiebukuro.yahoo.co.jp/detail/n48069
 「XML」は「過疎カテゴリ」なためも有ってか、「カテゴリマスター狙い」の標的にされやすく、XML って何なのか、真面目に悩んでいる人達にとって、「知恵袋」があまり役に立っていない……と思う所が多々ありました。
 「XML はプラットフォーム・インディペンデントなデータ・ポータビリティを実現するテキスト・フォーマットの1つだ」と言えば簡単なのですが、そんなの説明になっていない!と思ったのが、本ノートを書くきっかけでした。本ノートで、1人でも多くの方が、XML のモヤモヤを晴らす事が出来れば幸いに思います。

★追記3

 ycchiechie さんから、タグと要素の関連についても触れる方が良いのではないか、とのアドバイスをいただきました。
 本ノートの主眼は「まとめ」で書いた所であり、3者それぞれの違いや目的を分かりやすく示す事にあります。タグについて若干説明しているのは、マークアップについて説明するために過ぎません(本ノートにおいては)。タグは文書要素を作るためにあるのですが、それは「3者の区別」とは、また別の話と考えております。
(文書要素とタグの関係については氏から教えていただいた下記リンクを参照)
http://www.atmarkit.co.jp/fxml/askxmlexpert/015tagelement/15tagelement.html

★追記4

 本文中、xml タグ行についてかなりの誤記があったのを修正しました。他、細かく言い回しを改善しました。

(転載以上)