XSLの基礎
はじめに
XSLはXMLのスタイルシート言語である。HTMLのスタイルシート
CSSより高機能である。
CSS - HTMLのスタイルシート
HTMLは予め定義されたタグを使うので、これらのタグの意味はよく
理解されている。<p>要素は節を定義し、<h1>要素は
接頭を定義する。ブラウザはこれらの要素をどのように表示するかを
知っている。
XSL - XMLのスタイルシート
XMLは、私達が欲しいあらゆるタグを使うことができるように、
予め定義されたタグを使わないので、これらのタグの意味は理解されていない。
<table>はHTMLテーブルを意味するかも知れないし、家具の
一部かもしれない。XMLの本来の在り方からわかるように、ブラウザは
XML文書をどのように表示するかを知らない。
XML文書を表示するため、その文書がどのように表示されるべきかを
記述するメカニズムをもつ必要がある。その1つがCSSだが、
XSL(the eXtensible Stylesheet Language)は好まれるXMLのスタイルシート
言語である。それはHTMLによって使われるCSSよりもはるかに高機能である。
XML - スタイルシートより多く
XSLは3つの部分から成っている。
- XML文書を変換するためのメソッド
- XMLのパーツとパターンを定義するためのメソッド
- XML文書をフォーマットするためのメソッド
もしこれらの意味がわからないなら、XSLを次のように思え。
XMLをHTMLに変換できる言語、XMLデータをフィルターし分類できる言語、
XML文書のパーツに宛名書きできる言語、マイナス値を赤に表示するというように
データ値を基にしたXMLデータをフォーマットできる言語、そして、
スクリーンや紙や声のような異なったデバイスにXMLデータを出力できる
言語。
XSLはWorld Wide Web標準である
XSLはWorld Wide Webコンソーシアムによって奨励された標準である。
XSL言語
XSLは実際には3つの言語から成っている。最も重要な言語は
XSLTである。
XSLは3つの言語
XSLは実際には3つの言語から成っている。
- XSLTはXMLを変換するための言語である。
- XPathはXMLパーツとパターンを定義する。
- XSLフォーマットオブジェクトはXML表示を定義するために言語である。
XSLTはXML文書をその文書の他のタイプか、他のXML文書に変換するための言語である。
XPathはXML文書のパーツを宛名書きするための言語である。XPathはXSLTによって
使われるように設計された。フォーマットは読者や聞き手のために適当な出力に
XSL変換の結果をチューニングするための処理である。
XSLT - XSL変換
XSLTはXSL標準の最も重要な部分である。それはXSLの部分であり、
XML文書を他のXML文書にないしは他のタイプの文書に変換するのに使われる。
XSLTはXML文書をブラウザが認識可能なあるフォーマットに変換することが
できる。そのようなフォーマットの1つがHTMLである。普通XSLTは
おのおののXML要素を1つのHTML要素に変換することによってこれを実現する。
XSLTはまた、全く新しい要素を出力ファイルに追加することもできるし、
それらの要素を取り除くこともできる。XSLTはそれらの要素を再配置し
分類することができ、どの要素が表示されるかをテストし決定することも
できる。
変換処理を記述する共通の方法は、XSLは1つのXMLソースツリー(XML
ソース文書)を1つのXML結果ツリー(XML結果文書)に変化するために
XSLTを使うと言うことである。
どのようにそれは働くか?
変換処理において、XSLTは1つ以上の予め定義されたテンプレートが
一致するソース文書の部分を定義するためXPathを使う。もし
1つ一致すると、XSLTはソース文書の一致したパーツを結果文書に
変換する。1つのテンプレートに一致しないソース文書のパーツは
変更されないという結果に終る。
XSLブラウザ
この時点でXSLをサポートするブラウザはたいへん少ない。
このチュートリアルではXSLをデモするためにIE5.0を用いる。
IE XMLパーザ
IE XSLエンジン
これはW3CのXSL奨励からの標準の方法である。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
これは正しくないIEの方法である。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl">
|
IE MSXML
MSXML2.0はIE5.0で出荷されたXMLパーザの名前で、
MSXML2.5はWindows2000で出荷されたXMLパーザの名前である。
MSXML3.0は最新のXMLパーザである。
マイクロソフトによると、MSXML3.0は公式W3CのXSL奨励に100%
互換があるという。
XSL - 変換
XML文書でスタート
HTMLに変換したいXML文書でスタートする。
<?xml version="1.0"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
.
.
.
|
XSLスタイルシート文書を作る
そして、変換テンプレートを持ったXSLスタイルシートを作る。
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
スタイルシートをXML文書にリンクする
そして、XML文書にXSLスタイルシート参照を追加する。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="cd_catalog.xsl"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
.
.
.
|
XSL - テンプレート
XSLはXMLの出力の仕方を記述するためにテンプレートを使う。
CSSはルールを使う
私達のCSSスクールを勉強すると、CSSがHTML要素の出力を定義するために
1つ以上のルールを使っていることがわかる。1つのセレクタは
ルールをHTML要素に関連付けるために使われる。
CSSにあるpセレクタは1つの<p>要素が1つのarialと名付けられた
フォントを使って表示されるように話す。
XSLはテンプレートを使う
XSLはXML要素の出力の仕方を定義するためにテンプレートを使う。
一致属性はテンプレートをXML要素に関連づけるために使われる。
(一致属性はXML文書の全体のブランチのために1つのテンプレートを
定義するのにもまた使われる。)
前の章からXML CDカタログを出力するためのテンプレートを含む
XSLスタイルシートを見よ。
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>.</td>
<td>.</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
スタイルシートはそれ自身が1つのXML文書であるので、
その文書は<?xml version='1.0'?>から始まる。
xsl:stylesheetタグはスタイルシートの開始を定義する。
xsl:templateタグはテンプレートの開始を定義する。
テンプレート属性であるmatch="/"はテンプレートをXMLソース文書の
ルート(/)に関連づけている(一致させている)。
最後の2つのラインを除いて、文書の残りはテンプレートそれ自身
を含む。
この変換の結果は次のように見える。
<xsl:value-of> 要素
前の例題の結果は少々失望する。なぜならXML文書から出力へ
コピーされるデータがないためである。
XSLの<xsl:value-of>要素はXML要素をXSL変換の
出力の流れの中に選択してゆくことができる。
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td><xsl:value-of select="CATALOG/CD/TITLE"/></td>
<td><xsl:value-of select="CATALOG/CD/ARTIST"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
選択属性値のための構文法はXSLパターンと呼ばれる。
それはファイルシステムにおいて'/'がサブディレクトリーを選択する
のをナビゲートするように働く。
上記の変換の結果は次のように見える。
Title |
Artist |
Empire Burlesque |
Bob Dylan |
<xsl:for-each>要素
前の例題の結果もまた少々失望する。なぜなら
たかだか1ラインのデータしかXML文書から出力にコピーされないからである。
XSLの<xsl:for-each>要素はすべてのXML要素をXSL変換の
出力の流れの中に選択してゆくことができる。
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
xsl:for-each要素はXML文書にある要素を位置付けて要素毎にテンプレートの
パーツを繰り返す。
変換の結果は次のようになる。
Title |
Artist |
Empire Burlesque |
Bob Dylan |
Hide your heart |
Bonnie Tyler |
Greatest Hits |
Dolly Parton |
Still got the blues |
Gary More |
Eros |
Eros Ramazzotti |
One night only |
Bee Gees |
Sylvias Mother |
Dr.Hook |
Maggie May |
Rod Stewart |
Romanza |
Andrea Bocelli |
When a man loves a woman |
Percy Sledge |
Black angel |
Savage Rose |
1999 Grammy Nominees |
Many |
For the good times |
Kenny Rogers |
Big Willie style |
Will Smith |
Tupelo Honey |
Van Morrison |
Soulsville |
Jorn Hoel |
The very best of |
Cat Stevens |
Stop |
Sam Brown |
Bridge of Spies |
T`Pau |
Private Dancer |
Tina Turner |
Midt om natten |
Kim Larsen |
Pavarotti Gala Concert |
Luciano Pavarotti |
The dock of the bay |
Otis Redding |
Picture book |
Simply Red |
Red |
The Communards |
Unchain my heart |
Joe Cocker |