2006 年 9 月 20 日 23 時 59 分

Extensible Markup Language (XML)


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


CSS や Dynamic HTML と発展する中、
HTML の役割も少しずつ変化してくる。

HTML は文書の作成者が作成するだけではなく、
Dynamic HTML を使って動的に操作可能になったことで、
HTML は Web ブラウザにおける GUI を表現するための
フレームワークとしての役割を持つようになる。

このように、HTML が注目を浴びるようになった中、
HTML を汎用表現として使えないかという議論が生まれた。

HTML の要素を階層として自由に表現できる能力は、
深い階層を持つデータ表現に適している。
そのため、これを文書だけに限定せず、
プログラムで扱う汎用的なデータ構造として、
利用できないかと考えられたのだ。

そこで誕生したのが、XML である。
Extensible Markup Language の略であり、
高拡張性記述言語とでも訳しようか。
要素や属性を自由に定義できるようにし、
文法に関しては HTML よりも厳格化した規格である。

そもそも、XML や HTML のルーツは SGML である。
Standard Generalized Mark-up Language の略で、
標準汎用記述言語という名前が示すとおり、
文書に限らず、色々な用途に使うことを意図した規格なのだ。

しかしながら、SGML は「恐ろしく柔軟」であった。
自由にタグや属性を定義できる柔軟性は良いのだが、
文章の状態によって、タグの終了括弧を省略できたり、
タグ名を省略したりすることができ、
文書を記述する際の文法がかなり柔軟であったのだ。
そのためプログラムで SGML を解析するのは大変であった。

<(loose)body>
    <h1 center>Chapter 1.</>
    <img src=logo<hr noshade>
    <p>1st paragraph</<>2nd paragraph
    <>3rd <strong>paragraph</</p>
    <>This is <a href=foo/linked text/.</p>
</(loose)body>

これは、SGML 文書インスタンスの一部分の例である。
故意に HTML に似せているが、かなり違和感があると思う。
これを同じような HTML に直すとこうなる。
((loose)は DTD の局所指定で、SGML でしか使えない)

<body>
    <h1 align=center>Chapter 1.</h1>
    <img src=logo><hr noshade>
    <p>1st paragraph</p><p>2nd paragraph
    <p>3rd <strong>paragraph</strong></p>
    <p>This is <a href=foo>linked text</a>.</p>
</body>

SGML では、驚異的な省略記法が可能であることが分かる。
これでは、解析するのは大変なのは明らかだ。

さて、HTML では、SGML より文法は厳しくなったが、
まだ完全とは言い難いものがあった。
一番厄介な問題が、img や hr 等の、
終了タグの存在しない空要素である。

上記の例の場合、<p>1st paragraph</p> の部分は、
<img src=logo> で開始する要素の中か外かは、
IMG 要素の定義を知っていないと明確でない。
また、<p>3rd <strong>paragraph</strong></p> は、
<p>2nd paragraph の中に入れ子になっているのか、
その直前に </p> が省略されてるのかが明確でない。

つまり、要素について事前に知っていない限り、
文書を解析することができないということになる。

そもそも、HTML では使える要素や属性、
それらの意味などが全て決められてしまっており、
自由に定義して利用することができない。

これらを踏まえて、XML では、
文法に関して非常に厳格な既定をしている。

<body>
    <h1 align="center">Chapter 1.</h1>
    <img src="logo"></img><hr noshade="noshade" />
    <p>1st paragraph</p><p>2nd paragraph</p>
    <p>3rd <strong>paragraph</strong></p>
    <p>This is <a href="foo">linked text</a>.</p>
</body>

属性値は必ず "" で囲み、属性値だけの指定はできず、
必ず属性名="属性値" という形とする。
また、終了タグは省略できず、空要素のタグは、
開始タグの直後に終了タグを書くか、
タグの最後に /> とすることで内容がないことを示す。

厳格な指定により、要素は曖昧なく階層構造となる。
これにより、要素や属性の定義を知らなくとも、
XML を階層構造として解析することが可能となるのだ。

また、文法の曖昧性をなくすことで、
プログラムを使って解析することが容易になる。
これは、プログラムの軽量化や高速化にも役に立つのだ。

XML は、HTML に親和性の高い言語であるため、
主に WWW 上でデータ交換を行うための記述言語として、
普及させることを目的として策定されたのである。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.