[LinuxFocus-icon]
ホーム  |  マップ  |  一覧  |  検索

ニュース | アーカイブ | リンク | LFについて
[an error occurred while processing this directive]
convert to palmConvert to GutenPalm
or to PalmDoc

[Floris Lambrechts]
by Floris Lambrechts
<floris/at/linuxfocus.org>

著者紹介:

私は LinuxFocus オランダ支部の編集者を何年か務めています。 ベルキーのルーヴァンで、電子機器の生産技術を勉強するかたわら、趣味で Linux、PHP、XML、LinuxFocus をやっています。 スティーブン・ホーキングの本や、目下 Jef Raskin の「 ヒューメイン・インタフェース」を読んでいます。



日本語訳:
須藤 賢一 <deep_blue/at/users.sourceforge.jp>

目次:

 

XML 事始め

[Illustration: xml]

要約:

この記事は、XML についてのとても簡単な入門です。 メタ猫のエディ、XML構文警察、DTDといったものが出てきます。 でも、心配しないで大丈夫。ちゃんと説明しますから。;-)

_________________ _________________ _________________

 

Introduction

2001 年の夏、フランスのボルドーで開かれた LSM に LinuxFocus のメンバーの何人かが集まりました。 LSM のドキュメンテーション研究会では、たくさんの講演やディスカッションが行われましたが、結局はみんな同じ話題を扱っていました。その話題というのが XML です。 長い (楽しくもあります) 時間をかけて、XML とは何かということを説明したり、どういうメリットがあるかとか、どういう使い方があるかといったことが話されました。 この記事で扱うのもまさにその点です。興味があったら読んでみてください。

XML を私に紹介してくれた Egon Willighagen と Jaime Villate に感謝します。 この記事の一部は Jaime の記事をベースとしています。 文末に Jaime の記事へのリンクを挙げておきます。

 

XML とは

我々のようにドキュメンテーションに関っている人間ならば、XML が何なのかは多少なりとも知っているだろうと思います。 「しょせん、文法が HTML に似てて、SGML とか HTML みたいなマークアップ言語なんでしょ? 」そう、その通りです。 でも、それだけじゃないのです。
XML にはいくつか特徴があって、それがゆえに万能と言ってもいいデータフォーマットになっているのです。 あらゆる複雑なものを表現できるように思われる一方、人間が読むのも楽で、プログラムが解釈するのも簡単です。 果してそんなことがあるんでしょうか。 さっそく、この奇妙な言語を詳しく見てみることにしましょう。

メタ猫エディ

まず何より、XML は マークアップ言語 です。 マークアップ言語を使って書かれたドキュメントには、基本的に2つのものが入っています。 データメタデータ です。 データの厳密な定義を知っている人がいたら、私にも教え欲しいくらいですが、今はとりあえずメタデータのほうを説明します。;) 簡単に言うと、メタデータとはデータ自身に文脈や意味を付け加えるものです。 単純な例として、「私が飼っている猫の名前はエディです」 という文を使いましょう。 みなさんは人間ですから、'猫' が動物の種のことで、'エディ' がその名前だということは分かるでしょう。 でも、コンピュータープログラムは人間ではありませんから、そんなことは全く知りません。 そこで、メタデータを使って、データに意味を付け加えるのです (もちろん XML の構文を使います)。

 <sentence>
   私が飼っている <animal></animal> の名前は <name>エディ</name>です。
 </sentence>

これで頭が良くないコンピュータープログラムにも、'猫' が種を示し、'エディ' が名前だということがわかります。 名前がみんな、種がで印刷されたドキュメントが欲しかったら、 XML を使うことでとても簡単になります。 遊びがてら書きますと、結果は次のようになります。

 私が飼っている の名前は エディです。

理屈の上では、レイアウトに関する情報 (上の場合は色) は、スタイルシートと呼ばれる別のファイルで指定することが可能です。 そうすることで、レイアウト情報と内容を分離することになります。 Web designTM の分野では、聖杯のごとく崇められている方法です。 さて、これまでのところ、特別なことは何もしていません。 メタデータを付与するのはマークアップ言語としては普通のことです。 では、XML のどこがすごいというんでしょうか。

構文警官

まず、XML では構文がとても厳密に決められています。 例えば XML では全ての <タグ> は終了 </タグ> と対応している必要があります (注:何もないのに <タグ></タグ> のように書くのは意味がないので、<タグ /> のようにも書くことができます。これで寿命が2、3分は延びるというものです)。 もう一つの決まり事は、タグを "まぜこぜ" にしてはいけないということです。 開始タグの順番と逆順で終了タグを書かなくてはなりません。 次の例は正しくありません。

<B> ボールドテキスト <I>ボールドかつイタリックのテキスト </B> イタリックのテキスト </I>

構文規則では </I> タグを </B> タグよりも先に書かなくてはなりません。
それと、XML ドキュメント中の _全ての_ 要素はタグの内側に書く必要があります。 前述の例で文全体を <sentence> タグで囲んだのはそういう訳です。 これがないと、文の中のいくつかの単語はタグの中に入っていないことになり、XML の構文警官をひどく怒らせてしまうことになります。
Mozilla screenshot
Mozilla の構文警官が出動しているところ...

