XMLノート
Webページ作成ノート 目次 / rain's home page

XML(Extensible Markup Language)

作成日: 1999年09月15日
最終更新日: 1999年11月01日

XMLの概略

HTMLではその機能を拡張するため、ブラウザのベンダーが独自のタグを定めてそれが一般化し、 追随される形でW3Cの標準となってきまが、このような拡張ももう限界に達しているようです。 HTML4.0 strict では文書の構造と表現方法を分離し、HTMLは文書構造だけを記述し表現は スタイルシートを使って別に定義するという方向性を打ち出しました。これによって文書の表現 方法は構造にとらわれず、より自由度の高いものになりました。

さらに、HTMLの文書構造自体の柔軟性も要求されてきました。HTMLは既存の文書をハイパーテキスト 化するのには十分なのでしょうが、それ以外の様々な目的のために使用するのは無理があります。 そこで要素や構造を文書制作者が独自に決定できるような柔軟性を持つマークアップ言語が必要にな ってきました。

その点では、SGMLは柔軟性に富み様々な文書をマークアップできる仕組みを持っていますが、 その反面、実際にそれを運用するとなると、SGML宣言やDTD等がその文書毎に必要になり、 その適応は複雑にならざるを得ません。 そこで、SGMLの機能の一部を制限した簡略なマークアップ言語としてXMLが登場しました。 XMLの拡張可能( Extensible )という言葉はHTMLにおいては困難だった拡張が可能になったことを 意味しているのでしょう。XMLがHTMLと根本的に違うのは、HTMLがSGMLの一つのアプリケーション だったのに対し、XMLはSGMLと同様にそれ自身が文書のマークアップを定義できるメタ言語である ということです。

SGMLでは文書毎にSGML宣言や文書型定義(DTD)を作成するのが必須でした。 XMLでは必ずしもそれらは要求はされません。その代わり、様々な省略を許さない整形式(well formed) の文書とすることで、DTD無しでも文書構造を解釈できるようにしています。

HTML文書はタグ省略の機構や短縮タグ機構を使うことによってマークアップを容易にしてきました。 これらの省略された部分を補うことによって、HTML文書を整形式のXML文書にすることができます。

XMLの概略を知る上での有用なリンク

XMLファイルを作ってみる

とりあえず簡単なXMLファイルを作成してみます。XML文書はその構造を記述するだけですから、 XML対応のブラウザIE5.0で見ると、要素名とその内容が並ぶだけです。そこで、これに persons.css という外部スタイルシートをリンクして表現しています。 CSS2の仕様では要素名や属性値などの識別子にASCIIコード以外の文字も使えそうですが、IE5.0のCSSの実装ではエラーこそでませんが機能しないようです。このためここでは要素名は英字を使っています。
<?xml version="1.0" encoding="Shift-JIS"?>
<?XML:stylesheet type="text/css" href="persons.css"?>
<persons>
<person>
   <name>海藤 正夫</name>
   <sex>男</sex>
   <age>31</age>
   <home>西海市</home>
</person>
<person>
   <name>野呂 光</name>
   <sex>男</sex>
   <age>31</age>
   <home>西海市</home>
</person>
</persons>

persons.cssの内容

persons,person,name,age,sex,home {
        display: block
        }
persons {
        margin: 2% 15% 3% 10%;
        background-color:       #DFD;
        }
person  {
        margin: .3em .3em .3em .3em;
        padding:.2em .2em .2em .2em;
        width:  50%;
        }
name    {
        font-size:      large;
        color:  #66F;
        }
age     {
        font-size:      medium;
        color:  #FFF;
        background-color:       #AAF;
        text-align:     right;
        }
sex     {
        font-size:      medium;
        color:  #66F;
        background-color:       #FFF;
        text-align:     right;
        }
home    {
        font-size:      medium;
        color:  #66F;
        background-color:       #FFF;
        text-align:     right;
        }

XSL

Resource

XSL(Extensible Stylesheet Language)はスタイルシートを書き表す言語です。 XSLは以下の二つの部分から出来ています。

XTによるHTMLへの変換

