Powered by SmartDoc

XSLT

XSLTとは,XMLデータをトランスレートするための言語です.詳しく知りたいかたは,W3CのXSL Transformations (XSLT)をお読みください.

ここでは,私がXSLTについて日々考えていることを語ります.

簡単なXSLT

JDK 1.4以降にXSLTが含まれています.

XalanやMSXMLは必要ありません.

helloxslt.java
 

import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class helloxslt
{
	public static void main(String[] args)
	{
		try
		{
			// TransformerFactoryインスタンスを取得
			TransformerFactory factory = TransformerFactory.newInstance();
			// XSLファイルからtranceformerを取得
			Transformer transformer =
				factory.newTransformer(new StreamSource("helloxslt.xsl"));
			// 出力するエンコーディングを設定
			transformer.setOutputProperty("encoding", "Shift_JIS");
			// XMLファイルをXSLTで変換して出力
			transformer.transform(
				new StreamSource("data.xml"),
				new StreamResult(System.out));
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}
helloxslt.xsl
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method = "text" />
</xsl:stylesheet>

リンク集

コンピュータシステムの内部動作について思うところ

コンピュータシステムとは,データをトランスレートするもの

コンピュータシステムを新しく作るとき,20世紀までは,プログラムの設計から始めていました.しかし,これではコストが膨大になることがわかってきました.そこで,21世紀のコンピュータシステムでは,データ指向のコンピュータシステムという考え方が導入されました.コンピュータシステムとは,データをトランスレートするものです.入力データを,なんらかの規則にしたがってトランスレートし出力するもの,これがコンピュータシステムです.

たとえば,JSP/サーブレットシステムの多くでは,XMLデータを読み込み,ユーザの入力にあわせてデータを計算し,結果をHTMLとして出力しています.これって,トランスレートですね.

データ指向コンピュータシステム

データはデータ構造に従っています.データ構造を綺麗に設計することがコンピュータシステムを作る上で重要です.

入力のデータが決まっており,出力のデータも決まっています.コンピュータシステムは,入力のデータをもとにして,出力のデータを生成します.この考えかたを,データ指向といいます.データ指向では,コンピュータシステムの中心にあるものは,プログラムではなくデータです.

データ,データ構造,データのトランスレート.データ指向コンピュータシステムでは,この3つにより,コンピュータシステムは構成されます.

道具たち

2001年現在,データの記述フォーマットとしてはXMLが最適です.XML以外は考えられません.これは,多くの書籍や雑誌が語るとおりです.これについての異論はないものとします.データはXMLです.

データ構造を設計するための道具を,スキーマ言語といいます.スキーマ言語にはいくつか種類がありますが,評判が高いのはRELAX NGです.RELAX NGでデータ構造の設計を行います.データ構造はRELAX NGです.

データにはXMLを使い,データ構造にはRELAX NGを使うことはわかりました.では,データのトランスレートには,なにを使えばよいのでしょうか.

XSLTとは,データをトランスレートするためだけの道具

データのトランスレーションを行うための道具が,いくつかあります.もっとも普及しているものはJavaでしょう.JavaからDOMやSAXというAPI群を使うことで,データのトランスレーションが容易に行えます.

しかし,ここで扱うのは,Javaではなく,XSLTです.XSLTとは,データをトランスレーションするためだけに設計開発された道具です.XSLTは,データをお気楽にさくっとトランスレーションするときに使うとエレガントです.XSLTとはJavaよりもエレガントに,美しさを求めるあなたのための,データ指向コンピュータシステムのコンピュータシステム記述言語です.

コンピュータシステムは,データをトランスレートするもので,XSLTとは,データをトランスレートするための道具です.三段論法で,XSLTとは,コンピュータシステムを作るための道具です.コンピュータシステムは,XSLTを使って作るものです.

XSLTはスタイルシートではない

XSLTは,歴史をたどると,もともとはスタイルシートでした.スタイルシートとは,文書のコンテンツと表示情報とを分離する,あのスタイルシートです.HTMLでいえば,CSSです.

で,スタイルシートなんて,簡単です.なにも難しいことはありません.では,XSLTは,XMLのスタイルシートですから,そんなに難しくなるはずがないだろうと,そう思いがちです.

が,XMLのスタイルシート,つまり,XSLTとは,スタイルシートの範囲を大幅に超えています.これは,スタイルシートではなく,むしろ言語なのです.XSLTをスタイルシートだと思って,あまく見てかかると,ひどい目に遭います.ある程度,腰をすえてかかるくらいの覚悟は必要でしょう.

XSLTは,スタイルシートではなく,コンピュータシステムを作るための道具です.

XSLTは難しい?

いきなり核心についてしましましたが,ここで問うべきは,XSLTは簡単なのかと,そういうことです.

私は,XSLTは,簡単に思う人と,難しく思う人と,両方いると考えています.これが,XSLTをめぐる事情を複雑にしている要因です.

XSLTを簡単に思う人と,難しく思う人と,両方いるというのは,その人のバックグラウンドに由来します.

XSLTは,チューリングモデルです.オートマトンです.

と,この説明でわかってくれる人は,あなたは既にXSLTにハマりはじめています.ようこそ,XSLTへ.

この説明でわからない人が大半でしょうから,詳しく説明します.XSLTは,現在世界で広く普及している主なプログラミング言語とは,そもそものアプローチが違います.JavaとかCとかVisualBasicとかCOBOLとかは,手続き型のプログラミング言語です.これらを経験していると,そのパラダイムの違いに,なんでこんな簡単なことができないのかと,お怒りになられるかもしれません.

しかし,XSLTの思想というのは,複雑なことを簡単に行います.XSLTにより,複雑な処理を,驚くほどシンプルに記述できます.

コンピュータシステムに対する考え方を,手続き型ではなく,チューリングモデルに切り替えることが重要です.

LispとかPrologとかLogoは,XSLTに近いプログラミング言語です.これらの言語を知っていると,XSLTも抵抗なく習得できます.私が始めて触ったプログラミング言語はLogoですので,私はXSLTに対する素養があるのではと思っています.素養というと大げさですが,XSLTを簡単に感じるか難しく感じるかは,このXSLTの世界観をつかめるかにかかっているのです.これは,重要なことです.この世界観を理解できなければ,あなたはXSLTを使うべきではありません.Javaってください.

私が書いたXSLTのサンプル


目次ページへ

Yasunori Koshikawa h070017@umasugi.com