このように強力な警官隊ですが、利点もあります。 それは秩序を守ることです。 XML が厳密な構文規則に従っていればこそ、プログラムが読み込むのがとても簡単になるのです。 また、XML ドキュメントのデータが構造化されていれば、人間が読み書きするのも楽になります。
しかし、このような XML の '理論上の' 特長は、実際にはかならずしもあてはまらない場合があります。 例えば、現在の XML パーサーのほとんどは、まったくのろまで、サイズも巨大です。 そこから判断すると、ソフトウェアが XML を読み込むのはあまり簡単ではないようにも思われます。 ここでは、XML で書けるからというだけの理由で、*何にでも* XML を使うのは得策ではないとだけ言っておきましょう。 ドキュメントの中を何度も参照する必要があるアプリケーションや、サイズが巨大なドキュメントを扱う場合には、XML を選ぶのは適切ではありません。 もちろん、XML をそういった目的に使用できないと言っている訳ではありません。
XML の強力な能力と遅さを示す例を挙げると、XML ドキュメントの中にデータベースを入れることができるという事実があります。 (同じことを HTML でやってみてください :P)。 Egon Willighagen が LinuxFocus のオランダ支部でやったのがまさにそれで、 そのシステムについての彼の記事へのリンクを文末に示します。 この事例では、純粋な速度 (例えば mySQL を使った場合と比べて) よりも、自家製のファイルフォーマットが持つ柔軟性と拡張性を重視しています。
XML の厳格な構文に関して付け加えておきますと、構文チェッカーと仲良しになれば、自分の仕事の一部を警官に任せることも可能になります。 ただしそのためには DTD を使いこなす必要があるのですが。

 

DTD

前述の 'メタ猫エディ' の例では、XML タグを好きなように決めましたが、そのような創作活動を警官隊が見逃してくれる訳はありません。 警官は我々が何を、どうやって、いつ、(可能なら) なぜ行っているのかを知りたがっているのです。 よろしい、では DTD の全容を説明しましょう。

DTD を使うと新しいタグを '発明' することができます。 実際には、XML の構文に従っている限り、まったく新しい言語を発明することができます。
DTD は Document Type Definition の略ですが、XML 言語の詳細が入っているファイルです。 実際には使用可能なタグの一覧と、その属性、タグをどのように組み合わせて良いかということが書かれています。 DTD は、そこで定義される XML 言語でできることとできないことを表しています。 よって、'XML 言語' と言った場合には実際には特定の DTD を指しています。

警官に働いてもらう

DTD により、ある特定の場所で何かをするように強制される場合があります。 たとえば DTD は、ドキュメントのタイトルを書いたタグを入れるように強制することもできます。 これの良い点は、必要なタグを自動的に挿入してくれるようなソフトウェア (例えば emacs モジュール) が作れるということです。
このように、ドキュメント構造の一部は自動的に埋めることができます。 構文はとても厳格で明確ですから、ドキュメントを書く際には DTD が案内役を務めてくれるでしょう。 もし間違って終了タグを書き忘れたとしても、警官が知らせてくれます。 そう考えると、警官もそう怒ってばかりということでもなさそうです。 現実の警官なら 「あなたには黙秘権があります」 というところですが、XML の警官は 'Syntax error @ line xx : ' というようにやさしく教えてくれるのです... :)
そうやって警官が仕事をしてくれている間に、*あなた* はドキュメントの中身にだけ集中していれば良いのです。

まぜこぜ

さらに、XML には複数の DTD を同時に使うことができるというすばらしい特長があります。 つまり、ひとつのドキュメントの中で、同時に複数の異なるデータ型を使うことができるということです。

このような '混合' は XML 名前空間を使うことで可能となります。 たとえば、自分の .xml ドキュメントに Docbook DTD をインクルードできます (この例では 'dbk' プレフィックスがそうです)。 そうすることで、ドキュメント中で Docbook のタグをすべてこの形で使うことが可能となります (Docbook のタグに <just_a_tag>) というタグがあるとすると:

)

 <dbk:just_a_tag> 何かの文 </dbk:just_a_tag> となります。

名前空間の仕組みを使うと、全ての XML の DTD の、全てのタグと属性が利用可能になります。 これで、様々な可能性が開けてきます。 次の章ではそれについて説明します。  

いろいろな DTD

ここでは (一部では) 既に使われている DTD をいくつか集めてみました。  

リンク

W3C:World Wide Web コンソーシアム
XML、MathML、CML、RDF、SVG、SOAP、XHTML、 名前空間などに関する情報があります。
www.w3.org

Jaime Villate が書いたものがいくつかあります (最初の2つを読むにはオンライン翻訳ソフトが必要かもしれません。)
Introduction to XML(in Spanish)
How to generate HTML with XML(in Spanish)
LSM-slides

HTML tidy プログラム:
www.w3.org/People/Raggett/tidy

Docbook
www.docbook.org

Mozilla.org の SVG プロジェクト
www.mozilla.org/projects/svg

LinuxFocus の記事:
Using XML and XSLT to build LinuxFocus.org(/Nederlands)
Making PDF documents with DocBook


Webpages maintained by the LinuxFocus Editor team
© Floris Lambrechts, FDL
LinuxFocus.org
翻訳履歴:
en --> -- : Floris Lambrechts <floris/at/linuxfocus.org>
en --> jp: 須藤 賢一 <deep_blue/at/users.sourceforge.jp>

2003-06-01, generated by lfparser version 2.36