XTは、スタイルシートとしてXSLを使ったXML文書をHTML文書に変換するXSLプロセッサです。 XTはデフォルトのXMLパーサとしてXPというSAXパーサを使っていますが、XPは日本語の処理が出来 ません。そこで、日本語が利用できる IBM AlphaWorks のXML4Jをダウンロードし、これをXMLパーサとして使用します。

XTの実行環境の構築

JAVAのインストール

これらのアプリケーションの実行にはJAVAが必要です。JDKのバージョンは1.2を使用しました。 これらはhttp://java.sun.com/products/jdk/1.2/ja/ からダウンロードできますが、ファイルサイズが19.4MBと大きいのでJAVA系の雑誌など(例えば、JAVA WORLD) からインストールした方がいいかも知れません。

jdk1_2_2-win.exeをインストールすると、ルート下 C:\ に jdk1.2.2 というフォルダが出来ます。

autoexec.bat をエディタで開き、 c:\jdk1.2.2\bin への PATH を追加します。例えば、PATH行の下に

set PATH=%PATH%;c:\jdk1.2.2\bin

と、現在のPATHに c:\jdk1.2.2\bin へのPATHを追加する意味の行を入れます。

XML4Jのインストール

XTのインストール

実験

xtを実行するコマンドは添付の xt.htm によれば以下の通りです。

java -Dcom.jclark.xsl.sax.parser=your-sax-driver com.jclark.xsl.sax.Driver source stylesheet result

実際にこのコマンドを打っていくのは面倒なので、c:\bin上にバッチファイルを作ります。

バッチファイルの内容は次の通りになります。テキストファイルを新規作成して以下のコマンドを 貼り付けxt.batとして保存します。

java -Dcom.jclark.xsl.sax.parser=com.ibm.xml.parsers.SAXParser com.jclark.xsl.sax.Driver %1 %2 %3

c:\bin上に、XMLファイルが test.xml 、XSLスタイルシートが test.xslとしてあった場合、 c:\binからコマンドプロンプトを起動して以下のようにタイプすると 結果がresult.txtとして 出力されるわけです。

c:\bin>xt test.xml test.xsl result.txt

テスト

以下のような簡単なXML文書とXSLスタイルシートを作ってみます。

test.xml

<?xml version="1.0" encoding="shift_jis"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>

<登場人物リスト>
<登場人物>
   <名前>海藤 正夫</名前>
   <性別>男</性別>
   <年齢>31</年齢>
   <出身地>西海市</出身地>
</登場人物>
<登場人物>
   <名前>野呂 光</名前>
   <性別>男</性別>
   <年齢>31</年齢>
   <出身地>西海市</出身地>
</登場人物>
</登場人物リスト>

test.xsl ここではname要素だけを抽出しています。

<?xml version="1.0" encoding="shift_jis"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"
                xmlns:html="http://www.w3.org/TR/REC-html40"
                result-ns="html">

<xsl:template match="/">
<html>
<head>
<title>XTのテスト</title>
</head>
<body>
<div>
<xsl:for-each select="登場人物リスト/登場人物">
        <div>
        <xsl:value-of select="名前"/>
        </div>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

result.txt

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns:html="http://www.w3.org/TR/REC-html40">
<head>
<title>XT&#12398;&#12486;&#12473;&#12488;</title>
</head>
<body>
<div>
<div>&#28023;&#34276;&#12288;&#27491;&#22827;</div>
<div>&#37326;&#21570;&#12288;&#20809;</div>
</div>
</body>
</html>

とりあえずHTMLファイルに変換されますが、日本語の文字が全部ユニコード番号の文字参照になって しまうのが難点です。これはXTがUTF-16以外でエンコーディングされた文字を文字参照で表してしまう のでしょうか? 

XTによる変換で注意しなければならないのは、XSLのネームスペースです。 XSLに記述するネームスペースは以下のようになります。

xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"

一方、IE5.0でXSLを使ったXML文書を表示させるには上記のネームスペースでは駄目で、 以下のようにしなければきちんと表示されないようです。

xmlns:xsl="http://www.w3.org/TR/WD-xsl"

Top ↑
mail to rain